2014-12-04 123 views
0

我怎么能得到以下代码打印出aaa.bbb.ccc? 目前我所得到的是每个eval()行的解析错误。 这是一个抽象的代码版本。最后,我希望用户能够选择要通过搜索的数据库表的字段。像 组合的东西,如果(!strpos( “$ FIELD1 $域2 $场3”,$搜索)==假)...在这种情况下,我可以使用eval函数吗?

$filter = "\$x=\$a.\$b.\$c"; 

$a = "a"; 
$b = "a"; 
$c = "a"; 
eval($filter); 
echo $x.","; 

$a = "b"; 
$b = "b"; 
$c = "b"; 
eval($filter); 
echo $x.","; 

$a = "c"; 
$b = "c"; 
$c = "c"; 
eval($filter); 
echo $x; 
+1

为什么使用'\ $ x'?第二 - 'eval'是EVIL。 – 2014-12-04 08:19:39

+0

发现我的简单错误:我忘了';'。 $ filter必须是“\ $ x = \ $ a。\ $ b。\ $ c;”;我必须逃避$,否则将使用$ x的内容,它不会成为eval()的表达式() – Klaus 2014-12-04 08:27:04

+0

为什么并置需要'eval'? '$ x = $ a。 $ b。 $ C;' – 2014-12-04 08:33:04

回答

1

要解决当前的代码,更改如下:

$filter = "\$x=\$a.\$b.\$c"; 

$filter = '$x=$a.$b.$c;'; 

但要用户输入使用eval()是在代码中很大的安全漏洞。尝试一些不同的方法,例如使用正则表达式和preg_match_all()函数检查输入是否存在于$search中。

相关问题