多个复选框删除mysqli

时间:2012-05-13 01:10:43

标签: php checkbox 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链接到复选框。我的大脑疼。

编辑:这是复选框的viewsource的当前输出,使用dcoder的推荐和vardump测试。 input type =“checkbox”name =“checkbox []”id =“checkbox []”value =“”/&gt;

vardump测试输出:array(3){[0] =&gt; string(0)“”[1] =&gt; string(0)“”[2] =&gt; 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 called ...” 在我勾选一些方框并点击删除后......我得到了同样的错误。拯救$ _POST ['checkbox []']并获得NULL值。

3 个答案:

答案 0 :(得分:1)

问题在于:

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

将此更改为以下内容:

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

您在值周围缺少引号("),而您输出的索引错误。


另外,请先将bind variables用于将动态元素嵌入到SQL查询中,然后使用escape dynamic input将其输出到页面中。

答案 1 :(得分: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']);
  } 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

答案 2 :(得分:0)

我解决了这个问题。在用完所有其他选项后,我在MySQL中运行了grant *权限声明。显然我在创建Uploads表之前创建了数据库用户。谢谢大家的帮助