Значения многомерного массива не вставляются через цикл PDO - PullRequest
0 голосов
/ 09 июля 2019

У меня есть динамическая HTML-форма с тремя полями (элемент, номер, стоимость).Пользователи могут добавлять столько строк, сколько им нужно.Из-за этого я установил имена полей как item [], number [], cost [], чтобы перебрать пост и вставить значения в БД.

Я проверил, что значенияправильно отправил правильно через vardump, и я проверил, что следующий цикл выбирает значения (и ключ и значение) через printr.(а также просто повторяя $ value1).

foreach ($_POST as $field => $value) {
         foreach($value as $field1 => $value1){   
                 echo $field . ':' . $value1 . '</br>' ;
          }
};

Однако, если я пытаюсь вставить вставку, передавая значения для выполнения, ничего не происходит (данные не вставляются, и я не получаю сообщение об ошибке).

if($_POST['submit']){

try {

            $pdo->beginTransaction();  
            $stmt = $pdo->prepare('INSERT INTO invoice (item, number, cost) VALUES (?,?,?);'); 
            foreach ($_POST as $item => $value) {
                foreach($value as $item1 => $value1){ 
                $stmt->execute($value1);
                }
            }
            $pdo->commit();
    } 
    catch (Exception $e){
    $pdo->rollback();
    throw $e;
    }
}

Я знаю, что $ value1содержит правильные значения, но они не вставляются.Кто-нибудь может помочь?

Я пытался:

https://phpdelusions.net/pdo_examples/insert#multiple
оператор вставки PDO с циклом через массив $ _POST
массив вставки PDOзначения Вставить несколько строк, используя форму и PDO
Нужно php pdo развернуть массивы и вставить несколько строк в MySQL

1 Ответ

0 голосов
/ 09 июля 2019

$value1 содержит одиночное значение , и вам необходимо массив из трех для оператора вставки, каждый из другого элемента .

Поскольку ваш массив $ _POST содержит столбцы , вам необходимо получить значения из соответствующих ячеек, т.е. для первой строки вам нужны элементы [0], число [0] и ячейка [0] и т. Д. , Так итерируйте по первому столбцу, получите индекс и используйте этот индекс для двух других

        foreach ($_POST['item'] as $i => $item) {
            $stmt->execute([$item, $_POST['number'][$i], $_POST['cost'][$i]]);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...