#php #shopping-cart
#php #корзина покупок
Вопрос:
Другая страница, которая является индексной, показывает каталог пиццерии. Каждая пицца представляет собой гиперссылку, которая передает идентификатор на эту страницу. Суть моего вопроса заключается в коде, который начинается с цикла foreach. Я хотел бы просто прочитать данные из базы данных на основе имеющегося запроса SELECT. Я знаю, что странно помещать запрос В цикл, но на данный момент это единственный способ, которым я понял, как перебирать все идентификаторы, которые есть в массиве СЕАНСА. Я перепробовал множество способов вывода возврата, который должен выдавать запрос, я возился с mysqli_stmt, и все это выдавало мне многочисленные типы ошибок.
<?php
session_start();
require 'pizza_sc_fns.php';
require 'header.php';
@$pizzaId = $_GET['pizza_id'];
if (!isset($_SESSION['order']))
{
$_SESSION['order'] = array();
$_SESSION['items'] = 0;
$_SESSION['totalprice'] = 0.00;
}
if (isset ($_SESSION['order'][$pizzaId]))
{
echo $_SESSION['order'][$pizzaId] ;
echo "$_SESSION['order'][$pizzaId] is SET n";
}
else
{
echo $_SESSION['order'][$pizzaId] = 1;
}
$conn = connect2db();
foreach ($_SESSION['order'] as $pizzaItem)
{
$query = "SELECT pizza_name FROM pizzas WHERE pizza_id = $pizzaItem";
$res = @$conn->query($query);
echo $res->fetch_assoc();
echo "<hr />";
//$query = mysqli_prepare($conn, "SELECT * FROM pizzas WHERE pizza_id=$pizzaItem");
//echo var_dump($query)."<br />";
//$stmt_exec = mysqli_stmt_fetch($query);
//print $pizzaItem."<br />";
}
?>
<a href="logout.php"> Destroy session >> </a>
Ответ №1:
Вам нужно будет использовать цикл, но вам не нужно запускать запрос для каждой итерации. Вы можете использовать предложение in.
Ваш код будет выглядеть примерно так
$query = 'Select pizza_name from pizzas where id in (';
foreach($_SESSION['order'] as $pizza_id) {
$query.= mysql_real_escape_string($pizza_id).', ';
}
$query= substr($query, 0, -2); //Get rid of the trailing comma and space
$query .= ')';
И вы можете запустить запрос.
Я бы рекомендовал вам использовать подготовленные инструкции, хотя я не уверен, как использовать их для инструкции in.
Комментарии:
1. выглядит интересно. Мне никогда не приходило в голову, что вы могли бы использовать цикл таким образом. Результат запроса пока не печатается, но это, вероятно, связано с инструкцией, которая нуждается в некоторой дополнительной настройке, как вы упомянули
2. Ради завершения:
$query= substr($query, 0, -2);
получилось, так как нам нужно пропустить скобку в конце.3. На самом деле это было пространство, о котором я забыл, что использовал их. Я обновлю свой код.