Php 使POST值在循环中动态存储为数组?
我一直在努力编写一个函数,该函数将获取任何给定表单提交的POST值,将它们弹出到一个数组中,使用trim、addslashes等在数组中循环,然后将该值传递回一个变量,然后将其传递到数据库 现在我遇到的障碍是在提交表单时将所有输入、文本区域、选择元素数据放入数组。我的代码如下Php 使POST值在循环中动态存储为数组?,php,post,foreach,multidimensional-array,addslashes,Php,Post,Foreach,Multidimensional Array,Addslashes,我一直在努力编写一个函数,该函数将获取任何给定表单提交的POST值,将它们弹出到一个数组中,使用trim、addslashes等在数组中循环,然后将该值传递回一个变量,然后将其传递到数据库 现在我遇到的障碍是在提交表单时将所有输入、文本区域、选择元素数据放入数组。我的代码如下 $fields = array($_POST['1'], $_POST['2']); $i = 0; foreach ($fields as $field) { $i++;
$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 ." - ". ${'field'.$i }."<br />";
}
正如您在这里看到的,尽管POST值名称仍然是静态的,但一切都很好,我需要的是一种方法,将POST数据送入一个循环,该循环使用增量变量动态调用POST名称,然后将所有数据放入同一数组中。我试过的代码如下
for ($ii=0;$ii++;) {
foreach($_POST['$ii'] as $field) {
$fields = array($field);
}
}
$i = 0;
foreach ($fields as $field) {
$i++;
${'field'.$i } = trim(addslashes(strip_tags($field)));
echo "POST field info #". $i ." - ". ${'field'.$i }."<br />";
}
现在我知道这是行不通的,但我能感觉到我离得比较近,所以我想知道是否有聪明的人能帮我把最后一部分整理出来?很遗憾,我现在要睡觉了,至少要9个小时才能看到这篇文章,抱歉
提前谢谢
丹
或者,如果您真的非常想使用循环:
foreach ($arrayOfPostValues as &$value) {
$value = trim(striptags($value));
}
我绝对不建议使用addslashes,它没有什么用处。使用或代替
我还建议不要将数组中的值分解成单独的变量,这只会导致问题。如果你真的想这么做,这里有一个函数,它正是这样做的。但是,再一次,不要这样做。数组是处理此类数据的最佳方式。首先,您需要为$\u POST[1]和$\u 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”之类的字段名不是很好。尝试使用更具描述性的方法,但正如我上面所说,我认为你这样做是有原因的
更新:
即使您正在为表单元素使用特定的名称,您仍然可以使其适用于任何表单。我在下面添加了几行作为示例
$_POST['email'] = 'example@example.com';
$_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 />';
}
}
感谢deceze的回复,我今晚会尝试一下,看看结果如何,别担心我会正常使用mysql\u real\u escape\u字符串,但是为了测试,我没有连接到db atm,所以使用它只会抛出一个错误。谢谢Drew的回复,我今晚下班后会尝试一下。您的更正表单元素按照惯例在表单中命名,现在我选择通用元素名称的原因是,表单验证功能将在任何情况下适用于站点上的任何表单。我有一个网站计划,其中将有15个表单的人口和验证他们都与具体的元素名称,即电子邮件或密码亲自将需要大量的代码行。我的任务是优化这一点:嗨,Drew,你的代码在你发布的内容中运行得很好,我唯一关心的是,一般使用$\u POST意味着提交元素值也作为$\u POST循环的一部分发布,你知道我如何绕过$\u POST数组索引该值吗?忽略这一点,我找到了答案,我只是取消了$\u POST的设置循环之前的['form']。
$_POST['email'] = 'example@example.com';
$_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 />';
}
}