Как получить несколько вариантов массива для обработки в цикле (php, html)?
Есть код, примерно такой:
<form action="" method="post">
Артикул 1:
<input type="text" value="" name="skus[][name]"><br>
<input type="text" value="" name="skus[][code]"><br>
Артикул 2:
<input type="text" value="" name="skus[][name]"><br>
<input type="text" value="" name="skus[][code]"><br>
Артикул 3 и так далее:
<button type="submit" name="submit">Отправить</button>
</form>
Нужно получить из этой формы значения в PHP для обработки в цикле с последующим добавлением в базу данных, чтобы результат был примерно таким:
skus 1 = name, code
skus 2 = name, code
skus 3 = name, code
Как получить данные именно всех массивов skus со значениями, чтобы в цикле получилось примерно так:
foreach ($_POST['skus'] as $key => $sku) {
$sku_name = $sku['name'];
$sku_code = $sku['code'];
$values[] = '("'.$sku_name.'", "'.$sku_code.'")';
}
$sql = 'insert into bla bla values'.$values';
А то на данный момент получается только последний массив, либо все значения получаются в одном массиве skus, а нужно принимать все массивы skus, каждый уникальный со своими значениями.
Ответы (2 шт):
следует использовать индекс в именах инпутов.
<input name="sku[0][name]"/>
<input name="sku[0][code]"/>
<input name="sku[1][name]"/>
<input name="sku[1][code]"/>
тогда в $_POST получите нормальный массив
[
['name' => ..., 'code' => ....],
['name' => ..., 'code' => ....],
]
далее можно формировать SQL запрос на вставку. Однако, метод подстановки, который вы используете - не безопасен. Следует параметризовать запрос и использовать подготовленные выражения для избежания SQL инъекций.
Сделал, как написал в ответе teran + добавил динамическое добавление индекса по нажатию кнопки.
Что-то вроде этого:
<script>
var counter = 1;
$('.sku-add').click(function(e) {
counter++;
$('.sku').append('<input name="sku['+ counter +'][name]"/><input name="sku['+ counter +'][code]"/>');
}
</script>
А дальше уже обработка foreach и добавление в базу.