if (array_key_exists('submit', $_POST)) {
    foreach ($_POST as $key => $value) {
        ${$key} = mysql_real_escape_string($value);
        $imp_1 = implode("' '", array_keys($lunch_days));
        $imp_2 = implode("' '", array_keys($dinner_days));
        $imp_3 = implode("' '",$hours_dinner);
        $imp_4 = implode("' '",$hours_lunch);}
        $sql = "INSERT INTO local_eats(..., ...., ...etc.. etc..) VALUES('$...', '$....', '$...', etc.. etc..)";


我的问题是,自从将mysql_real_escape_string()函数添加到所有$_post变量以来,我无法插入我的四个爆破变量,例如$imp_1$imp_2$imp_3$_imp4

最佳答案

首先,我对您的设计有一些建议:


随意将$ _POST键转换为变量是一个坏主意,如果您有$ isAdmin变量,并且有人将$ isAdmin作为后置参数传递给了变量,则该变量将被设置
根据提供的查询参数任意定义架构/查询是一个坏主意,如果您有is_admin列,则可以将其作为查询参数传递并设置该字段。
最好通过PDO使用准备好的语句,而不要使用mysql_real_escape_string


我的建议是使用这样的东西:

if (array_key_exists('submit', $_POST)) {
    $days = array(
        'monday',
        'tuesday',
        ... etc...
    );

    $sth = $dbh->prepare('INSERT INTO local_eats(lunch_monday, lunch_tuesday, ... dinner_monday, ..., open_dinner_monday, etc.) VALUES(:lunch_monday, :lunch_tuesday, ...etc)');

    foreach($days as $day) {
        if(isset($_POST['lunch_days'][$day])) {
            $sth->bindParam(':lunch_' . $day, 1, PDO::PARAM_INT);
        } else {
            $sth->bindParam(':lunch_' . $day, 0, PDO::PARAM_INT);
        }
        // Do the above for the other "groups" of fields
    }

    $sth->execute();
}


这样,只能设置某些字段,而不会动态创建任何变量。如果您的大部分条目不太可能每天都打开,那么我也考虑将模式更改为具有单独的天数表。

关于php - mysql_real_escape_string和implode(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23318580/

10-10 16:18