Вставка нескольких строк в базу данных на codeigniter
Возможный дубликат:
вставьте несколько строк через массив PHP в MySQL
я пытаюсь вставить только заполненные данные в базу данных. мой контроллер
$code=$_POST['code'];
$rate=$_POST['rate'];
$quantity=$_POST['quantity'];
//$total=$_POST['rate']*$_POST['quantity'];
$count = count($_POST['code']);
for($i=0; $i<$count; $i++) {
$data = array(
'shop'=>$shop->$this->input->post('shop'),
'code' => $code[$i],
'rate' => $rate[$i],
'quantity' => $quantity[$i],
'total' =>($rate[$i]*$quantity[$i])
);
$this->load->model('buy_product_model');
$this->buy_product_model->add_product($data);
У меня есть выпадающий список для выбора магазина, и для этого магазина я создал 15 полей ввода. Поля указаны выше. Проблема в том, что если я заполняю только одно или два значения, это создает 15 строк в базе данных и 15 повторений времени название магазина. Кто-нибудь может решить эту проблему.
3 ответа
Наконец -то я это исправлю. вот мой взгляд
<?php for($i = 1; $i <=10; $i++):?>
<tr>
<td>
<?php echo $i;?>
</td>
<td>
<input type="text" name="code[]" value="<?php echo '';?>" id="code" />
</td>
<td>
<input type="text" name="rate[]" value="<?php echo '';?>" id="rate" />
</td>
<td>
<input type="text" name="quantity[]" value="<?php echo '';?>" id="quantity" />
</td>
</tr>
<?php endfor;?>
вот мой контроллер
if (empty($_POST))
{
$this->index();
}
else
{
//insert to database
$this->load->model('buy_product_model');
$data= $this->buy_product_model->add_product();
//echo "success";
$this->index();
}
модель //
$data = array();
$todayDate = date('Y-m-d');
for($i = 0; $i < count($_POST['code']); $i++)
{
if($_POST['code'][$i] != '')
{
$data[] = array(
'code' => $_POST['code'][$i],
'shop' => $_POST['shop'],
'rate' => $_POST['rate'][$i],
'quantity' => $_POST['quantity'][$i],
'total' =>( $_POST['rate'][$i]*$_POST['quantity'][$i]),
'date' => $todayDate
);
}
}
$dataCount = count($data);
if($dataCount)
{
$this->db->insert_batch('purchase', $data);
}
return $dataCount;
Вместо манипулирования $_POST в контроллере манипулируйте им в модели, подобной этой
Ваш контроллер
$this->load->model('buy_product_model');
$this->buy_product_model->add_product($this->input->post());
РЕДАКТИРОВАТЬ
Убедитесь, что поля формы в форме HTML находятся в виде массива, как это
<input type="text" name="code[]" />
Ваша модель
public function buy_product_model($postdata){
extract($postdata);
$count = count($code);
for($i=0; $i<$count; $i++) {
$data = array(
'shop'=>$shop,
'code' => $code[$i],
'rate' => $rate[$i],
'quantity' => $quantity[$i],
'total' =>($rate[$i]*$quantity[$i])
);
$this->db->insert('[YOUR TABLE]', $data);
}
}
УБЕДИТЕСЬ, ЧТОБЫ ИЗМЕНИТЬ [ВАШ СТОЛ] ВАШИМ
добавить остаток кода в методе add_product
вашей модели и повторять цикл, как вы сделали в вашем контроллере.
Редактировать:
пожалуйста, проверьте 'shop'=>$shop->$this->input->post('shop')
участие в вашей петле
Исходя из этой части вашего вопроса:
У меня есть выпадающий список для выбора магазина, и для этого магазина я создал 15 полей ввода. Поля указаны выше. Проблема в том, что если я заполняю только одно или два значения, это создает 15 строк в базе данных и 15 повторений времени название магазина. Кто-нибудь может решить эту проблему.
Похоже, что проблема проектирования базы данных больше, чем ошибка в вашем коде. Если в вашей таблице есть столбец с названием " Название магазина", и вы вставляете в него данные, вы повторите это пятнадцать раз.
Я бы предложил разбить таблицу на и связать их через соединение следующим образом:
Table Shops:
ID
Name
Table Products:
ID
shopID // This links to the first table on shopID=ID
... and so on for your *product* information