【发布时间】:2009-07-04 12:48:21
【问题描述】:
我有一个 PHP 网页,它在一个表格中显示所有记录。我想为所有行添加复选框,用户可以选中一个复选框来选择一行,然后提交页面。提交页面时我想枚举所有复选框并检查它们是否被选中,我该怎么做?
【问题讨论】:
标签: php
我有一个 PHP 网页,它在一个表格中显示所有记录。我想为所有行添加复选框,用户可以选中一个复选框来选择一行,然后提交页面。提交页面时我想枚举所有复选框并检查它们是否被选中,我该怎么做?
【问题讨论】:
标签: php
您将像这样创建您的复选框:
<input name="rows[]" value="uniqueIdForThisRow" type="checkbox" />
<input name="rows[]" value="anotherId" type="checkbox" />
然后你可以像这样循环遍历它们:
<?php
// $_POST['rows'] contains the values of all checked checkboxes, like:
// array('uniqueIdForThisRow', 'anotherId', ...)
foreach ($_POST['rows'] as $row) {
if ($row == 'uniqueIdForThisRow') {
// do something
}
}
?>
PHP docs on dealing with forms,请参见示例 #3。
【讨论】:
创建表单
您可以按如下方式生成 HTML:
<form [action, method etc]>
<table>
<?php
foreach($dataSet as $dataRow) :
?>
<tr>
<td>
<input type="checkbox" name="dataRow[]" value="<?=$dataRow['id']?>"/>
</td>
[Additional details about datarow here]
<tr>
<?php
endforeach;
?>
</table>
</form>
发布后
查看 $_POST['dataRow'] :这将是一个数组,其值是 $dataRow 的 IDS,因此在 $_POST['dataRow'] 上使用 array_values 将为您提供所选行的所有 id:
<?php
$checkedRows = array_values($_POST['dataRow']);
foreach($checkedRows as $row) {
// Do whatever you want to do with the selected row
}
【讨论】:
如果已选中所有复选框,则不必选中它们。因为只有successful controls 被发送到服务器。并且一个复选框只有在被选中时才成功:
复选框(和单选按钮)是可由用户切换的开/关开关。当设置了控制元素的选中属性时,开关处于“打开”状态。提交表单时,只有“on”复选框控件才能成功。
所以你只需要看看你在请求中得到了哪些复选框。如果您想使用<select multiple>,请查看PHP FAQ 中的How do I get all the results from a select multiple HTML tag?。
【讨论】:
如果我是你...我不会与改变 html 表结构作斗争。 你可以使用像 JQuery 这样的 JavaScript 框架来处理这个问题,这对你来说是非常有效的解决方案。你只处理几行 JS 代码,你不需要夸大 html 输出(我想它可能已经足够长了)。关于 jquery,如果您从未使用过它,那么有一个名为 visual jquery 的好资源。
这里是如何做到这一点的方法。 您不需要在循环内进行编辑。您只需在表格标签中添加一个 id。 然后将新列添加到您的表格中,并在其中添加复选框。 然后您可以获取复选框的值并将它们序列化到隐藏的输入中。或者您可以使用 ajax 轻松处理选定的行。我认为 JS 框架会更好。
通常我已经添加了许多发布链接,但它说它不允许新用户使用。
【讨论】: