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

Тема в разделе "Как сделать...", создана пользователем Runapa, 27 фев 2013.

  1. Runapa

    Runapa Постоялец

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



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

    Код:
    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);
    }
    Помогите исправить код.
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.403
    Симпатии:
    1.183
    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 полей
     
  3. Runapa

    Runapa Постоялец

    Регистр.:
    30 окт 2010
    Сообщения:
    63
    Симпатии:
    5
    Сработало, только вот мне так не надо.
     
  4. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    Неужели не видно, что в два поля (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);
    }
     
  5. Runapa

    Runapa Постоялец

    Регистр.:
    30 окт 2010
    Сообщения:
    63
    Симпатии:
    5

    А можно как-то сделать так, чтобы каждое значение записывалось в новую строку ? А то сейчас все значения из массива weight пишутся в одну строку через запятую.
     
  6. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    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);
    }