1

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

<?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();
    }
  }
?>

第一个注意事项:基本上注册用户会受到他们的个人资料页面的欢迎,该页面向他们显示他们的上传内容和一些上传信息。我想在每个上传旁边有一个复选框,在页面上的任何其他地方都有一个删除按钮。所以我尝试了这个。

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

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

编辑:这是复选框的视图源的当前输出,使用 dcoder 的推荐和 vardump 测试。输入类型="checkbox" name="checkbox[]" id="checkbox[]" value="" />

vardump 测试输出: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 called...”...我收到同样的错误。摆脱 $_POST['checkbox[]'] 并获得 NULL 值。

4

3 回答 3

1

问题在这里:

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

将其更改为以下内容:

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

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


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

于 2012-05-13T05:23:36.247 回答
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
于 2012-05-13T02:24:08.280 回答
0

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

于 2012-08-01T01:14:27.653 回答