动态插入值

时间:2012-06-15 16:15:12

标签: php

我想遍历表单字段并动态获取表单字段数据并将其插入数据库。我不想为每个表单字段绑定一个值,而是循环遍历数组中的值。它似乎没有按照我的方式工作。有什么建议吗?

由于

<?php
    $FormFields = array();
    $Values = array();
    global $i;
    $i = 0;

    $conn= new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
    foreach($_POST as $key => $value) {
        $FormFields[++$i] = $key;
        $Values[$i] = $value;

        echo $FormFields[$i] . "<br />";
        echo $Values[$i] . "<br />";

        //loop through all form fields and bind value
        $sql = "INSERT INTO sectiona ($FormFields[$i]) VALUES (:$i)";
        $st = $conn->prepare($sql);
        $st->bindValue(":$i", $Values[$i]);
        $st->execute();

    }
    echo "Total Fields: " . $i;
    $conn = null;

?> 

编辑:

为什么要为每个数据条目创建一个新行? 它不应该只是一排吗?

my image

2 个答案:

答案 0 :(得分:1)

你不能在引号中++$i。移出查询的那一部分。

$field = $FormFields[++$i];
$sql = "INSERT INTO sectiona ($field) VALUES (:$i)";

答案 1 :(得分:0)

我认为$i正确设定。 我做了一个

 echo $i . " - " . $FormFields[$i] . " - " . $Values[$i] . "<br />";

行,它在URL test.php?test=1&something=2&nothing=true上提供正确的输出

1 - test - 1 
2 - something - 2
3 - nothing - true

可能是变量未在查询中正确导出。尝试:

$sql = "INSERT INTO sectiona ('".$FormFields[$i]."') VALUES (:".$i.")";
$st = $conn->prepare($sql);
$st->bindValue(":".$i, $Values[$i]);

编辑回答你的编辑: 你在做$sql = "INSERT INTO sectiona ($FormFields[++$i]) VALUES (:$i)"; 您已经在第一位$FormFields[++$i] = $key;增加了$ i。不要再这样做了。这就是我编辑它的原因

$sql = "INSERT INTO sectiona ('".$FormFields[$i]."') VALUES (:".$i.")"; 

在第一次回复中。