2015-08-07 3 views
0

Я создал форму в Codeigniter с полем номера телефона, которое динамически дублируется с помощью javascript. Поэтому в принципе у меня может быть одно или несколько полей.Codeigniter Вставить массив в базу данных

<input name="phone[]" value=""type="text"> 
<input name="phone[]" value=""type="text"> 

Затем в мой контроллер у меня есть

$form_data = array(
    'first_name' => $this->input->post('first_name'), 
    'last_name' => $this->input->post('last_name'), 
    'phone' => $this->input->post('phone[]') 
    ); 

Тогда я спасаю это мой dabase как так

function SaveForm($form_data) 
{ 
    $this->db->insert('customers', $form_data); 
    if ($this->db->affected_rows() == '1') 
    { 
     return TRUE; 
    } 
    return FALSE; 
} 

но очевидно, что код «телефон» не так, я просто не можете понять, как правильно это сделать.

ответ

2

вы не можете сохранить массив и базы данных. Вы можете преобразовать его в строку, используя implode(), и всякий раз, когда вам нужно, вы можете преобразовать ее обратно в массив с помощью explode(). Как ниже

$phone=implode(',',$this->input->post('phone')); 
$form_data = array(
     'first_name' => $this->input->post('first_name'), 
     'last_name' => $this->input->post('last_name'), 
     'phone' => $phone 
     ); 
3

Измените функцию, как показано ниже, и она будет работает как шарм,

function SaveForm($form_data) 
    { 
     foreach ($form_data as $contact) 
     { 
      $data[] = array(
       'first_name' => $contact['first_name'], 
       'last_name' => $contact['last_name'], 
       'phone' => $contact['phone'] 
       ); 
     } 

     $this->db->insert_batch('customers', $data); 

     if ($this->db->affected_rows() > 0) 
     { 
      return TRUE; 
     } 
     return FALSE; 
    } 

Modified:

Ах, да, вы должны изменить пункт массив, который вы передаёте функции SaveForm. Пожалуйста, используйте следующий код, игнорируйте выше код:

foreach($_POST['first_name'] as $key=>$fname) 
    { 
     $form_data[] = array(
      'first_name' => $_POST['first_name'][$key], 
      'last_name' => $_POST['last_name'][$key], 
      'phone' => $_POST['phone'][$key], 
      ); 
    } 

function SaveForm($form_data) 
    { 
    $this->db->insert_batch('customers', $data); 

    if ($this->db->affected_rows() > 0) 
    { 
     return TRUE; 
    } 

    return FALSE; 
    } 
+0

К сожалению, это одна не работает, и каждая строка массива метания и ошибка 'Нелегальная строка Смещения«first_name'' погуглить это, кажется, общую проблему, которая появилась в PHP 5.4. Я использую 5.5.8 – skribe

+0

Я изменил ответ, замените код кодом, который размещен ниже «Измененный» текст! –

+0

Я вижу, где вы собираетесь с этим ...но это не так просто, как использование implode(), поскольку Вини предположил, что я принимаю его ответ. – skribe

0

В контроллере

$phone = $_POST['phone'];//this will store data as array. Check image 02 
$form_data = array(
    'first_name' => $this->input->post('first_name'), 
    'last_name' => $this->input->post('last_name'), 
    'phone' => $phone,//some times it works with '$phone' 
); 

В модели

function SaveForm($form_data) 
{ 
    $this->db->insert('customers', $form_data); 
    if ($this->db->affected_rows() == '1') 
    { 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 

} 

Испытано

Изображение 01 (My Fo гт)

01

Изображение 02 (После Добавлено)

enter image description here

+0

Что мне не хватает? Я на самом деле пробовал что-то подобное этому, и мое, а также твоя ошибка. PHP-ошибка была обнаружена Серьезность: Обратите внимание сообщение: Массив для преобразования строки Имя файла: bfmysqli/bfmysqli_driver.php Порядковый номер: 509 База данных Ошибка Произошел Номер ошибки: 1054 Неизвестный столбец " Array 'in' field ' INSERT INTO 'customers' (' first_name', 'last_name',' phone') VALUES (' franky ',' smith ', Array) – skribe

0

MySQL не имеет каких-либо тип данных массива. Поэтому мы не можем хранить массив непосредственно в базе данных mysql. Для этого мы должны сначала преобразовать массив в строку, используя функцию php serialize(), а затем сохранить его в базу данных mysql.

для например: PHP код для хранения массива в базе данных

$array = array("foo", "bar", "hello", "world"); 
$conn=mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
mysql_select_db("mysql_db",$conn); 
$array_string=mysql_escape_string(serialize($array)); 

Чтобы получить массив из базы данных

$conn=mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
mysql_select_db("mysql_db",$conn); 
$q=mysql_query("select column from table",$conn); 
while($rs=mysql_fetch_assoc($q)) 
{ 
$array= unserialize($rs['column']); 
print_r($array); 
} 
+0

Вы уверены, что это codeigniter? – Bugfixer

+0

Спасибо за это, но, как указал Bugfixer, ваш ответ не использует Codeinigiter, в котором я столкнулся с проблемой. Я уже могу это сделать в ванильном PHP. – skribe

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