Codeigniter Вставить несколько строк в SQL - PullRequest
8 голосов
/ 03 октября 2010

Я новичок в Codeigniter.У меня есть форма, которая выглядит примерно так.

<tr>
<td><input type="text" name="Name[0]" value=""></td>
<td><input type="text" name="Address[0]"  value=""><br></td>
<td><input type="text" name="Age[0]" value=""></td>
<td><input type="text" name="Email[0]" value=""></td>
</tr>



<tr>
<td><input type="text" name="Name[1]" value=""></td>
<td><input type="text" name="Address[1]"  value=""><br></td>
<td><input type="text" name="Age[1]" value=""></td>
<td><input type="text" name="Email[1]" value=""></td>
</tr>

Может быть от 0 до n строк, обычно от 5 до 10 строк.Как мне вставить их в SQL?Это возможно с Codeigniter или я должен использовать собственный скрипт PHP?


$name=$_POST['Name'];
$address=$_POST['Address'];
$age=$_POST['Age'];
$email=$_POST['Email'];
$count = count($_POST['Name']);



for($i=0; $i<$count; $i++) {
$data = array(
           'name' => $name[$i], 
           'address' => $address[$i],
           'age' => $age[$i],
           'email' => $email[$i],

           );


  $this->db->insert('mytable', $data);
}

Я сделал это.Оно работает.Но решение кажется не элегантным.

Ответ kevtrout выглядит лучше, но в настоящее время выдает много ошибок.

Есть ли способ вставить все данные за один раз?

Ответы [ 3 ]

23 голосов
/ 15 января 2013

Множественная вставка / пакетная вставка теперь поддерживаются codeigniter. Он будет запускать один запрос, а не слишком много запросов.

$data =array();
for($i=0; $i<$count; $i++) {
$data[$i] = array(
           'name' => $name[$i], 
           'address' => $address[$i],
           'age' => $age[$i],
           'email' => $email[$i],

           );
}

$this->db->insert_batch('mytable', $data);
8 голосов
/ 03 октября 2010

Сделайте вашу форму такой:

<tr>
    <td><input type="text" name="user[0][name]" value=""></td>
    <td><input type="text" name="user[0][address]" value=""><br></td>
    <td><input type="text" name="user[0][age]" value=""></td>
    <td><input type="text" name="user[0][email]" value=""></td>
</tr>
<tr>
    <td><input type="text" name="user[1][name]" value=""></td>
    <td><input type="text" name="user[1][address]" value=""><br></td>
    <td><input type="text" name="user[1][age]" value=""></td>
    <td><input type="text" name="user[1][email]" value=""></td>
</tr>

Тогда вы можете просто сделать:

foreach($_POST['user'] as $user)
{
    $this->db->insert('mytable', $user);
}
2 голосов
/ 03 октября 2010

Форма, которую вы покажете, создаст массив $ _POST с индексами имени, адреса, возраста и адреса электронной почты. Каждый из них будет содержать n строк, которые предоставляет ваша форма. Например:

array(
    'name' => array('First Name','Second Name'),
    'address' => array ('First Address','Second Address'),
    'age' => array('First Age','Second Age'),
    'email' => array('First Email', 'Second Email')
    );

Возможно, вы захотите переставить этот массив в один, где каждый индекс массива - это «персона». Это упростит вставку информации в вашу базу данных.

//subtract 1 from below to account for the assumed submit button
$number_of_rows = count($_POST)-1;

for($i=0;$i<$number_of_rows;$i++){
    $person[]['name'] = $this->input->post('Name')[$i];
    $person[]['address'] = $this->input->post('Address')[$i];
    $person[]['age'] = $this->input->post('Age')[$i];
    $person[]['email'] = $this->input->post('Email')[$i];
    }

Это создаст что-то вроде этого:

array(
    0=>array('First Name','First Address','First Age','First Email'),
    1=>array ('Second Name','Second Address','Second Age','Second Email') 
    );

Теперь вы можете использовать цикл для вставки каждого человека в БД.

for($y=0;$y<count($person);$y++){
    $this->db->insert('mytable',$person[$y];
}
...