自动处理表单数据

时间:2011-05-12 20:18:29

标签: php arrays forms loops post

有没有办法自动化(或至少自动化某些过程)从存储在$_POST$_GET超全球的表单中提取数据?

我知道您可以使用foreach循环和其他类型的循环遍历数组,以便对每个键/值对执行某些操作,但有很多时候我有其他代码需要该数据,但是无法正常工作在一个foreach循环里面。

编辑:这是我能想到的一个例子。假设我有一大堆发布的数据,并希望将其插入数据库。据我所知,做这样的事情是不可能的,因为我需要在每个循环中将值插入到不同的列中:

foreach($array as $key => $value) {
mysql_query(INSERT INTO table (somecolumn) VALUES($value);
}

另外,我真正想做的另一件事是从发布的数据中获取所有值,并以某种方式将它们分配给变量;有点像extract()但没有覆盖其他变量的问题。我能想到的唯一办法是以某种方式将数据放入数组中,但我不确定这是否更有效:

$data = array();
foreach($array as $key => $value) {
$data[$key] = $value;
}

我能想到的最后一种情况是我必须在foreach循环之外使用这些数据。如果我修改我的代码以使所有内容都在foreach循环中执行,那么我只能保留与循环内部的表单数据有关的所有内容。如果变量和/或常量是在循环内部定义的,那么它们不能在它外面访问,对吗?我最近一直在使用Java,并习惯了更严格的范围和严格的处理变量的方法:)

我一直在阅读有关extract()方法的内容,但使用(覆盖变量,安全漏洞等)看起来有点危险。

对于处理大量数据的其他人(比方说25个以上的表单字段),你是如何做到的?我厌倦了一遍又一遍地分配像$data = $_POST['somedata']这样的变量来在其他地方使用它们......

谢谢!

2 个答案:

答案 0 :(得分:2)

  

我知道你可以遍历   带有foreach循环和其他的数组   各种循环来做某事   每个键/值对,但有   很多次,我有其他代码   需要这些数据,但不会   在foreach循环中工作时   所有

你有这种情况的例子吗?

  

我一直在读关于提取物()   方法有点,但看起来有点像   使用危险的东西   (覆盖变量,安全性   洞等)。

是的,不要使用它。这实际上在以前版本的PHP中使用了很多,并且它引起了很多安全问题。

  

对于处理大量的其他人   数据量(比方说25+表格   领域),你是怎么做到的?我累了   分配变量,如$ data =   $ _POST ['somedata']一遍又一遍   在别处使用它们......

我通常将许多表单字段分成类似的功能组(名称,数字,日期等)并以这种方式处理它们。说实话,我的数据库中存在更多未检查数据的问题,然后检查了大量的表单字段。

答案 1 :(得分:0)

让事情变得更好。在您的html表单和数据库中,如果您有一个元素'email',那么请确保与您的表匹配,即没有名为'user_email'的数据库表。

隔离那些你只需要验证的项目,检查它们,将它们添加回$ _POST数组 - 或者相应地失败或中止。

$_POST['web'] = {do your cleansing here, add any missing http:// kinda thing}

删除任何可能已进入$ _POST数组的提交按钮。

unset($_POST['submitMe']);

然后做相当于:

$db->saveNew($_POST);

其中$ db是一个位于PDO上的轻微层,它自动且无误地使用Prepared Statements来转义和保护您的数据库。

您可以让$ db类获取一个ini文件,该文件确定每个表所需的变量类型。