你好:)
我有一个如下所示的多维数组:
$things = array(
array('one'=>'red', 'two'=>'$85' , 'three'=>1),
array('one'=>'green', 'two'=>'$35' , 'three'=>0),
array('one'=>'blue', 'two'=>'$32' , 'three'=>0),
);
在我的 PHP 页面上使用此数组可以完成各种操作,包括制作一个包含红色、绿色和蓝色名称/ID 字段的表单,如下所示:
<form>
<?php foreach ($things as $row) {
echo '<input type="hidden" name="' . $row['one'] . '" id="' . $row['one'] . '" value="0" />';
} ?>
<input type="submit" />
</form>
提交表单时,我想将 $_REQUEST 放入 MySQL 表中,其中的列以字段值命名,这就是我遇到的困难。这是我的查询:
INSERT INTO table_name (name, email, $fields_list)
VALUES ('$name', '$email', '$values_list')
“$fields_list”只是一个以逗号分隔的字段名称列表(红色、绿色、蓝色)。 “$values_list”应该是 $_REQUEST 值的列表,并由“$colours”构造如下:
$values_list = implode('\', \'', array_map(function ($entry) {
return $entry;
}, $colours));
“$colours”中的内容就是问题所在。当我这样做时,它起作用了:
$colours = array($_REQUEST["red"], $_REQUEST["green"], $_REQUEST["blue"]);
但我不想显式地重新声明数组中的值,因为这可能会随着时间的推移而改变。我只想在页面顶部定义数组,然后让其余函数从中工作。所以,我尝试了这个,但它不起作用:
$colour_list = implode(', ', array_map(function ($entry) {
return '$_REQUEST["'.$entry['one'].'"]';
}, $things));
$colours = array($colour_list);
如果我 var_dump 这个版本的 $colours,它与上面明确声明的版本相同。
为什么不起作用?我怎样才能让它发挥作用?我是否以错误的方式处理这个问题?
我认为这与处理事物的顺序有关 - PHP 与 REQUEST。我还认为我过度处理了我的数组/变量,我有一种感觉我可以在某个地方跳过一个步骤,但很困惑并且无法弄清楚在哪里。请帮忙!
非常感谢:)
最佳答案
我不确定,但我认为您想要的是动态生成插入查询。
这是我的解决方案:-
function insert_query($data){
if(is_array($data)){
foreach($data as $key=>$value){
$fields[] = '`'.$key.'`';
if(is_numeric($value)){
if(substr($value, 0, 1)==0)//checking for leading zero
{
$values[] = "'".$value."'";
}else{
$values[] = $value;
}
}else{
$values[] = "'".mysqli_real_escape_string($value)."'";
}
}
return "(".implode(",",$fields).") VALUES(".implode(",",$values).")";
}
}
$_insert = $_REQUEST; //Security wise would not be a good idea
$_insert['name'] = $name;
$_insert['email'] = $email;
$query = "INSERT INTO table_name ".insert_query($_insert);
关于PHP表单使用多维数组提交到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986549/