PHP表单使用多维数组提交到数据库

标签 php mysql arrays multidimensional-array

你好:)

我有一个如下所示的多维数组:

$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/

相关文章:

javascript - 如何避免 AJAX 成功函数中的未定义错误消息

php - UTF-8贯穿始终

java - 记录鼠标点击坐标

php - 选择并回显所有表格(无论它是什么)

java - 在 JPA/Hibernate 中使用 PK 作为 FK

javascript - Knockout.js - 数组/对象文字和访问音频路径的属性

python - 如何在 Python 中将二维数组的字符串值转换为整数值?

php - 何时在 Laravel 4 中使用模型

php - 检查 $_POST 变量是否被填充

c - 如何通过在c中推进内存地址来存储结果