我正在尝试将此数组正确添加到数据库中。我有3个输入框,当我回显$ key时,我的所有信息就像这个Jonesbass23但是当我运行代码时,每个字段在数据库中获得一个新行,它不会全部进入1行并且值进入错误的列也是如此。还会根据用户想要的输入字段数量动态添加我的$ _POST数组,以便我的数据库条目可以是多个。以为我有办法,但不要猜。任何帮助将不胜感激,谢谢。
<?php
session_start();
$errmsg_arr = array();
$errflag = false;
require_once 'dbconfig.php'; // Database Connection
//Retrieve data input from addfish.php
$username = $_SESSION['username'];
print_r($_POST);
}
//Returns error message text on screen
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: addfish.php");
exit();
}
//Insert data into database
$statement = $dbc->prepare("INSERT INTO entries(username, species, length, weight)
VALUES(:username, :species, :length, :weight)");
foreach($_POST as $key => $data) {
echo $key;
echo $data['species']; // The data of species1, species2, or species3, etc.
echo $data['length'];
echo $data['weight'];
try {
$statement->execute(array(
"username" => "$username",
"species" => $data['species'],
"length" => $data['length'],
"weight" => $data['weight']
));
}
catch(PDOException $e) {
echo "Exception caught: $e";
}
}
?>
答案 0 :(得分:1)
问题是你正在为$_POST
的每个键执行1次插入:
foreach($_POST as $key => $value)
因此,如果您的字段有3个输入,那么您的帖子将如下所示:
$_POST => array (
['key1'] => 'value1'
['key2'] => 'value3'
['key3'] => 'value2'
)
你的foreach将为每个键执行一次插入,这就是为什么你最终为每个键添加一个新行,更不用说你只插入一个$key
字符串的字母:{{1例如,将返回$key[1]
字符串的第二个字母。
此外,您不需要循环$key
的原因仅仅是因为每个键包含不同的值,您可以通过$_POST
正常访问它们,例如,如FuzzyTree所示。
<强>更新强>:
您可以按如下方式对输入信息进行分组:
$_POST['species']
依此类推,所以你可以像这样在你的php上循环它们:
<input type="text" name="species1[species]" />
<input type="text" name="species1[length]" />
<input type="text" name="species1[weight]" />
<br />
<input type="text" name="species2[species]" />
<input type="text" name="species2[length]" />
<input type="text" name="species2[weight]" />
此外,建议您在循环之前准备语句,而不是在循环内部。这样做没有问题,但这是使用预准备语句的重点。结合两种吸烟的例子:
foreach($_POST as $key => $data) {
echo $key; // This will print species1, species2, species3, etc.
echo $data['species']; // The data of species1, species2, or species3, etc.
echo $data['length'];
echo $data['weight'];
}
答案 1 :(得分:0)
您必须序列化您的数组。
以下是文档中的示例
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
基本上它会将您的数组放入一行,将其分配给变量并存储它,以便它可以“反序列化”&#39;之后(基本上它会解析字符)。