我想遍历表单字段并动态获取表单字段数据并将其插入数据库。我不想为每个表单字段绑定一个值,而是循环遍历数组中的值。它似乎没有按照我的方式工作。有什么建议吗?
由于
<?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;
?>
编辑:
为什么要为每个数据条目创建一个新行? 它不应该只是一排吗?
答案 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¬hing=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.")";
在第一次回复中。