0

I can't unlink file from server folder.

Error Warning:

mysql_fetch_array() expects parameter 1 to be resource, boolean given on line 4.

PHP Code:

<?php
if($_GET['action'] = "deletelink" && !empty($_GET['id']) && is_numeric($_GET['id'])) {

    $result = mysql_query("DELETE FROM books WHERE id='".mysql_real_escape_string($_GET['id'])."' ");
    while ($a_row = mysql_fetch_array ($result) )
    {
    unlink("/home/me/public_html/upload/image/$a_row[image]");
    }
    mysql_query("DELETE FROM 1 WHERE fid='".mysql_real_escape_string($_GET['id'])."' ");
    mysql_query("DELETE FROM 2 WHERE fid='".mysql_real_escape_string($_GET['id'])."' ");
    mysql_query("DELETE FROM 3 WHERE fid='".mysql_real_escape_string($_GET['id'])."' ");
    mysql_query("DELETE FROM 4 WHERE fid='".mysql_real_escape_string($_GET['id'])."' ");

}
mymiracl
  • 595
  • 1
  • 10
  • 21

2 Answers2

1

There are a couple of issues with your code:

  1. You do not fetch anything from the database first
  2. Using the deprecated mysql_ functions
  3. Using multiple DELETE questions (can they be combined somehow?)
  4. The comparison $_GET['action'] = 'deletelink' is not a comparison at all (and always true as it is an assignment).

Concerning your issue, you must select the data first like so:

<?php
if($_GET['action'] == "deletelink" && !empty($_GET['id']) && is_numeric($_GET['id'])) {
    // you need to fetch the result first!
    $result = mysql_query("SELECT * FROM books WHERE id='".intval($_GET['id']);

    while ($row = mysql_fetch_array ($result) )
        unlink("/home/me/public_html/upload/image/{$row['image']}");
    // here come your delete statements
}
Jan
  • 40,932
  • 8
  • 45
  • 77
0

Simple print whether you get records from database and also if you get record, do you get filepath...see the printing code below with =======>

<?php

 if($_GET['action'] = "deletelink" && !empty($_GET['id']) && is_numeric($_GET['id'])) {

     $result = mysql_query("DELETE FROM books WHERE id='".mysql_real_escape_string($_GET['id'])."' ");


//=======>print to check if records are returned by database otherwise while loop won't be executed below
echo mysql_num_rows($result);

while ($a_row = mysql_fetch_array ($result) )
{

//=======>print this path and check if file exists on this path
echo "/home/me/public_html/upload/image/$a_row[image]";

 unlink("/home/me/public_html/upload/image/$a_row[image]");
}
                mysql_query("DELETE FROM 1 WHERE fid='".mysql_real_escape_string($_GET['id'])."' ");
                mysql_query("DELETE FROM 2 WHERE fid='".mysql_real_escape_string($_GET['id'])."' ");
                mysql_query("DELETE FROM 3 WHERE fid='".mysql_real_escape_string($_GET['id'])."' ");
                mysql_query("DELETE FROM 4 WHERE fid='".mysql_real_escape_string($_GET['id'])."' ");

        }
Alpesh Panchal
  • 1,687
  • 11
  • 9
  • This won't work, unfortunately. Did you ever get something back from a `DELETE` statement? Additionally, there are some other issues with the code as well. – Jan Dec 27 '15 at 11:23