【问题标题】:Can't pass hidden form value from database to PHP if-statement无法将隐藏的表单值从数据库传递到 PHP if 语句
【发布时间】:2014-12-03 05:20:07
【问题描述】:

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

  • related_id
  • article_id
  • object_id

这是一个跟踪文章和对象之间关系的表格。我已经剥离了代码。现在它只包含删除按钮 (x)。如果有人按下该按钮,我希望将用户重定向到 if(isset($_POST['deleteRelated'])) 以获取“您确定”消息等。但是隐藏的 ID 未正确传递。表中最后一个related_id29。当我尝试回显隐藏的 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>';

}

如果我输入:

&lt;input type="submit" name="deleteRelated" value="' . $related['related_id'] . '"&gt;

它将显示来自数据库的正确值,而不是删除/提交按钮的 x。但是当我按下删除/提交按钮时,我只会得到最后一个 related_id,即 29

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

【问题讨论】:

    标签: php html mysql if-statement pdo


    【解决方案1】:

    说明

    整个表格都有一个&lt;form&gt;,其中包括(比如说)一打&lt;input type="hidden" name="hidden-id" value="..."&gt;s。

    提交表单时,这些值将全部发送到服务器(您如何期望它知道只发送被按下的特定submit 按钮旁边的hidden-id?)这就是为什么你只看到last hidden-id——它们都被发送了,所以最后一个覆盖/获胜。

    解决方案

    一种解决方案是每行有一个&lt;form&gt;,而不是整个表有一个&lt;form&gt;

    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 值。

    【讨论】:

    • 整个页面只有一个隐藏值。但是将
      放在循环中是有效的。非常感谢你的伙伴。 :)
    • @Treps 当然,您在页面上有几个隐藏值 - 循环的每次迭代中都有一个 = 每行中都有一个!
    • 啊哈,聪明。我没有强硬的那个。
    【解决方案2】:

    或者,您真的不需要为每一行提供一个表单,您可以在此处使用一个按钮并放弃那些隐藏的输入。

    例子:

    foreach ($result as $related) {
        echo '<button type="submit" name="deleteRelated" value="' . $related['related_id'] . '">Delete</button>';
    }
    

    所以现在每行上按下的按钮的每个值都将转到:

    $related_id = $_POST['deleteRelated'];
    

    【讨论】:

      【解决方案3】:

      你必须把 放在 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>';}
      

      【讨论】:

        【解决方案4】:

        如果我理解正确,为什么需要多个隐藏输入? 您可能希望输入一次:

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

        【讨论】:

          【解决方案5】:

          简单的解决方案:将 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>';
          }
          

          【讨论】:

            猜你喜欢
            • 2021-05-25
            • 2014-08-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多