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/