我尝试在关联数组中输入一个值,但它不起作用

时间:2013-12-12 22:37:01

标签: php

我正在为一个非政府组织(志愿者工作)制作一个表格,这样他们就可以让他们的成员订购一些植物等等。显然,涉及输入一些个人数据。我正在尝试做的是从表单接收数据以遍历$_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'。那为什么不起作用呢?我应该注意到你在我调用的示例函数中看到的回声确实有效。

2 个答案:

答案 0 :(得分:2)

您的问题出在variable scope:从$klantinfolidnr()等功能中看不到数组voornaam()

有两种方法可以解决这个问题:

  1. 在这些功能中将$klantinfo标记为全局:

    function lidnr($nr){
        global $klantinfo;
    
        if(mb_strlen($nr) == 6){
            $klantinfo['lidnr'] = (int) $nr;
            echo $nr;
        }
    }
    
  2. 剥离功能并直接在开关块中使用它的主体:

    switch($key){
        case 'lidnr': 
        if(mb_strlen($value) == 6){
            $klantinfo['lidnr'] = (int) $value;
            echo $value;
        } 
        break;
    }
    

答案 1 :(得分:1)

这是抓取帖子数据的一种非常糟糕的方式。迭代帖子,检查它是否为数字,重新分配到另一个数组,迭代并为每次迭代进行切换,然后将单个值传递给另一个函数。

从$ _POST数组中显式获取发布数据,验证并保存。为什么这么难?我会添加评论,但我没有足够的业力。