【问题标题】:Foreach mysqli delete loop troubleforeach mysqli删除循环麻烦
【发布时间】:2023-03-13 04:55:01
【问题描述】:

我非常接近解决我的问题,这就是我所在的位置:

           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[]"  value= "'.$row['upload_id'].'"'.' />'.' </td>'. '</tr>';



    }
    echo '</table>'; // Close the table

以及删除功能:

function submit_delete() {
  if(!is_null($_POST['delete']) && !is_null($_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($id_array);

  }
  else {
    echo "Error: submit_delete called without valid checkbox delete.";var_dump($_POST['checkbox']);
  }
}


    function deleteUploads ($id_array) {
      if (count($id_array) <= 0) {   echo "Error: No deletes in id_array!"; var_dump($_POST['checkbox']); 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);

我已经确定id_array 没有为复选框获得正确的$_POST 值。 vardump 显示它具有正确的上传 ID,然后我 vardump id_array 并显示为 NULL。任何帮助将不胜感激。

目前:

        function submit_delete() {
  if(!is_null($_POST['delete']) && !is_null($_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.
    $id_array = $_POST['checkbox'];
    var_dump($id_array);
    deleteUploads($id_array);

  }
  else {
    echo "Error: submit_delete called without valid checkbox delete.";//var_dump($_POST['checkbox']);
  }
}


function deleteUploads ($id_array) {
  if (count($id_array) <= 0) {   echo "Error: No deletes in 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();
  }
}

在 id_array=POST 之后我得到了正确的 vardump,但是在我提交删除之后,视图源表明在我的结尾之后什么都没有被读取(侧边栏和页脚消失)。当前未报告任何错误。

【问题讨论】:

    标签: php checkbox mysqli foreach


    【解决方案1】:

    似乎没有任何地方给 $id_array 赋值。例如你打电话的地方:

    deleteUploads($id_array)
    

    此时没有为 $id_array 分配值。

    $id_array 应该有什么值? $_POST 数组中是否有需要分配给 $id_array 的值?

    另外我认为这里可能有一个放错位置的“&”:

    foreach ($id_array as &$id)
    

    我认为应该是:

    foreach ($id_array as $id)
    

    【讨论】:

    • $id_array 应该有每个 $upload_id 对应于选中的复选框,在它具有这些值之后,它会逐步执行并运行 sql 语句以删除它们。
    • 好的 - 可能有一些代码我看不到 $id_array 的值在哪里设置,但除非 $id_array 已明确声明为全局变量,否则它需要在本地设置submit_delete 函数。
    • 尝试将 print_r($id_array) 添加为 deleteUploads 函数的第一行,这将显示变量到达该函数时是否包含任何值。
    • 我试过了:$id_array = array($_POST['checkbox']); var_dump($id_array); $id_array 似乎根据 var_dump 获得了正确的值,但没有删除。此外,我必须将 'checkbox[]' 更改为 'checkbox' 才能获取值。这样做,它杀死了我在 标签下方的 html 侧边栏和页脚。
    • 尝试将 POST 直接传递给函数 deleteUploads($_POST['checkbox']); 并查看是否传递了值
    猜你喜欢
    • 2014-05-10
    • 2017-05-03
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多