2012-04-13 106 views
0

这是更多的技术问题,而不是代码。我有一个很多领域的PHP表单(项目选择)。当然,有些项目可能会被选中,有些则不会。我如何知道当我将数据从第1页发布到第2页时选择哪些数据?我认为如果测试每个测试是否为空,但是测试的领域太多,并且使用或编写代码的效率并不高。 谢谢,避免长时间POST的PHP

UPDATE编辑: 我试过以下,也许它会得到我的地方,我之前进行的测试解决方案repliers ...

<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); 

?> 

这给出了以下工作:

名称是:阵列([市RT => sdjalskdjlk [裤子] => lkjlkjlk [领带] => JLK [袜子] => lkjlkjl)

现在我要尝试做的是迭代这个数组,并因为这些值在我的情况下是数字,我只会检查哪些字段是> 0,因为默认值为0.我希望这可以工作...如果不是那么我会让你知道:)

+0

你的意思是避免许多'isset($ _ POST [ '等']))'? – Michelle 2012-04-13 05:28:02

+0

通过阵列循环。如果您使用数组构建表单,则可以更轻松地检查发布内容。 – 2012-04-13 05:29:27

+0

是@JackSpairow我想避免每个发布的项目。如果我使用数组,那么我将不得不读取它中的每个项目并做一个比较字符串,以便我可以决定那里的项目并将它们的价格称为froom数据库。由于strcmp再次显得效率不高。 – 2012-04-13 05:31:49

回答

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'],当然你可以调用复选框。

+0

嗯我没有得到一件事......所以这个数组被提交....我检查它的值。但是表单中的所有字段都在我想的数组中......这并不能解决问题。或者只有包含输入的字段将被包括... – 2012-04-13 12:16:07

+0

不确定你的意思,但如果这不是你想要的输出,你可能要考虑: 'foreach($ _ POST ['checkboxes'] as $ key => $ value){ echo“{$ key}被设置为{$ value}”; }' – Daan 2012-04-14 10:22:36

+1

几乎没有变化,这实际上对我有用。我曾经从html表单发布数组,然后开始在foreach循环中播放内容,以确保获得密钥和值。感谢一群伙伴:) – 2012-04-15 07:14:29

0

你应该发布你的代码我们会更好地理解你想要做什么。

但是从我理解你正在制作一个带有复选框的表单。如果您想查看是否选中了复选框,则可以这样做:

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

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

+0

这正是我试图避免的......有100个领域,它成为一个问题 – 2012-04-13 06:05:17

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);   
} 
?> 

通过这种方式,你可以得到已在数组中设置..

+0

嗯,你可以详细阐述一下吗?看起来有趣... 谢谢btw – 2012-04-13 06:05:52

+1

其实我认为可能有一些错误..我首先看到 – Codeeater 2012-04-13 06:27:03

+0

我编辑了我的帖子...检查了这个.. – Codeeater 2012-04-13 06:40:20

0

只是一个想法的所有值:

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

在做POST时,您可以阅读这个变量,并且只有其中的字段已被选中/填入表单中。

希望这会有所帮助。

+0

有什么说明在这里?再次,这似乎是非常好的技术...但暗示它如何完成也会有所帮助.. – 2012-04-13 06:06:33

+1

给我一些时间,将进行演示并回复给您。 – 2012-04-13 06:11:14

+1

它依赖于Javascript - 某些用户可能已禁用。 – 2012-04-13 06:43:14

0

我不完全知道你的意图。我假设你有多个表单域,你想分成不同的网页(例如一个典型的调查表单)。

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

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); 
    } 
} 
+0

我认为这是一个非常复杂的做伴侣的方式...我甚至不明白我的解决方案:( – 2012-04-13 12:18:00