PHP变量麻烦

时间:2011-04-19 10:27:41

标签: php variables

这样做的正确方法是什么?
它给了我一个错误:

$lingue       = array('IT','EN','FR');
$item         = new stdClass();
$item->IDCat  =  1;

foreach($lingue as $l){
    $item->Desc_{$l} = trim(addslashes($_POST['Desc_'.$l]);     
}

5 个答案:

答案 0 :(得分:2)

您需要将整个表达式包装成卷曲引号:{"Desc_".$l}

然而,看到语言集将是动态的,请考虑使用数组来代替:

$item = new STDClass();
$item->Desc = new Array();

foreach($lingue as $l){
  $item->Desc[$l] = trim(addslashes($_POST["Desc_$l"]));
 }  

echo $item->Desc["IT"]; // outputs the italian description

补充意见:

请注意,如果您要在数据库查询中使用这些值,addslashes()不足以防止SQL注入。使用您正在使用的SQL库的字符串转义函数。

使用$_POST["Desc_xyz"]而不检查它是否已设置将抛出PHP通知,您要避免。考虑添加支票:

if (!empty($_POST["Desc_$l"]))
 $item->Desc[$l] = trim(addslashes($_POST["Desc_$l"]));

答案 1 :(得分:0)

$lingue      = array('IT','EN','FR');
$item        = new stdClass();
$item->IDCat =   1;
foreach($lingue as $l){
    $item->{'Desc_'.$l}    = trim(addslashes($_POST['Desc_'.$l]));
}

动态访问者必须用大括号括起来,并且在)调用结束时缺少trim()

只是为了突出$item->{'Desc_'.$l} = ...$item->Desc_{$l} = ...

之间的区别
//...
foreach($lingue as $l){
    $item->{'Desc_'.$l}    = trim(addslashes($_POST['Desc_'.$l]));
}
print_r($item);
// outputs:
/*
stdClass Object
(
    [IDCat] => 1
    [Desc_IT] => a
    [Desc_EN] => a
    [Desc_FR] => a
)
*/

//...
foreach($lingue as $l){
    $item->Desc_{$l}    = trim(addslashes($_POST['Desc_'.$l]));
}
print_r($item);
// outputs:
/*
stdClass Object
(
    [IDCat] => 1
    [Desc_] => Array
        (
            [IT] => a
            [EN] => a
            [FR] => a
        )

)
*/

这实际上与

相同
//...
foreach($lingue as $l){
    $item->Desc_[$l]    = trim(addslashes($_POST['Desc_'.$l]));
}

似乎是解析器中的一种谬误。

答案 2 :(得分:0)

如果问题出在$item->Desc_{$l} = trim(addslashes($_POST['Desc_'.$l]); 试试$item->{'Desc_'.$l} = trim(addslashes($_POST['Desc_'.$l]);  代替

答案 3 :(得分:0)

$varName = 'Desc_'.$l;
$item->$varName = trim(addslashes($_POST['Desc_'.$l]);

答案 4 :(得分:0)

尝试:

$item->{'Desc_' . $l} = ....