将数组添加到sql数据库中

时间:2014-07-21 15:55:58

标签: php mysql arrays foreach

我正在尝试将此数组正确添加到数据库中。我有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";
}
} 
?>  

2 个答案:

答案 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;之后(基本上它会解析字符)。