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" />
 
<input type="submit" name="delete" class="StickyBtn" value="Delete" />
<br><br>
 
<?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)。
我的 $_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" />
 
<input type="submit" name="delete" class="StickyBtn" value="Delete" />
<br><br>
 
<?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)。