Codeigniter вставить несколько строк в SQL
Я новичок в 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 ответов
Сделайте свою форму так:
<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);
}
множественная вставка / пакетная вставка теперь поддерживается 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);
форма, которую вы показываете, создаст массив $_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];
}