PHP避免长POST

时间:2012-04-13 05:23:11

标签: php html post

这更像是一个技术问题,而不是代码。我有一个包含许多字段的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.我希望这有效......如果没有,那么我会告诉你:)

6 个答案:

答案 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);
     }
 }