这样做的正确方法是什么?
它给我一个错误:PHP变量问题
$lingue = array('IT','EN','FR');
$item = new stdClass();
$item->IDCat = 1;
foreach($lingue as $l){
$item->Desc_{$l} = trim(addslashes($_POST['Desc_'.$l]);
}
这样做的正确方法是什么?
它给我一个错误:PHP变量问题
$lingue = array('IT','EN','FR');
$item = new stdClass();
$item->IDCat = 1;
foreach($lingue as $l){
$item->Desc_{$l} = trim(addslashes($_POST['Desc_'.$l]);
}
$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]));
}
似乎是在解析器的轻率。
不是一种轻率,只是替代的数组访问语法(它主要用于字符串偏移访问,但现在正在弃用) – NikiC 2011-04-19 10:48:31
@nikic:我知道它被用作字符串存取器。 ..不知道它被用作替代数组访问器,感谢那些信息。 – 2011-04-19 10:50:36
如果你的问题是与$item->Desc_{$l} = trim(addslashes($_POST['Desc_'.$l]);
尝试$item->{'Desc_'.$l} = trim(addslashes($_POST['Desc_'.$l]);
代替
$varName = 'Desc_'.$l;
$item->$varName = trim(addslashes($_POST['Desc_'.$l]);
您将需要整个表达式包装到弯引号:{"Desc_".$l}
然而,看到了一套语言是怎么回事为动态,请考虑使用Array来代替:
$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"]));
或者只是'$ item - > {“Desc_ $ l”}'和'$ _POST [“Desc_ $ l”]'简称 – mario 2011-04-19 10:32:15
'trim()'调用后仍然缺少')';-) – 2011-04-19 10:35:02
@Stefan谢谢! @mario真实,看起来更好。固定。 – 2011-04-19 10:35:36
尝试:
$item->{'Desc_' . $l} = ....
什么错误yougetting? – Nanne 2011-04-19 10:28:38
“6个新答案已发布”..大声笑肯定赶上简单的解析错误球员:p – 2011-04-19 10:31:39
在'trim(addslashes($ _ POST ['Desc _'。$ l]);' – diEcho 2011-04-19 10:32:03