ale*_*567 1 php mysql syntax foreach eval
我花了一个小时左右试图弄清楚这一个错误..它看起来对我来说,但我到目前为止还没有专家.所以我想我会问专家!我一直收到这个错误:
解析错误:语法错误,意外''(T_ENCAPSED_AND_WHITESPACE),期望标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)在......第29行
从这行代码:
eval("$var_value = $_REQUEST['{$value}']");
Run Code Online (Sandbox Code Playgroud)
这是围绕它的代码..
function save_edits($var_name, $var_value)
{
eval("{$var_name} = sql_safe({$var_value});");
eval("mysql_query(\"UPDATE settings set {$var_name}='{$var_value}' where variable='{$var_name}'\") or die(mysql_error());");
}
foreach ($_REQUEST as $key => $value)
{
eval("$var_value = $_REQUEST['{$value}']");
save_edits($value, $var_value);
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*tie 11
缺少a ]
出现:
eval("$var_value = $_REQUEST['{$key}\'");
^^
Run Code Online (Sandbox Code Playgroud)
还缺少一个)
:
eval("{$var_name} = sql_safe({$var_value};");
^^
Run Code Online (Sandbox Code Playgroud)
但是,您应该避免eval
花费太多,尤其是$_REQUEST
s(意味着用户输入).就目前而言,此查询对您的网站有害:
http://your-site.com/?foo='];exec('rm%20*.*');
Run Code Online (Sandbox Code Playgroud)
那么重构怎么样:
function save_edits($var_name, $var_value)
{
$clean_name = mysql_real_escape_string($var_name);
$clean_value = mysql_real_escape_string($var_value);
$sql = "UPDATE settings "
.= "SET value = '{$clean_value}' "
.= "WHERE variable = '{$clean_name}'";
mysql_query($sql) or die(mysql_error());
}
foreach ($_REQUEST as $key => $value)
{
save_edits($key, $value);
}
Run Code Online (Sandbox Code Playgroud)
但是你应该真正关注使用:
CREATE TABLE settings
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
value VARCHAR(255)
);
Run Code Online (Sandbox Code Playgroud)
然后,您可以清理名称和值字段.您可能还希望使用PDO来更好地防止漏洞利用.