这更像是一个技术问题,而不是代码。我有一个包含许多字段的php表单(要选择的项目)。当然,有些项目可能会被选中而有些项目则没有。当我从第1页到第2页发布数据时,如何知道选择了哪些?我想过测试每一个是否为空,但是有太多的字段,并且使用或编码效率都不高。 谢谢,
更新编辑: 我尝试了以下内容,也许在我继续测试replier解决方案之前它会让我到处...
<html>
<body>
<form name="test" id="name" action="testprocess.php" method="POST">
<input type="text" name="choices[shirt]">
<input type="text" name="choices[pants]">
<input type="text" name="choices[tie]">
<input type="text" name="choices[socks]">
<input type="submit" value="submit data" />
</form>
</body>
</html>
然后是第二页:
<?php
$names = $_POST['choices'];
echo "Names are: <br>";
print_r($names);
?>
这给出了以下内容:
名称是:数组([shirt] =&gt; sdjalskdjlk [裤子] =&gt; lkjlkjlk [领带] =&GT; jlk [socks] =&gt; lkjlkjl)
现在我要尝试做的是迭代数组,因为我的情况下的值是数字,我只会检查哪些字段是&gt; 0给定默认值为0.我希望这有效......如果没有,那么我会告诉你:)
答案 0 :(得分:0)
您应该发布您的代码,以便我们更好地了解您的目标。
但据我所知,你正在制作带复选框的表格。如果您想查看是否选中了复选框,您可以这样:
if(!$_POST['checkbox1'] && !$_POST['checkbox2'] && !$_POST['checkbox3'])
这会查看所有三个复选框是否为空。
答案 1 :(得分:0)
试试这个......
<?php
function checkvalue($val) {
if($val != "") return true;
else return false;
}
if(isset($_POST['submit'])) {
$values = array_filter(($_POST), "checkvalue");
$set_values = array_keys($values);
}
?>
通过这种方式,您可以获得在数组中设置的所有值。
答案 2 :(得分:0)
只是一个想法:
在表单中创建一个没有值的隐藏输入字段。只要填写/选择了任何表单字段,就可以在此隐藏字段中添加该字段的name
属性(字段名称使用逗号分隔符保存)。
在执行POST
时,您可以阅读此变量,并且只在表单中选择/填充了此变量中的那些字段。
希望这有帮助。
答案 3 :(得分:0)
我认为你在寻找的是:
<form action="submit.php" method="POST">
<input type="checkbox" name="checkboxes[]" value="this" /> This
<input type="checkbox" name="checkboxes[]" value="might" /> might
<input type="checkbox" name="checkboxes[]" value="work" /> work
<input type="submit" />
</form>
然后在submit.php
中,您只需写下:
<?php
foreach($_POST['checkboxes'] as $value) {
echo "{$value} was checked!";
}
?>
复选框元素名称中的方括号告诉PHP将具有此名称的所有元素放入同一个数组中,在本例中为$_POST['checkboxes']
,当然,您可以随意调用复选框。
答案 4 :(得分:0)
我不太清楚你的意图。我假设您有多个表单字段,您希望将其分成不同的网页(例如,典型的调查表单)。
如果是这种情况,请使用会话来存储表单的不同数据,直到按下“最终提交按钮”(例如,在最后一页)。
答案 5 :(得分:0)
当我从第1页到第2页发布数据时,如何知道选择了哪些?
是一个不同的问题,如何避免大型POST到PHP。
假设这是一个数据表......
只需更新所有内容(如果您已正确设置主键/唯一键)
使用Ajax更新前端更改的各行
当修改该行中的数据时,使用Javascript在每一行中设置一个标志
或者在提交时将每行的现有数据的表示存储为行的隐藏字段,例如
print "<form....><table>\n";
foreach ($row as $id=>$r) {
print "<tr><td><input type='hidden' name='prev[$id]' value='"
. md5(serialize($r)) . "'>...
}
......在接收端...
foreach ($_POST['prev'] as $id=>$prev) {
$sent_back=array( /* the field values in the row */ );
if (md5(serialize($sent_back)) != $prev) {
// data has changed
update_record($id, $sent_back);
}
}