我正在为一个非政府组织(志愿者工作)制作表格,这样他们就可以让他们的成员订购一些植物等等。显然,这涉及到输入一些个人数据。我试图做的是在收到表单中的数据后,遍历$_POST
数组,并将所有个人数据分配给一个名为$klantinfo
(clientinfo)的关联数组。我首先尝试了这个(只有其他部分很重要):
foreach ($_POST as $key => $value){
if (is_numeric($key) && is_numeric($value) && $value != 0){
$aantalItems++;
$items[$key] = $value;
} else if(!is_numeric($key)){
$klantinfo[$key] = $value;
}
效果很好。因此,我尝试添加一些对输入内容的检查(已经进行了客户端验证),并认为我一开始会很简单。所以我做了一个这样的切换:
switch($key){
case 'lidnr': lidnr($value); break;
case 'voornaam': voornaam($value); break;
case 'naam': naam($value); break;
case 'straat': straat($value); break;
case 'gemeente': gemeente($value); break;
case 'tel': tel($value); break;
case 'email': email($value); break;
case 'reedslid': lid($value); break;
case 'afhaalpunt': afhaalpunt($value); break;
default: break;
}
作为一个简单函数的例子,我调用了其中一个:
function lidnr($nr){
if(mb_strlen($nr) == 6){
$klantinfo['lidnr'] = (int) $nr;
echo $nr;
}
}
出于某种原因,这不起作用,尽管我无法解释为什么。最初,我只是在脚本的顶部声明了变量$klantinfo
,就像$klantinfo;
一样。我认为这可能与我的声明有关,所以我这样尝试:$klantinfo = array('lidnr' => 0, 'voornaam' => "", 'naam' => "", 'straat' => "", 'gemeente' => "", 'tel' => "", 'email' => "", 'reedslid' => 0, 'afhaalpunt' => "");
也不起作用。更奇怪的是:如果我回到带有变量声明的初始代码,只使用$klantinfo[$key] = $value
,那么数组$klantinfo中所有没有由客户端填写的项都不见了。即使我将它们初始化为默认值。
我是不是遗漏了什么?我搜索并阅读了几条线索。在php中为关联数组赋值应该是$array['key'] = 'desired_value'
。那为什么它不起作用呢?顺便说一句,你在我调用的示例函数中看到的echo确实有效。
您的问题在于变量范围:数组$klantinfo
在lidnr()
、voornaam()
等函数中不可见。
有两种处理方法:
-
在以下每个函数中将
$klantinfo
标记为全局:function lidnr($nr){ global $klantinfo; if(mb_strlen($nr) == 6){ $klantinfo['lidnr'] = (int) $nr; echo $nr; } }
-
剥离功能并直接在开关块中使用其主体:
switch($key){ case 'lidnr': if(mb_strlen($value) == 6){ $klantinfo['lidnr'] = (int) $value; echo $value; } break; }
这是一种非常糟糕的获取帖子数据的方法。对post进行迭代,检查它是否是数字,重新分配给另一个数组,对其进行迭代,并在每次迭代中进行切换,然后将单个值传递给另一函数。
从$_post数组中显式获取发布数据,对其进行验证,然后保存。为什么这么难?我本想补充一句话,但我没有足够的因果报应。