我正在为一个非政府组织(志愿者工作)制作一个表格,这样他们就可以让他们的成员订购一些植物等等。显然,涉及输入一些个人数据。我正在尝试做的是从表单接收数据以遍历$_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'
。那为什么不起作用呢?我应该注意到你在我调用的示例函数中看到的回声确实有效。
答案 0 :(得分:2)
您的问题出在variable scope:从$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;
}
答案 1 :(得分:1)
这是抓取帖子数据的一种非常糟糕的方式。迭代帖子,检查它是否为数字,重新分配到另一个数组,迭代并为每次迭代进行切换,然后将单个值传递给另一个函数。
从$ _POST数组中显式获取发布数据,验证并保存。为什么这么难?我会添加评论,但我没有足够的业力。