首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将POST值赋值给循环中的数组并将数组放入数据库

将POST值赋值给循环中的数组并将数组放入数据库
EN

Stack Overflow用户
提问于 2014-03-04 21:49:27
回答 3查看 146关注 0票数 0

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

代码语言:javascript
运行
复制
$minmax = array('bed_min', 'bed_max', 'rec_min', 'rec_max', 'bath_min', 'bath_max', 'value_min', 'value_max');

名称与数据库中相应的列相同。而不是使用如下的sql查询:

代码语言:javascript
运行
复制
$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值分配给相应的变量数组:

代码语言:javascript
运行
复制
foreach ($minmax as $var){
  $var = $_POST[$var]
}

(nb,我认为这个片段不会起作用,但是我添加了它,因为我认为稍微编辑一下就可以了!)

在为POST值分配了变量列表之后,使用两个数组在$query中进行更新,一个数组包含值列表,另一个数组使用数据库列列表。再次,我不知道这将如何运作,所以指针是有帮助的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-04 21:55:59

如果假设post中的所有值都具有与您的列相同的名称(数组键),那么类似的内容可能适用于您:

代码语言:javascript
运行
复制
$query = "UPDATE first_page SET ";
foreach ($_POST as $key => $var){
  $query .= " $key='$var',";
}
$query = rtrim($query,',') . " WHERE email_address='$email' ";
票数 0
EN

Stack Overflow用户

发布于 2014-03-05 00:45:46

您实际上并不需要表单输入名称的$minmax数组,因为您可以从$_POST的键中获取这些名称。

如果这些值都是数字,就像它们看起来的那样,那么您可以在一行中完成所有操作,如下所示:

代码语言:javascript
运行
复制
$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数组进行净化:

代码语言:javascript
运行
复制
$sanitized_POST = array_map(function($item) {

    return mysqli::real_escape_string($item);

}, $_POST);

不过,老实说,您应该尝试找出一个使用预先准备的语句的解决方案。

另外,如果您有经过消毒的post数组,那么这一行实际上将执行Quixrick在其他答案中使用变量时所做的事情:

代码语言:javascript
运行
复制
extract($sanitized_POST);
票数 1
EN

Stack Overflow用户

发布于 2014-03-04 21:57:38

您可能想在这里使用“可变变量”。基本上,您将使用一个双美元符号$$来创建一个具有数组值名称的变量。

代码语言:javascript
运行
复制
$_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;

这一产出如下:

代码语言:javascript
运行
复制
BED MIN: Rick
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22183835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档