2010-11-11 32 views
0

我一直在努力编写一个函数,该函数将获取任何给定表单提交的POST值,将它们弹出到数组中,使用trim循环数组,将addslashes etcetera传递回它可以返回的变量然后传递给数据库。在一个循环内使POST值动态存储为一个数组?

现在,我有atm的障碍是获取所有的输入,textarea,选择元素数据到表单提交后的数组。代码中,我有如下

$fields = array($_POST['1'], $_POST['2']); 

    $i = 0; 
    foreach ($fields as $field) { 
     $i++; 
     ${'field'.$i } = trim(addslashes(strip_tags($field))); 
     echo "POST field info #". $i ."&nbsp;-&nbsp;". ${'field'.$i }."<br />"; 
    } 

正如你所看到的一切都很好,这里裸露的POST值名称仍然在推吞下静态,我需要的是一种方式来获得送入一个循环,POST数据,动态使用增量变量调用POST名称,然后将所有数据弹出到相同的数组中。我试过的代码如下。

​​

现在我知道这不会工作,但我能感觉到我比较接近,所以我想知道如果任何聪明的人能帮助我的最后一部分理清?我可悲的是现在要睡觉,不会看到这个职位至少9个小时,道歉。

在此先感谢。

丹。

回答

0

你需要为$ _POST [1]和$ _POST [2]赋值,我已经为你做了这个,但通常他们会从我假设的表单填充?我不确定你为什么想要做这样的事情:$ {'field'。$ key},但我已经按原样离开了那部分,因为我假设你必须有一个原因。

无论如何,我修改了一下你的代码,看下面。

$_POST['1'] = '<h1>variable 1</h1>'; 
$_POST['2'] = '<h2>variable 2</h2>'; 

foreach($_POST as $key => $value){ 
    ${'field'.$key} = trim(addslashes(strip_tags($value))); 
    echo "POST field info #". $key ." = ". ${'field'.$key}."<br />"; 
} 

上面的代码输出:
POST字段信息#1 =变量1
POST字段信息#2 =可变2

在一个侧面说明,使用字段的名称,如 '1' 和'2'不是很好。尝试使用更具描述性的内容,但正如我上面所说,我假设你有这样做的理由。


UPDATE: 你仍然可以得到这个任何形式的工作,即使你使用的具体名称的表单元素。我已经在下面添加了几行作为示例。

$_POST['email'] = '[email protected]'; 
$_POST['password'] = 'hgbks78db'; 
$_POST['name'] = ''; 

foreach($_POST as $key => $value){ 
    if($value==''){ 
     echo 'POST field "'.$key . '" is empty<br />'; 
     /* I added the name of the field that is empty to an error array 
     so you have a way of storing all blank fields */ 
     $a_error[] = $key; 
    } 
    else{ 
     echo 'POST field "'.$key . '" is not empty<br />'; 
    } 
} 
+0

谢谢德鲁的回复,下班后我将在今晚出去。正确的表单元素是按照惯例命名的,现在我选择通用元素名称的原因是,表单验证功能可以在任何情况下为网站上的任何表单工作。我有一个计划网站,将有15个表格的人口,并通过特定元素名称验证它们,即“电子邮件”或“密码”将需要大量代码行。我的任务是优化:) – zealisreal 2010-11-11 12:44:06

+0

嗨德鲁,你的代码工作正常,你发布的内容,我唯一担心的是,使用$ _POST通常意味着提交元素值也发布为$ _POST循环的一部分,你知道吗我如何能够绕过$ _POST数组索引值? – zealisreal 2010-11-12 00:18:49

+0

忽略这一点,我找到了答案,我只是在循环之前取消设置$ _POST ['form']。 – zealisreal 2010-11-12 00:24:33

2
$arrayOfPostValues = $_POST; // it already is an array 
$arrayOfPostValues = array_map('strip_tags', $arrayOfPostValues); 
$arrayOfPostValues = array_map('trim', $arrayOfPostValues); 

或者,如果你真的想用一个循环:

foreach ($arrayOfPostValues as &$value) { 
    $value = trim(striptags($value)); 
} 

我绝对建议不要使用addslashes,它提供非常少的目的。改为使用mysql_real_escape_stringprepared statements

我还建议不要将数组中的数据分成单独的变量,它只会导致问题。如果你真的想这样做,那么extract函数就是这样做的。但是,再次,不要这样做。数组是处理这种数据的最佳方式。

+0

感谢您的答复deceze,我将在今晚一去,看看它是如何变成了我,不要担心我通常会使用mysql_real_escape_string但对于测试我没有连接到一个数据库大气压如此使用只会抛出一个错误。 – zealisreal 2010-11-11 12:41:06

相关问题