PHP $ _POST传递哪个数组项?

时间:2015-02-22 13:42:00

标签: php arrays post

我遇到了$ _POST的问题,我正在编写管理员屏幕并输出用户可以编辑或删除的备注列表。我输出到屏幕的是注释"标题"并注意"内容",然后2个按钮,用于"编辑"和"删除"。我也把笔记" id"但这是隐藏的。 显然,读取和输出的记录数量会有所不同,但是当用户点击"删除"按钮如何传递正确的" id"到"删除"过程

我输出屏幕的代码是:

<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);

以下行使用[&#39; 0&#39;]我知道这是第一条记录 $ 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' );
  }
}

我不明白删除过程实际上是如何知道它必须删除哪条记录还是我的进程错误了?

1 个答案:

答案 0 :(得分:0)

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