PHP $_POST传递的是哪个数组项?

PHP $_POST which array item is passed?

我的 $_POST 有问题,我正在编写一个管理屏幕并输出一个注释列表供用户编辑或删除。我输出到屏幕的是音符 "title" 和音符 "content",然后是 "edit" 和 "delete" 的 2 个按钮。我还放了注释 "id" 但这是隐藏的。 显然,读取和输出的记录数会有所不同,但是当用户单击 "delete" 按钮时,如何将正确的 "id" 传递给 "delete" 进程?

我必须输出屏幕的代码是:

<form name="sticky2" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
<?php 
      $i = 0;
      foreach($stickynotes as $notes)
      {
        echo $i . " - " . $notes['id'];  \this line is just testing
?>
        <li>
          <input type="hidden" name="id[]" value="<?php echo $notes['id'] ?>">

          <h2><?php echo $notes['title'] ?></h2>
          <p><?php echo $notes['content'] ?></p>
          <br>
        </li>
        <input type="submit" name="edit" class="StickyBtn StickyBlue" value="Edit" />
        &nbsp;&nbsp
        <input type="submit" name="delete" class="StickyBtn" value="Delete" />
        <br><br>
        &nbsp
<?php
        $i++;
      } 
?>
      </form>

删除过程如下:

if (isset($_POST['delete']))
{
  if($_POST['delete']=='Delete')
  {
    echo $_POST['id'];  // Line only used for testing
    $query="DELETE FROM notes WHERE id = :id";
    $stmt = $dbh->prepare($query);

下一行使用 ['0'],我知道这是第一个记录 $notes 数组,但我只是确保所有删除代码都有效,这 是导致我出现问题的细节

    $stmt->bindParam(':id', $_POST['id']['0'], PDO::PARAM_INT);
    try
    {
//     $stmt->execute();    // actual delete commented out while testing
    }

    catch(PDOException $ex)
    {
      $msg = "STICKY NOTE NOT Found";
      //user friendly message and error handling here
    }
    header('Location: stickynotes.php' );
  }
}

我不明白删除过程如何真正知道它必须删除哪条记录,或者我的过程有误吗?

我认为您会遇到的问题是您的表单包含所有 ID,而这些提交按钮中的任何一个都会影响所有 ID。最简单的方法可能是将 <form> 标记移动到循环内部,这样每个项目都有不同的形式。然后你有独立的删除按钮和单独的 ID 字段(这样就不必是一个数组,因为每个表单也只附加一个 ID)。