2013-03-31 2 views
1

Я пытаюсь вставить массив POST, состоящий в 8 полей в тузде таблицу 8 колонок, но я получаю эту ошибку при отправке формы:Невозможно вставить запись массива в тузде таблице

Error: Column count doesn't match value count at row 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

Если таблица имеет 8 столбцов, вы не можете использовать:

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

непосредственно.

Вы должны указать, какие столбцы вы вставляете:

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

Update
При использовании

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); 
} 

как вы скажем, я n комментариев.

Однако, как вы зацикливание на $_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');"; 

то есть, вы будете стараться вставить 2 значения после того, как вы сообщите, что вы дадите 8.

Вы можете использовать follo крыло для заполнения переменной $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);"; 
+0

Я пробовал: \t Еогеасп ($ _ POST [ 'Datos'], как $ г) { \t \t $ SQL = «INSERT INTO' contactos' (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad, Foto) ЦЕННОСТИ ('', ''. $ D. "');"; mysql_query ($ sql); \t} – Guille

+0

но я получаю ту же ошибку ... – Guille

+0

Можете ли вы показать 'print_r ($ _ POST ['datos']); таким образом мы можем видеть, что может происходить – zipser

0

Если вы пытаетесь, чтобы каждый из них в столбце, то вы можете рассмотреть этот

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

Он даст конечную запятую + апостроф, которая вызовет ошибку, вам нужно удалить последний запятый + апостроф вне цикла. –

+0

Я получаю эту ошибку с этим кодом: Ошибка синтаксиса: неожиданный T_FOREACH в C: \ wamp \ www \ ABM 1 \ index.php в строке 29 – Guille

+0

Я обновил скрипт, чтобы удалить последнюю запятую, :) – devBinnooh

Смежные вопросы