无法在mysql表中插入post数组

时间:2013-03-31 18:28:14

标签: php mysql arrays insert

我正在尝试将包含8个字段的POST数组插入到8列的mysql表中,但在提交表单时出现此错误:

  

错误:列数与第1行的值计数不匹配

当我搜索此错误时,表示传递的数据不适合数据库表的列数,但该表有8列。我做错了什么?

这是我的代码:

<html>
<body>
<form action="" method="post">

Nombre: <input type="text" name="data[]">
Apellido: <input type="text" name="data[]"></br>
Direccion: <input type="text" name="data[]"></br>
Telefono: <input type="text" name="data[]">
Telefono 2: <input type="text" name="data[]"></br>
Email: <input type="text" name="data[]"></br>
Edad: <input type="text" name="data[]"></br>
Foto: <input type="text" name="data[]"> 
<input type="submit">

</form>

<?php

$con=mysql_connect("localhost","root","");

if (!$con){  die('Could not connect: ' . mysql_error()); }


mysql_select_db("ag_online", $con);

foreach($_POST['data'] as $d ){
    $sql = "INSERT INTO `contacts` VALUES ('', '".$d."');";
    mysql_query( $sql ); 
}


if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}   
echo "1 record added";

mysql_close($con);

?>

</body>
</html>

2 个答案:

答案 0 :(得分:2)

如果表格有8列,则不能使用:

$sql = "INSERT INTO `contacts` VALUES ('', '".$d."');";

直接

您必须指定要插入的列:

$sql = "INSERT INTO `contacts` (col1, col2) VALUES ('', '".$d."');";

<强>更新
当你使用

foreach($_POST['data'] as $d ){
    $sql = "INSERT INTO `contacts` VALUES ('', '".$d."');";
    mysql_query( $sql ); 
}

与使用

相同
foreach($_POST['data'] as $d ){
    $sql = "INSERT INTO `contacts` (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad, Foto)  VALUES ('', '".$d."');";
    mysql_query( $sql ); 
}
正如你在评论中所说的那样。

然而,当你在$_POST['data']上循环时,它会变成类似的东西:

第一个循环:

    $sql = "INSERT INTO `contacts` (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad, Foto)  VALUES ('', 'FIRST_VALUE');";

第一个循环:

    $sql = "INSERT INTO `contacts` (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad, Foto)  VALUES ('', 'SECOND_VALUE');";

也就是说,在您说出8后,您将尝试插入2个值。

您可以使用以下内容填充变量$info,然后执行唯一的insert

$info=implode(",", $_POST['data']);
$info="\"".implode("\",\"", $_POST['data'])."\""; //<--- updated answer, to have all items "wrapped"

然后

$sql = "INSERT INTO `contacts` (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad, Foto)  VALUES ('', $info);";

答案 1 :(得分:0)

如果您尝试将每个列放在列中,那么您可能需要考虑这个

$sql = "INSERT INTO `contacts` VALUES ('";
foreach($_POST['data'] as $d ){
 $sql .= $d."','";
}
 $sql = substr_replace($sql, "", -2);
 $sql .= ");";
 mysql_query( $sql );