0

这更像是一个技术问题,而不是代码。我有一个包含许多字段(要选择的项目)的 php 表单。自然地,有些项目可能会被选中,而有些则不会。当我将数据从第 1 页发布到第 2 页时,我如何知道选择了哪些?我想测试每个是否为空,但是字段太多,使用或编码感觉一点也不高效。谢谢,

更新编辑:我已经尝试了以下方法,也许它会让我在继续测试回复解决方案之前到达某个地方......

<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] => sdjalskdjlk [pants] => lkjlkjlk [tie] => jlk [socks] => lkjlkjl )

现在我要尝试做的是遍历数组,因为在我的例子中的值是数字,所以我将检查哪些字段> 0,因为默认值为 0。我希望这可行......如果不是那么我会让你知道:)

4

6 回答 6

0

您应该发布您的代码,以便我们更好地了解您想要做什么。

但是据我了解,您正在制作带有复选框的表格。如果要查看复选框是否被选中,可以这样:

if(!$_POST['checkbox1'] && !$_POST['checkbox2'] && !$_POST['checkbox3'])

这看起来是否所有三个复选框都为空。

于 2012-04-13T05:34:57.687 回答
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);        
}
?>

通过这种方式,您可以获得已在数组中设置的所有值。

于 2012-04-13T05:42:24.237 回答
0

只是一个想法:

在表单中创建一个没有值的隐藏输入字段。每当填写/选择任何表单字段时,您name都会在此隐藏字段中添加该字段的属性(字段名称使用逗号分隔符保存)。

在执行 aPOST时,您可以读取此变量,并且只有其中存在的那些字段已被选择/填写在表单中。

希望这可以帮助。

于 2012-04-13T05:43:16.950 回答
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']中,当然,您可以随意调用复选框。

于 2012-04-13T07:00:44.723 回答
0

我不确定你的意图。我假设您有多个表单字段,您想将它们分成不同的网页(例如典型的调查表)。

如果是这种情况,请使用会话来存储表单的不同数据,直到按下“最终提交按钮”(例如在最后一页上)。

于 2012-04-13T07:03:00.650 回答
0

当我将数据从第 1 页发布到第 2 页时,我如何知道选择了哪些?

与如何避免对 PHP 进行大型 POST 是一个不同的问题。

假设这是一个数据表...

无论如何都要更新所有内容(如果您正确设置了主键/唯一键)

使用 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);
     }
 }
于 2012-04-13T09:03:57.917 回答