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


i try to enter a value into an associative array, but it doesn't work

我正在为一个非政府组织(志愿者工作)制作表格,这样他们就可以让他们的成员订购一些植物等等。显然,这涉及到输入一些个人数据。我试图做的是在收到表单中的数据后,遍历$_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确实有效。

您的问题在于变量范围:数组$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;
    }
    

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

从$_post数组中显式获取发布数据,对其进行验证,然后保存。为什么这么难?我本想补充一句话,但我没有足够的因果报应。