将POST值分配给循环中的数组并将数组放入数据库

时间:2014-03-04 21:49:27

标签: php mysql sql

我有一个包含表单输入名称的数组:

$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中进行更新,一个数组包含值列表,另一个数据库包含数据库列列表。我再次不知道这将如何工作,所以指针会有所帮助!

3 个答案:

答案 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