Elliott
Elliott

Reputation: 3864

PHP for loop error Undefined offset

I have the code below which loops through selected checkboxes and executes and sql statement.

if (isset($_POST['delete']))
{
   for($i=0;$i<$recordcount;$i++)                       
   {                        
       $deleteid = isset($_POST['checkbox'][$i]);
       echo "ID = ".$deleteid."<br />"; //Error checking
       $sqldelete = "DELETE FROM customer WHERE cus_ID = ".$deleteid."";
       echo $sqldelete."<br />"; //Error checking
       $deleters = $conn->Execute($sqldelete);                  
   }
}

This runs the sql query but it tries it run it once more than required, i.e I check two check boxes, the sql runs 3times. So this casues an error as the ID is empty. I also get an undefined offset 1.

Any advice? Thanks.

Upvotes: 0

Views: 2267

Answers (3)

Bhanu Prakash Pandey
Bhanu Prakash Pandey

Reputation: 3785

try this

if(isset($_POST['delete']))
    {
       $i=0;
        foreach($_POST['checkbox'] as $user)
        {
            $sqldelete = "DELETE FROM customer WHERE cus_ID = ".$user."";
           echo $sqldelete."<br />"; //Error checking
         $deleters = $conn->Execute($sqldelete); 
            $i++;
        }

    }

Upvotes: 0

Mark Baker
Mark Baker

Reputation: 212412

if (isset($_POST['delete']))
{
   for($i=0;$i<$recordcount;$i++)                       
   {                        
       $deleteid = isset($_POST['checkbox'][$i]);
       if ($deleteid) {
          $sqldelete = "DELETE FROM customer WHERE cus_ID = ".$_POST['checkbox'][$i];
          echo $sqldelete."<br />"; //Error checking
          $deleters = $conn->Execute($sqldelete);                  
       }
   }
}

And escape your input for safety

Upvotes: 2

Jon
Jon

Reputation: 437404

This line is definitely wrong:

$deleteid = isset($_POST['checkbox'][$i]);

Maybe you meant it like this?

$deleteid = isset($_POST['checkbox'][$i]) 
    ? intval($_POST['checkbox'][$i]) : false;
if ($deleteid === false) {
    continue;
}

// rest of the code follows

Also, you could probably get rid of $recordcount and do a foreach over $_POST['checkbox'].

Upvotes: 3

Related Questions