我有一个数组,其中包含表单输入名称的名称:
$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]
}(nb,我认为这个片段不会起作用,但是我添加了它,因为我认为稍微编辑一下就可以了!)
在为POST值分配了变量列表之后,使用两个数组在$query中进行更新,一个数组包含值列表,另一个数组使用数据库列列表。再次,我不知道这将如何运作,所以指针是有帮助的!
发布于 2014-03-04 21:55:59
如果假设post中的所有值都具有与您的列相同的名称(数组键),那么类似的内容可能适用于您:
$query = "UPDATE first_page SET ";
foreach ($_POST as $key => $var){
$query .= " $key='$var',";
}
$query = rtrim($query,',') . " WHERE email_address='$email' ";发布于 2014-03-05 00:45:46
您实际上并不需要表单输入名称的$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);不过,老实说,您应该尝试找出一个使用预先准备的语句的解决方案。
另外,如果您有经过消毒的post数组,那么这一行实际上将执行Quixrick在其他答案中使用变量时所做的事情:
extract($sanitized_POST);发布于 2014-03-04 21:57:38
您可能想在这里使用“可变变量”。基本上,您将使用一个双美元符号$$来创建一个具有数组值名称的变量。
$_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: Rickhttps://stackoverflow.com/questions/22183835
复制相似问题