无法将隐藏的表单值从数据库传递给PHP if语句

时间:2014-10-08 13:57:16

标签: php html mysql if-statement pdo

我的数据库表(相关)包含3列:

  • related_id
  • 的article_id
  • 的object_id

它是一个跟踪文章和对象之间关系的表。我已经删除了代码。现在它只包含删除按钮(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

有人可以解决这个问题吗?应该不那么难?

5 个答案:

答案 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>';
}