php:将str var和string literal连接为POST值的键

时间:2011-11-02 03:51:47

标签: php concatenation

遇到麻烦。我想使用由字符串文字和字符串变量的串联生成的密钥来引用超级全局。

$guests = array();
$guest_data = $this->compile_guests_for_hcp('g1');
array_push($guests, $guest_data($hcp_id));

function compile_guests_for_hcp($guest_identfier){
    return function($hcp_id) use ($guest_identfier){
        $guest = array(
            'fname' => $_POST["fname_$guest_identifier"],
            'lname' => $_POST["lname_$guest_identifier"],
            'city' => $_POST["city_$guest_identifier"],
            'state' => $_POST["state_$guest_identifier"],
            'degree' => $_POST["degree_$guest_identifier"],
            'zip' => $_POST["zip_$guest_identifier"],
            'specialty' => $_POST["specialty_$guest_identifier"],
            'email' => $_POST["email_$guest_identifier"],
            'phone' => $_POST["pref_phone_$guest_identifier"],
            'job_title' => $_POST["job_title_$guest_identifier"],
            'office_addr_line_1' => $_POST["office_addr_line_1_$guest_identifier"],
            'office_addr_line_2' => $_POST["office_addr_line_2_$guest_identifier"],
            'hcp_data_idhcp_data' => $hcp_id
        );
        return $guest;
    };
}

PHP正在尝试引用未定义的变量错误,例如$_POST["fname_"]$_POST["guest_identifier"]

我正在尝试访问$ _POST [“fname_g1”]等。

6 个答案:

答案 0 :(得分:2)

其次是在尝试访问其值之前测试是否使用isset()设置变量。您甚至可以在语法中更直接地编写字符串连接:

$var = isset( $_POST[ 'fname_' . $guest_identifier]) ? 
           $_POST[ 'fname_' . $guest_identifier] : 'default_value'

你的帖子听起来好像PHP试图访问两个单独的变量$_POST["fname_"]和$ _POST [“$ guest_identifier”],情况应该不是这样,特别是上面的语法。

答案 1 :(得分:0)

只需使用以下操作符:$_POST["fname_".$guest_identifier]

答案 2 :(得分:0)

我认为你的方法有点过于复杂,但你的问题不在数组索引连接中:你的代码中没有语法错误。

例如,这就像魅力一样:

$a = array("foo"=>1); 
$o = "o"; 
print $a["fo$o"]; // prints 1

您的问题是$guest_identifier值未正确设置,因此您正在寻找根本不存在的POST索引。

有几种不同的方法可以解决这个问题。我的第一个建议是在调用此函数之前简单地验证ID是否存在。如果那不是一个选项,那么我可能会创建一个帮助器:

function ifInPost($val, $default = NULL){
    if( isset( $_POST[ $val ] ) ) return $_POST[ $val ];
    return $default;
}

然后,您只需将$_POST["fname_$guest_identifier"]替换为ifInPost("fname_$guest_identifier")

即可

答案 3 :(得分:0)

GOT IT! (捂脸)

我的参数中的简单拼写错误,因此它没有被传递。我有同情心。想念我。发布代码哈哈哈时我应该更多关注浏览器的拼写检查!

function compile_guests_for_hcp($guest_identfier){
return function($hcp_id) use ($guest_identfier){

答案 4 :(得分:0)

这有助于您动态插入n个产品。

$loopLength=$_POST['ProudctSize'];

for ($i=1; $i <=$loopLength; $i++) 
{
    $productid=$_POST['P'.$i];
    $quatity=$_POST['Q'.$i];
    $rate=$_POST['R'.$i];

   $Insert=mysql_query("INSERT INTO saledisplay ( `saleid`, `productid`, `quantity`, `rate`) 
                    VALUES('$oid','$productid','$quatity','$rate')");
}

答案 5 :(得分:-1)

$_POST[...的所有来电替换为@$_POST[...以解决错误。

或者在使用之前检查值,例如isset($_POST[...]) ? $_POST[...] ...

或者通过调用error_reporting(E_ALL ^ E_NOTICE)

来取消PHP警告