这样做的正确方法是什么?
它给了我一个错误:
$lingue = array('IT','EN','FR');
$item = new stdClass();
$item->IDCat = 1;
foreach($lingue as $l){
$item->Desc_{$l} = trim(addslashes($_POST['Desc_'.$l]);
}
答案 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} = ....