Как получить несколько вариантов массива для обработки в цикле (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 шт):

Автор решения: teran

следует использовать индекс в именах инпутов.

<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 инъекций.

→ Ссылка
Автор решения: DESTEQ

Сделал, как написал в ответе 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 и добавление в базу.

→ Ссылка