我的数据库表(相关)包含3列:
它是一个跟踪文章和对象之间关系的表。我已经删除了代码。现在它只包含删除按钮(x)。如果有人按下该按钮,我希望将用户重定向到if(isset($_POST['deleteRelated']))
以获得"您确定" -message等。但隐藏的ID未正确传递。表格中的最后一个related_id
为 29 。当我尝试回显隐藏的ID时,我只为每个删除按钮(x)获得 29 。
下面代码的完整版本为我提供了一个包含文章标题,对象标题和删除按钮(x)的表格。由于提交按钮无法自行传递值,因此我需要一个隐藏值。但是当我通过按下删除按钮(x)来传递它时,我每次都会 29 。
代码
if(isset($_POST['deleteRelated'])) {
echo $_POST['hidden-id']; // Will just display the last 'related_id' value.
else {
echo '
<form method="post">';
$stmt = $db->prepare("SELECT * FROM Related");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $related) {
echo '
<input type="hidden" name="hidden-id" value="' . $related['related_id'] . '">
<input type="submit" name="deleteRelated" value="x">';
}
echo '
</form>';
}
如果我输入:
<input type="submit" name="deleteRelated" value="' . $related['related_id'] . '">
它将显示数据库中的正确值,而不是 x 表示删除/提交按钮。但是当我按下删除/提交按钮时,我只得到 29 的最后一个related_id
。
有人可以解决这个问题吗?应该不那么难?
答案 0 :(得分:4)
整个表格中只有一个<form>
,其中包括(比方说)十几个<input type="hidden" name="hidden-id" value="...">
。
在提交表单时,这些值将全部发送到服务器(您如何知道它只发送按下的特定hidden-id
按钮旁边的submit
? )这就是为什么你只看到最后 hidden-id
- 它们都被发送,所以最后一个会覆盖/获胜。
一个解决方案是每行<form>
而不是整个表格<form>
:
foreach ($result as $related) {
echo '<form method="POST" action="...">';
echo '
<input type="hidden" name="hidden-id" value="' . $related['related_id'] . '">
<input type="submit" name="deleteRelated" value="x">';
echo '</form>';
}
这样,仅按下按钮的hidden-id
值就会被发送。
答案 1 :(得分:2)
或者,你真的不需要每行的表格,你可以在这里使用一个按钮,然后放弃那些隐藏的输入。
示例:
foreach ($result as $related) {
echo '<button type="submit" name="deleteRelated" value="' . $related['related_id'] . '">Delete</button>';
}
所以现在每行按下按钮的每个值都将转到:
$related_id = $_POST['deleteRelated'];
答案 2 :(得分:2)
你必须把它放在foreach中。 在您的代码中,您有一个表单,其中提交了大量按钮。 试试这个:
foreach ($result as $related) {
echo '
<form method="POST" action="...">
<input type="hidden" name="hidden-id" value="' . $related['related_id'] . '">
<input type="submit" name="deleteRelated" value="x">
</form>';}
答案 3 :(得分:2)
如果我理解正确,为什么还需要多个隐藏输入? 你可能想把这个输入放一次:
<input type="hidden" name="hidden-id" value="" />
接下来,将提交按钮更改为以下内容:
echo '<input type="submit" name="deleteRelated" value="x" onclick="setValue('" . $related['related_id'] . "'); />';
并使用js函数:
setValue(val) {
document.getElementsByName("hidden-id")[0].value = val;
}
答案 4 :(得分:1)
简易解决方案:将form
标记放入foreach
循环
$stmt = $db->prepare("SELECT * FROM Related");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $related)
{
echo '<form method="post">';
echo '
<input type="hidden" name="hidden-id" value="' . $related['related_id'] . '">
<input type="submit" name="deleteRelated" value="x">';
echo '</form>';
}