У меня есть html-форма с динамическим (определяемым пользователем) количеством строк, каждый с несколькими входами; Я пытаюсь выполнить запрос MySQL, который будет вставлять строки в таблицу db, более или менее row-for-row (хотя из-за пределов этой таблицы есть значение $ _POSTing, которое я также добавлю в INSERT).
Я извлекаю эти значения следующим образом:
<?php if (isset($_POST['submit'])) { $lineItems = array(); foreach ($_POST['date'] as $i => $value) { $customer = $_POST['customer'][$i]; // this value is from *outside* the line items table $date = $_POST['date'][$i]; $time = $_POST['time'][$i]; $fee = $_POST['fee'][$i]; $lineItems[] = "('$customer', '$date', '$time', '$fee')"; // I realize the query should be outside the loop, but what I'm trying to do is something like this (pseudo-code): $query = "INSERT INTO Line_Items (CUSTOMER, DATE, TIME, FEE) VALUES ". implode(", ", $lineItems) . "ON DUPLICATE KEY UPDATE CUSTOMER = VALUES(CUSTOMER), DATE = VALUES(DATE), TIME = VALUES(TIME), FEE = VALUES(FEE) "; } } ?>
С этим запросом – внутри или снаружи цикла – я только вставляю значения из последней строки входов; может ли кто-нибудь объяснить, как построить запрос для вставки нескольких позиций и соответствующего запроса? Огромное спасибо.
Внутри цикла вы получите строку для каждой строки в столбце – вне цикла вы будете вставлять только последнюю строку.
Если вам просто нужна последняя строка – тогда нет необходимости перебирать весь набор, чтобы добраться до него.
Вы можете считать строки – и затем нацелиться на последнюю строку напрямую – см. Php
count()
Изменить строку
$lineItems[] = "('$customer', '$date', '$time', '$fee')";
в
$lineItems[] = "(".$customer.",".$date.",".$time.",".$fee.")";