语法错误(当似乎没有!)

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花费太多,尤其是$_REQUESTs(意味着用户输入).就目前而言,此查询对您的网站有害:

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来更好地防止漏洞利用.