【问题标题】:Getting a specific array value from input form PHP从输入表单 PHP 中获取特定的数组值
【发布时间】:2014-10-18 16:38:37
【问题描述】:

好的,所以我有一个从 mysql 表中提取的 PHP 数组。该数组是根据表中的项目生成的,该表中的项目是频繁添加和删除的。我在项目名称旁边有一个按钮,“提交”。我希望按钮能够识别同一索引中的项目。然后它将提交的项目传递到新表。

<form class="omb_loginForm" action="inc/contribute_item.php" autocomplete="off" method="POST">
<?php
     $item_array;
     $index = 0;
     $index_2 = 1;
     $r = "r";
     $b="b";
     foreach ($item_array as $id_array){ ?>
        <tr id="<?php echo $r.$index_2; ?>">
        <td><?php echo $item_array[$index] ?></td>
        <td> <?php echo $quantity_array[$index]; ?></td>                   
        <td> <?php echo $price_array[$index]; 
             $selectedItem = $item_array[$index]; ?>
        <input type='hidden' name='hidden' value='<?php $selectedItem ?>'>
        <input type='submit' name='submit' value"submit">
     </form> </td>
  <?php $index++;
        $index_2++; ?>
       </tr>

这里是 PHP:

if ($_POST['submit']) {
    $connect = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    $user_contrib = $_SESSION['first_name'];
    $selected = $selectedItem;
    $connect->query("UPDATE `items` SET `purchased_by` = '$user_contrib' WHERE `name` = '$selected'");

}

【问题讨论】:

  • 使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs

标签: php mysql arrays mysqli


【解决方案1】:

您在正确的轨道上,只需确保您的开始和结束 html 标记正确对齐。

每行使用一个表单

如果您想通过隐藏输入传输选定的值,请确保这些输入中的每一个都在其自己的表单中以及相应的提交按钮:

<!-- row 1: -->
<form action="inc/contribute_item.php" method="post">
  <input type="hidden" name="myValue" value="1"/>
  <input type="submit" value="submit"/>
</form>

<!-- row 2: -->
<form action="inc/contribute_item.php">
  <input type="hidden" name="myValue" value="2"/>
  <input type="submit" value="submit"/>
</form>

然后在 PHP 中使用$_POST['myValue'] 访问选定的值。

不要嵌套表单标签。并且不要在表格、tr、td 标签之间放置表单标签。按照打开它们的相同顺序关闭它们。

更具体地说,您的循环如下所示:

<!-- don't start your form here -->
<table>
  <?php foreach(...) { ?>
  <tr>
    <td>...</td>
    <td>
      <form action="inc/contribute_item.php" method="post">
        <input type="hidden" name="myValue" value="<?= $index ?>"/>
        <input type="submit" value="submit"/>
      </form>
    </td>
  </tr>
  <?php } ?>
</table>

使用单选按钮或复选框

另一种选择是在每一行中使用&lt;input type="radio" ... /&gt; 元素。这样您就可以只使用 一个 全局形式:

<form action="inc/contribute_item.php" method="post">

<table>
  <?php foreach(...) { ?>
  <tr>
    <td>...</td>
    <td>
      <input type="radio" name="myValue" value="<?= $index ?>"/>
    </td>
  </tr>
  <?php } ?>
</table>

<input type="submit" value="submit"/>
</form>

【讨论】:

  • 所以我把
    放在 foreach "($item_array as $id_array)" 循环里面?
  • 知道了!我没有正确设置 value=...。这对我来说是非常非常糟糕的造型。它奏效了,但这不是一个好方法。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 2017-02-21
相关资源
最近更新 更多