0

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

谢谢

<?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;

?> 

编辑:

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

我的形象

4

2 回答 2

1

你不能++$i在引号里做。将查询的那部分移出。

$field = $FormFields[++$i];
$sql = "INSERT INTO sectiona ($field) VALUES (:$i)";
于 2012-06-15T16:23:09.773 回答
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)"; 你已经在第一位增加了 $i $FormFields[++$i] = $key;。不要再这样做了。这就是为什么我将其编辑为

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

在第一反应。

于 2012-06-15T16:33:42.710 回答