我有一个包含表单输入名称的数组:
$minmax = array('bed_min', 'bed_max', 'rec_min', 'rec_max', 'bath_min', 'bath_max', 'value_min', 'value_max');
名称与数据库中的相应列相同。而不是像这样使用SQL查询:
$bed_min=$_POST['bed_min'];
$bed_max=$_POST['bed_max'];
$rec_min=$_POST['rec_min'];
$rec_max=$_POST['rec_max'];
$bath_min=$_POST['bath_min'];
$bath_max=$_POST['bath_max'];
$value_min=$_POST['value_min'];
$value_max=$_POST['value_max'];
$query = "UPDATE first_page SET bed_min='$bed_min', bed_max='$bed_max', rec_min='$rec_min', rec_max='$rec_max', bath_min='$bath_min', bath_max='$bath_max', value_min='$value_min', value_max='$value_max', WHERE email_address='$email' ";
有没有办法将所有这些自动化为更小的代码块?我知道不应该将POST值添加到查询中,因此可能会使用以下内容将POST值分配给相应的变量数组:
foreach ($minmax as $var){
$var = $_POST[$var]
}
(我不认为这个片段会起作用,但我添加了它,因为我认为可能会进行一些编辑!)
在为变量列表分配了POST值之后,使用两个数组在$ query中进行更新,一个数组包含值列表,另一个数据库包含数据库列列表。我再次不知道这将如何工作,所以指针会有所帮助!
答案 0 :(得分:1)
你真的不需要$ minmax表单输入名称数组,因为你可以从$ _POST的键中获取它们。
如果值都是数字,就像它们看起来一样,那么你可以像这样在一行中完成所有这些:
$query = "UPDATE first_page SET " . vsprintf(implode("='%d', ", array_keys($sanitized_POST))."='%d'", array_values($sanitized_POST))." WHERE email_address='$email'";
假设您已经将$ _POST中的项目清理为名为$ sanitized_POST的新数组。我知道你在上面的评论中说忽略了消毒,但我想我会添加它,所以你知道我不建议直接使用$ _POST中的值。
您可以使用以下内容清理$ _POST数组:
$sanitized_POST = array_map(function($item) {
return mysqli::real_escape_string($item);
}, $_POST);
老实说,你应该尝试提出一个使用预准备语句的解决方案。
另一方面,如果您有已清理的帖子数组,那么这一行基本上将完成Quixrick在其他一个答案中对变量变量所做的事情:
extract($sanitized_POST);
答案 1 :(得分:0)
如果你假设post中的所有值都与你的列具有相同的名称(数组键),那么这样的东西可能适合你:
$query = "UPDATE first_page SET ";
foreach ($_POST as $key => $var){
$query .= " $key='$var',";
}
$query = rtrim($query,',') . " WHERE email_address='$email' ";
答案 2 :(得分:0)
您可能想在此处使用“Variable Variables”。基本上,您使用双美元符号$$
来创建一个具有数组值名称的变量。
$_POST['bed_min'] = 'Rick';
$minmax = array('bed_min', 'bed_max', 'rec_min', 'rec_max', 'bath_min', 'bath_max', 'value_min', 'value_max');
foreach ($minmax as $var){
$$var = $_POST[$var];
}
print "<BR>BED MIN: ".$bed_min;
输出:
BED MIN: Rick