Получение конкретных значений флажков из формы [дубликат]

  1. Всегда пытайтесь отправлять заголовки в почтовую функцию.
  2. Если вы отправляете почту через localhost, тогда выполните настройки smtp для отправки почты.
  3. Если вы отправляете почту через затем проверьте, включена ли функция отправки электронной почты на вашем сервере.
0
задан Fabian H. 8 March 2016 в 02:25
поделиться

1 ответ

Вы не должны использовать implode. Это помещает разделенный запятыми список всего в форме в каждую строку, которую вы вставляете, и повторяет это для каждого проверенного окна. Вы должны просто вставить один элемент в каждую строку, индексируя массивы.

Однако, если у вас есть флажок в форме, он отправляет только те, которые отмечены. Результатом этого является то, что индексы массива $_POST['checkbox'] не будут совпадать с соответствующими элементами $_POST['item'] и $_POST['quantity']. Вам нужно поместить явные индексы в имена checkbox, чтобы вы могли связать их.

<form method = "POST">

<input type = "hidden" name = "item[]" value = "cupcake">
<input type = "text" name = "items" value = "cupcake" readonly><br>
<b>Price :</b> <span name = "price" value = "3.00">$17.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[0]" type="checkbox" value="17" /><span>Add to Cart</span></label></div></div></td><br>

<input type = "hidden" name = "item[]" value = "cake">
<input type = "text" name = "items" value = "cake" readonly><br>
<b>Price :</b> <span name = "price" value = "20.00">$20.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[1]" type="checkbox" value="20" /><span>Add to Cart</span></label></div></div></td><br>

<input type = "submit" name = "insertBT"><br>
</form>

Тогда ваш PHP-код может быть таким:

$stmt = $conn->prepare("INSERT INTO purchases (Product, Quantity, Price) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $name, $quantity, $price);
foreach ($_POST['checkbox'] as $i => $price) {
    $name = $_POST['name'][$i];
    $quantity = $_POST['quantity'][$i];
    $stmt->execute();
}

BTW, цены в вашем HTML кажутся плохой идеей. Ничто не мешает пользователю изменять HTML с помощью веб-инспектора перед отправкой формы, чтобы они могли снизить цену. Вы должны получить цены из базы данных при обработке формы.

Также обратите внимание, что в исходном коде вы открыли соединение с базой данных с помощью MySQLi, но затем вы попытались сделать вставку, используя mysql_query вместо $conn->query(). Вы не можете смешивать такие API; myql_query может использоваться только при открытии соединения с mysql_connect.

2
ответ дан Barmar 22 August 2018 в 20:57
поделиться
  • 1
    и проблема с их первоначальным запросом была? о, да, я упомянул об этом, но мне сказали, что это не вопрос, связанный с MySQL API. поэтому я удалил свой комментарий об этом. – Funk Forty Niner 8 March 2016 в 02:04
  • 2
    Ahhh, я вижу, вот в чем проблема. Похоже, Фред был прав. Сейчас он работает, спасибо. Кроме того, я не знаю, что такое prepare (), но я предполагаю, что это просто готовый запрос при отправке формы. Но могу ли я спросить, что такое «sis»? для? – Raios 8 March 2016 в 02:15
Другие вопросы по тегам:

Похожие вопросы: