Ошибка при вводе массива данных в БД
Вот форма ввода данных.
<tr>
<th> Артикул</th><th> Наименование</th><th> Количество</th><th> Ед. измерения</th><th> Стоимость</th><th> Сумма</th></tr>
<?$a=2; For ($i=1; $i<$a; $i++){?>
<tr>
<th><input type="text" name="items[<?= $i; ?>][code]" value="" class="form-control" placeholder="Артикул"></th>
<th><input type="text" name="items[<?= $i; ?>][name]" value="" class="form-control" placeholder="Наименование"></th>
<th><input type="text" name="items[<?= $i; ?>][quantity]" value="" id="quantity" class="form-control" placeholder="Количество"></th>
<th><input type="text" name="items[<?= $i; ?>][unit]" value="" class="form-control" placeholder="Ед. измерения"></th>
<th><input type="text" name="items[<?= $i; ?>][cost]" id="cost" class="form-control" placeholder="Стоимость"></th>
<th><input type="text" name="items[<?= $i; ?>][sum]" id="sum" value="" class="form-control" placeholder="Сумма"></th>
</tr>
<? }?>
Вот здесь данные обрабатываются и вносятся в базу данных.
if (isset($_POST['items'])){
foreach ($_POST['items'] as $item) {
$code = trim($item['code']);
$name = trim($item['name']);
$quantity = trim($item['quantity']);
$unit = trim($item['unit']);
$cost = trim($item['cost']);
$sum = trim($item['sum']);
$insert_query = "INSERT INTO stok_product (code, quantity, name, unit, cost, sum, date ) VALUES ('$code','$quantity','$name','$unit','$cost','$sum',NOW())";
$result_insert = mysqli_query($link, $insert_query);
}
}
?>
В итоге почему в базу вводятся только первый и последний элементы массива. А так же есть вот такая ошибка You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1' at line 1 Может кто-то сталкивался и знает в чем проблема.
Ответы (1 шт):
Вообще не рекомендуется использовать короткие теги <? ... ?>, у меня они даже отключены по умолчанию, из-за этого слегка изменил Ваш код:
<?php $a = 3; for ($i = 1; $i < $a; $i++) : ?>
<tr>
<th><input type="text" name="items[<?= $i ?>][code]" value="" class="form-control" placeholder="Артикул"></th>
<th><input type="text" name="items[<?= $i ?>][name]" value="" class="form-control" placeholder="Наименование"></th>
<th><input type="text" name="items[<?= $i ?>][quantity]" value="" id="quantity" class="form-control" placeholder="Количество"></th>
<th><input type="text" name="items[<?= $i ?>][unit]" value="" class="form-control" placeholder="Ед. измерения"></th>
<th><input type="text" name="items[<?= $i ?>][cost]" id="cost" class="form-control" placeholder="Стоимость"></th>
<th><input type="text" name="items[<?= $i ?>][sum]" id="sum" value="" class="form-control" placeholder="Сумма"></th>
</tr>
<?php endfor; ?>
После запуска с вводом рандомных значений вывел сгенерированные запросы:
INSERT INTO `stok_product` (`code`, `quantity`, `name`, `unit`, `cost`, `sum`, `date`) VALUES ('4567','5678','45678','4567','4567','4567',NOW())
INSERT INTO `stok_product` (`code`, `quantity`, `name`, `unit`, `cost`, `sum`, `date`) VALUES ('4567','567','4567','4567','567','5678',NOW())
Как я понимаю, эти SQL запросы должны быть корректны (но по факту не проверял).
Также советую не использовать прямой ввод от пользователя при добавлении данных в БД, для этого есть mysqli_prepare(...), потому что при вводе строки, например, с символом ' весь запрос сломается