输入隐藏无法正常工作

Posted

技术标签:

【中文标题】输入隐藏无法正常工作【英文标题】:Input hidden doesn't work properly 【发布时间】:2016-08-26 06:58:46 【问题描述】:

我正在开发一个简单的 php 页面,这是我的一小部分代码无法正常工作。

我想使用 DB 并打印一些产品,并且对于每个产品,我想显示一个“购买”按钮。

如果我按下此按钮,则必须使用产品 ID 设置隐藏输入(稍后必须将其发送到另一个页面)。

但是,如果我使用var_dump来控制(如果我的数据是正确的),我可以看到ID是错误的(我看到它总是显示在最后)

  <form id="products_list" method="post" action="step2.php">
  <table>
   <tr>
    <td align="center">Immagine</td>
    <td align="center">Nome prodotto</td>
    <td align="center">Descrizione prodotto</td>
    <td align="center">Prezzo unitario</td>
    <td align="center">Taglie disponibili</td>
    <td align="center">Colori disponibili</td>
    <td align="center">Nickname disponibili</td>
   </tr>

  <?php
   $product = mysqli_query($mysqli, "SELECT * FROM products");
   while ($row = mysqli_fetch_array($product)) 
    $id = $row[id_products];
    print("
    <tr>
     <td align=\"center\">".$row[img_products]."</td> 
     <td align=\"center\">".$row[name_products]."</td>
     <td align=\"center\">".$row[description_products]."</td>
     <td align=\"center\">".$row[price_products]."</td>
     <td align=\"center\">".$row[size_products]."</td>
     <td align=\"center\">".$row[color_products]."</td>
     <td align=\"center\">".$row[nick_products]."</td>
     <input type=\"hidden\" name=\"id_products\" value=\"".$id."\"/>

     <td><input type=\"submit\" name=\"buy\" value=\"Acquista\"/></td>
    </tr>");
   
  ?>
   </table> 
   </form>

【问题讨论】:

你在什么阶段使用var_dump?在这个while 循环中还是在按下按钮之后? 目前你有一个循环,其中 N 隐藏字段都具有相同的名称,即 id_products 这就是为什么你总是得到最后一个,因为这是加载到单个 dom 中的最后一个值元素 【参考方案1】:

您应该在 while 循环中打开和关闭表单。

编辑

更多解释为什么应该在 while 循环中打开和关闭: 如果 while 循环在表单标签内,则意味着隐藏字段在同一个表单中被多次输出。由于它们的名称都相同,因此您只在提交后检索一个值(最后一个隐藏输入的值)。 如果您在 while 循环中打开和关闭表单,则每个隐藏的输入和按钮都处于自己的表单中。这意味着,当提交该表单时,您只会检索该特定隐藏字段的值。 :-)

【讨论】:

这是个好主意,但多一点解释对 OP 会非常有用。他们为什么要这样做? 谢谢,更新了我的答案。希望这对OP更有用。 :-)

以上是关于输入隐藏无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

UIStackView 显示/隐藏动画无法正常工作

Flexbox 和溢出:隐藏无法正常工作

Javascript 隐藏/显示元素无法正常工作

隐藏的输入搞乱了网格

隐藏div时,过渡在vue上无法正常工作

单击蓝图幻灯片和推送菜单的文档时侧边栏菜单隐藏,无法正常工作