通过Ajax获取PHP变量值,变量名称作为参数

问题描述:

我意识到类似的问题已经出现了几次,但我似乎无法找到一个能够帮助我尝试去做的事情。通过Ajax获取PHP变量值,变量名称作为参数

我们有一个config.php文件基本上是一个变量列表,用户组,它们的值,如:

$OUR_EMAIL_ADDRESS = '[email protected]'; 
$OUR_WEBSITE  = 'www.test.com'; 

就像所有我们想传递一个PHP值的其他用户通过Javascript。

我们已经这样做的方式,通过AJAX - 但它不是那么灵活,因为我们想为每一个变量需要自定义脚本/ PHP页面:

第1部分 - 的JavaScript(jQuery的)

$.get("/getConfig_email.php", function(email){ 
    alert(email); 
}); 

第2部分:getConfig_email.php

<?php 
echo $OUR_EMAIL_ADDRESS_VALUE; 
?> 

问题:

有没有办法让PHP可以使用字符串作为变量名?即。我想要做的是这样的:

第1部分 - 的JavaScript(jQuery的)

$.get("/getConfig.php?name=OUR_EMAIL_ADDRESS_VALUE", function(email){ 
    alert(email); 
}); 

第2部分:getConfig.php

<?php 
$var_name = $_GET['name']; 

//some magic here to turn the name of the variable 
//in to the actual variable - a bit like a reverse extract 

echo $var_name.value; 
?> 

你觉得呢?这可能以某种方式 - 我希望只有一个PHP命令可以为我做到这一点!

非常感谢提前。

是的,它通过variable variables是可能的:

echo $$var_name; 

然而,这是不明智的,因为你正在服用的用户输入,并因此用户可以得到本应该被隐藏的内部变量的值。

+1

啊 - 这可能正是我们所追求的。我已经阅读了这个PHP页面,但并没有真正知道如何使用它们。 所以在我给的例子 - 我只是: '$ name = $ _GET ['name']; echo $$ name;' 这看起来不错吗? – user749330 2012-04-28 16:43:55

+0

显然会做我们能够处理的安全问题,比如命名和检查允许收集的变量名称等等。 – user749330 2012-04-28 16:46:49

+0

@ user749330:你说的没错。 – mellamokb 2012-04-28 17:37:45

也许是更好的选择将是设置配置变量数组里面:

$CFG = array(
    'OUR_EMAIL_ADDRESS' => '[email protected]', 
    'OUR_WEBSITE' => 'www.test.com' 
); 

而且随着拿起他们:

$var_name = $_GET['name']; 
echo isset($CFG[$var_name]) ? $CFG[$var_name] : ""; 

否则,它可能是你的脚本的真正的安全问题。

+0

是的...那是什么,我想,当我第一次想做到这一点......现在回想起来 - 这绝对是我们会做什么。事实上,用户可以设置一个页面来设置直接变量。 这个脚本只能用于登录用户 - (我没有粘贴上面的所有东西),还有其他安全检查。 – user749330 2012-04-28 16:39:24

+0

那么,@mellamokb的解决方案将在你的情况下工作。所以使用'$ var_name = $ _GET ['name']; echo $$ var_name;'。但无论如何,尽量避免在你的未来项目中的这种“肮脏的黑客”:) – VisioN 2012-04-28 17:04:52

创建您的所有配置变量的字典,并使用它的名字来查找变量

+0

唉,我们在做这件事的道路上走得太远了。新项目都以这种方式工作。 – user749330 2012-04-28 16:47:56