Отправить массив в бд

Runapa

Постоялец
Регистрация
30 Окт 2010
Сообщения
63
Реакции
5
Пытаюсь отправить из формы с динамически изменяемым количеством полей данные в базу данных MySql. Когда поле одно, всё нормально отправляется. Когда добавляю еще одно поле - появляются ошибки:


Column count doesn't match value count at row 1
INSERT INTO ladu(weight,garantii)VALUES ('7', '9', '2', '4')


Массив $array выглядит так:

Array
(
[weight] => Array
(
[0] => 7
[1] => 9
)

[garantii] => Array
(
[0] => 2
[1] => 4
)

)
Код:
PHP:
$weight = $_POST['weight'];
$garantii = $_POST['garantii'];
 
$array = array('weight' => $weight, 'garantii' => $garantii);
 
if ($_POST) {
    foreach($array as $key => $value) {
        foreach($value as $val) {
            $arr[] = $val;
        }
    }
    $sql = "INSERT INTO ladu";
    $sql .= "(".implode(",", array_keys($array)).")";
    $sql .= "VALUES ('".implode("', '", array_values($arr))."')";
    $result = mysql_query($sql) or die(mysql_error()."<br/>".$sql);
}

Помогите исправить код.
 
PHP:
if ($_POST) {
	$weight = $_POST['weight'];
	$garantii = $_POST['garantii'];
	 
	$array = array('weight' => $weight, 'garantii' => $garantii);
	
	foreach($array as $key => &$value) {
		$value = serialize($value);
	}
	$sql = "INSERT INTO ladu";
	$sql .= "(".implode(",", array_keys($array)).")";
	$sql .= "VALUES ('".implode("', '", array_values($array))."')";
	echo $sql;
	$result = mysql_query($sql) or die(mysql_error()."<br/>".$sql);
}

Скорее сработает что-то типа этого, а при получении данных из БД делать unserialize полей
 
Сработало, только вот мне так не надо.
 
Когда добавляю еще одно поле - появляются ошибки:
Column count doesn't match value count at row 1
INSERT INTO ladu(weight,garantii)VALUES ('7', '9', '2', '4')

Неужели не видно, что в два поля (weight, garantii) вы пытаетесь впихнуть четыре ('7', '9', '2', '4')?
тут сложно сказать, не зная структуры таблицы, но видимо полей действительно два и тогда код должен выгядеть так:
PHP:
$weight = $_POST['weight'];
$garantii = $_POST['garantii'];
 
$array = array('weight' => $weight, 'garantii' => $garantii);
 
if ($_POST) {
    $sql = "INSERT INTO ladu";
    $sql .= "(".implode(",", array_keys($array)).")";
    foreach($array as $key => $value) {
        $arr[] = implode(', ', $value);
        }
    $sql .= "VALUES ('".implode("', '", $arr)."')";
    $result = mysql_query($sql) or die(mysql_error()."<br/>".$sql);
}
 
Неужели не видно, что в два поля (weight, garantii) вы пытаетесь впихнуть четыре ('7', '9', '2', '4')?
тут сложно сказать, не зная структуры таблицы, но видимо полей действительно два и тогда код должен выгядеть так:
PHP:
$weight = $_POST['weight'];
$garantii = $_POST['garantii'];
 
$array = array('weight' => $weight, 'garantii' => $garantii);
 
if ($_POST) {
    $sql = "INSERT INTO ladu";
    $sql .= "(".implode(",", array_keys($array)).")";
    foreach($array as $key => $value) {
        $arr[] = implode(', ', $value);
        }
    $sql .= "VALUES ('".implode("', '", $arr)."')";
    $result = mysql_query($sql) or die(mysql_error()."<br/>".$sql);
}


А можно как-то сделать так, чтобы каждое значение записывалось в новую строку ? А то сейчас все значения из массива weight пишутся в одну строку через запятую.
 
PHP:
$weight = $_POST['weight'];
$garantii = $_POST['garantii'];
 
 
if ($_POST) {
    foreach($weight as $n=>$v) {
         $sql = 'INSERT INTO `ladu` (`weight`, `garantii`) VALUES('.$v.', '.$garantii[$n].'); ';
}
    $result = mysql_query($sql) or die(mysql_error()."<br/>".$sql);
}
 
Назад
Сверху