多个复选框删除 MySQLI


multiple checkbox delete mysqli

我正在尝试获得多个删除功能,这就是我到目前为止所拥有的:

<?php
  echo '<h3>Welcome to your profile, '. $_SESSION['first_name'] . '</h3>';
  require_once ('../mysqli_connect.php'); //Connect to the db
  // Make the query
  $q = "SELECT upload_id, title, genre, length, created, views
        FROM upload
        WHERE owner_id =". $_SESSION['user_id'] ."
        ORDER BY title ASC";

  $r = mysqli_query ($dbc, $q); // Run the query
  if($r) {
    ?>
    <table align="center" cellspacing="3" cellpadding="3" width="75%">
      <tr>
        <td align="left"><b>Title</b></td>
        <td align="left"><b>Genre</b></td>
        <td align="left"><b>Pages</b></td>
        <td align="left"><b>Submitted</b></td>
        <td align="left"><b>Views</b></td>';
          <form action="/nbproject/newwriter_profile.php" method="post">
          <?php
            while ($row = mysqli_fetch_array($r,MYSQLI_ASSOC)) {
              echo '<tr><td align="left">' 
                . $row['title'] . '</td><td align="left">'
                . $row['genre'] . '</td><td align="left">'
                . $row['length'] . '</td><td align="left">'
                . $row['created'] . '</td><td align="left">'
                . $row['views'] . '</td><td align="left">'
                . '<input type="checkbox" name="checkbox[]"'
                . 'id="checkbox[]"  value='.$row['$upload_id'] //this upload id is auto-increment (see first note)
                .' />'.' </td>'. '</tr>';
            }
          ?>
    </table>
    <input type="submit" name="delete" value="Delete" align="right"/>
  </form>
  <?php
    mysqli_free_result ($r); // Free up the resources
  } else { // If it did not run okay
    // Public Message:
    echo '<p class="error">Your submissions could not be retrieved.  We apologize for any inconvenience.</p>';
    // Debugging message:
    echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
  } // End of if ($r) IF.
  mysqli_close($dbc); // Close the database connection
  if($_POST['delete']) {
    require_once ('../mysqli_connect.php'); //Connect to the db
    $checkbox = $_POST['checkbox']; //from name="checkbox[]"
    $countCheck = count($_POST['checkbox']);
    for($i=0;$i<$countCheck;$i++) {
      $del_id  = $checkbox[$i];
      //----------------------------------
      $sql = "DELETE from `upload` where `upload_id` = $del_id AND `owner_id` = {$_SESSION['user_id']}";
      $result = $mysqli->query($sql) or die(mysqli_error($mysqli)); //added session information after hearing about google spider armageddon scenarios
    }
    if($result) {
      header('Location: newwriter_profile.php');
    } else {
      echo "Error: ".mysqli_error();
    }
  }
?>

第一注意:基本上,注册用户会看到他们的个人资料页面,该页面向他们显示他们的上传和一些上传信息。 我想要每次上传旁边都有一个复选框,并在页面上的其他任何位置添加一个删除按钮。 所以我试了这个。

现在它将重定向,没有错误,也不会删除任何内容。 此外,在未选中复选框的情况下点击删除将返回错误。 提前感谢您的帮助,解决此问题也将解决我遇到的另一个问题,并且将是一个巨大的解脱。

我想不出将上传ID链接到复选框的方法。 我的脑子疼。

编辑:这是复选框的视图源的当前输出,使用dcoder的建议和vardump测试。 输入类型="复选框" 名称="复选框[]" id="复选框[]" 值= "/>

vardump test 输出: array(3( { [0]=> string(0( " [1]=> string(0( "

[2]=> string(0( " }

编辑:删除功能目前如下:

    function submit_delete() {
    if($_POST['delete'] && $_POST['checkbox[]']) { //Check to see if a delete command         has been submitted.
//This will dump your checkbox array to your screen if the submit works.
//You can manually check to see if you're getting the correct array with values
//var_dump($_POST['checkbox']);//Comment this out once it's working.
deleteUploads($_POST['checkbox[]']);
    }
   }

   function deleteUploads ($id_array) {
   if (count($id_array) <= 0) { return; }//bail if its empty
   $delete_success = false;
   foreach ($id_array as &$id) {
   $sql = "DELETE from `upload` where `upload_id`=$id AND `owner_id`=   {$_SESSION['user_id']}";
   $result = $mysqli->query($sql) or die(mysqli_error($mysqli));
   if ($result) { $delete_success = true; }
   }
    if($delete_success) {
   header('Location: newwriter_profile.php');
  } else {
  echo "Error: ".mysqli_error();
  }
  }

//Test deleteUploads (remove once you know the function is working)
//$test_ids = array();
//$test_ids[] = 5;//make sure this id is in the db
//$test_ids[] = 7;//this one too
submit_delete();
deleteUploads($id_array);//should remove ids 10 and 9//
mysqli_close($dbc);

编辑:目前如下:

        while ($row = mysqli_fetch_array($r,MYSQLI_ASSOC))
    {
        echo '<tr><td align="left">' .
        $row['title'] . '</td><td align="left">'
        . $row['genre'] . '</td><td align="left">'
        . $row['length'] . '</td><td align="left">'
        . $row['created'] . '</td><td align="left">'
        . $row['views'] . '</td><td align="left">' //. var_dump($row) //dump row value              for testing
        . '<input type="checkbox" name="checkbox[]"'. 'id="checkbox[]"  value=               "'.$row['upload_id'].'"'.' />'.' </td>'. '</tr>';

注释掉 vardump,显示每个复选框都获得了正确的upload_id...

    function submit_delete() {
   if(!is_null($_POST['delete']) && !is_null($_POST['checkbox[]'])) { //Check to see if              delete command has been submitted.
//This will dump your checkbox array to your screen if the submit works.
//You can manually check to see if you're getting the correct array with values
//var_dump($_POST['checkbox']);//Comment this out once it's working.
deleteUploads($_POST['checkbox[]']);
   }
   else {
   echo "Error: submit_delete called without valid checkbox delete.";
    }
   }

   function deleteUploads ($id_array) {
    if (count($id_array) <= 0) {   echo "Error: No deletes in id_array!";    var_dump($id_array); return; }//bail if its empty
   $delete_success = false;
   foreach ($id_array as &$id) {
   $sql = "DELETE FROM `upload` WHERE `upload_id`=$id AND `owner_id`=   {$_SESSION['user_id']}";
    $result = $mysqli->query($sql) or die(mysqli_error($mysqli));
   if ($result) { $delete_success = true; }
  }
  if($delete_success) {
 header('Location: newwriter_profile.php');
  } else {
  echo "Error: ".mysqli_error();
 }
}

//Test deleteUploads (remove once you know the function is working)
//$test_ids = array();
//$test_ids[] = 5;//make sure this id is in the db
//$test_ids[] = 7;//this one too
submit_delete();
//deleteUploads($id_array);//should remove ids 10 and 9//
mysqli_close($dbc);

在页面加载时,我收到错误"submit_delete调用..."在我勾选一些框并点击删除后...我得到同样的错误。在 $_POST['checkbox[]'] 上纾困并获得 NULL 值。

问题就在这里:

'<input type="checkbox" name="checkbox[]"'
. 'id="checkbox[]"  value='.$row['$upload_id']
.' />'

将其更改为以下内容:

'<input type="checkbox" name="checkbox[]"'
. 'id="checkbox[]"  value="'.$row['upload_id'] . '"'
.' />'

您在值周围缺少引号("(,并且输出了错误的索引。


此外,请使用绑定变量将动态元素嵌入到 SQL 查询中,并在将动态输入输出到页面之前对其进行转义。

我已经将您的功能分解为可以调用的函数。前一个函数将帮助您测试是否获得了正确的值。您可以使用数据库中已知的值手动填充数组,以检查后一个函数。

function submit_delete() {
  if($_POST['delete'] && $_POST['checkbox']) { //Check to see if a delete command has been submitted.
    //This will dump your checkbox array to your screen if the submit works. 
    //You can manually check to see if you're getting the correct array with values
    var_dump($_POST['checkbox']);//Comment this out once it's working. 
    deleteUploads($_POST['checkbox']);
  } else { 
    echo "Error: submit_delete called without valid checkbox delete.";
  }
}
function deleteUploads ($id_array) {
  if (count($id_array) <= 0) { //bail if its empty
    echo "Error: No deletes in id_array!";
    return; 
  }
  $delete_success = false;
  foreach ($id_array as &$id) {
    $sql = "DELETE from `upload` where `upload_id`=$id AND `owner_id`={$_SESSION['user_id']}";
    $result = $mysqli->query($sql) or die(mysqli_error($mysqli));
    if ($result) { $delete_success = true; }
  }
  if($delete_success) {
    header('Location: newwriter_profile.php');
  } else {
    echo "Error: ".mysqli_error();
  }
}

//Test deleteUploads (remove once you know the function is working)
$test_ids = array();
$test_ids[] = 10;//make sure this id is in the db
$test_ids[] = 9;//this one too
deleteUploads($test_ids);//should remove ids 10 and 9

我解决了这个问题。 在用尽所有其他选项后,我在 MySQL 中运行了一个授予 * 权限语句。显然,我在创建上传表之前已经创建了数据库用户。 谢谢大家的帮助