【问题标题】:Create unique Form input ID's and input name's in while loop在 while 循环中创建唯一的表单输入 ID 和输入名称
【发布时间】:2013-01-31 04:20:04
【问题描述】:

我有一个表正在构建并由 while 循环填充。 while 循环正在从 mysql 数据库中获取并显示结果。

根据下面的代码,每行都有一个复选框,值等于唯一标识符loadnumber

下一列是一个输入框,名称和 ID 为 correctedweight。再次, this 的值是由 MySQL 数据值预定义的。下一列是一个名为correctedtrailer 的选择框,再次选择的值等于数据库结果。

我的 sql 查询结果中有很多行,所以我的表有几行深。我想要做的是允许用户选中复选框checkbox[],更改同一行上correctedweightcorrectedtrailer 的值,然后提交表单。问题是,如果我有几行,我所有的 correctedweightcorrectedtrailer 的名称都是一样的,所以我无法区分它们。

<? while($row = $loads->fetch(PDO::FETCH_ASSOC)) { ?>
<tr>        
    <td><input type="checkbox" name="checkbox[]" id="checkbox[]" value="<? echo $row['loadnumber']; ?>"></td>
    <td><input type="text" name="correctedweight" id="correctedweight" value="<? echo $row['weight']; ?>" class="inputsmall"></td>
    <td><SELECT name="correctedtrailer" id="correctedtrailer"  class="selectnarrow"> 
    <OPTION value="<? echo $row['trailer']; ?>" selected ><? echo $row['trailer']; ?></option>
    <option>
    <?=$optionstrailer?> 
    </option>
    </SELECT> 
    </td>
</tr>

要解决这个问题,我可以将负载编号附加到每个输入字段的名称和 ID 吗?

&lt;input type="text" name="correctedweight&lt;? echo $row['loadnumber']; ?&gt;" id="correctedweight&lt;? echo $row['loadnumber']; ?&gt;" value="&lt;? echo $row['weight']; ?&gt;" class="inputsmall"&gt;

这将为我的表单的每个输入提供一个唯一的名称。下一个问题是如何为所选行调用此名称? checkbox[] 数组将包含负载编号,所以在我的 foreach($_POST['checkbox'] as $checkbox){ 语句中,我如何获得 correctedweight&lt;? echo $row['loadnumber']; ?&gt; 的值?是 $_POST['correctedweight.$checkbox'] 还是它是如何工作的?

另外,这是最好的方法吗?

一如既往地感谢您的帮助。谢谢

预填充 MySQL 数据的表单、输入和选择字段的图像。希望能够一次检查和编辑多个表行,但需要一个唯一标识符作为使用while 循环构建的表。再次感谢。

【问题讨论】:

  • 试试$correctedweight{$checkbox}
  • 感谢 DoSparKot,这是最佳实践和最佳方法吗?
  • 通过$_POST["correctedweight.$checkbox"]$_POST['correctedweight'.$checkbox] 访问索引而不是$_POST['correctedweight.$checkbox'] .. 因为单引号字符串中的变量不会被解析。

标签: php forms input foreach while-loop


【解决方案1】:

据我所知,您正在循环访问数据库条目。我建议在所有字段中使用您的装载编号作为标识符,然后在帖子中循环遍历它,您可以像上面那样附加它。

类似这样的:

<td><input type="checkbox" name="checkbox[<? echo $row['loadnumber']; ?>]" id="checkbox[<? echo $row['loadnumber']; ?>]" value="<? echo $row['loadnumber']; ?>"></td>
<td><input type="text" name="correctedweight_<? echo $row['loadnumber']; ?>" id="correctedweight_<? echo $row['loadnumber']; ?>" value="<? echo $row['weight']; ?>" class="inputsmall"></td>
<td><SELECT name="correctedtrailer_<? echo $row['loadnumber']; ?>" id="correctedtrailer_<? echo $row['loadnumber']; ?>"  class="selectnarrow"> 
    <option value="<? echo $row['trailer']; ?>" selected ><? echo $row['trailer']; ?></option>
    <option><?=$optionstrailer?></option>
</SELECT> 

获取帖子中每个复选框的信息:

foreach($_POST['checkbox'] as $checkbox){
    $correctedweight = $_POST['correctedweight_$checkbox'];
    $correctedtrailer = $_POST['correctedtrailer_$checkbox'];
}

请记住,如果我没记错的话,您只会得到被选中的复选框:)

希望这会有所帮助,祝你好运!

【讨论】:

  • 谢谢 Werner,复选框名称是否不需要保留 checkbox[] 否则每个选中的复选框将属于一个单独的数组?
  • 你可以这样做,但是这样你的数组的键将是负载编号而不是默认的 0,1,2,3.. 如果你也需要键,这会有所帮助:)
  • 哦,太棒了。谢谢韦塞尔。
猜你喜欢
  • 2016-09-26
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 2021-07-24
  • 2016-04-26
  • 1970-01-01
相关资源
最近更新 更多