корзина покупок: необходимо вывести заказанные товары

#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. На самом деле это было пространство, о котором я забыл, что использовал их. Я обновлю свой код.