购物车:需要输出订购商品

问题描述

| 索引页面的另一页显示了Pizzashop的目录。每个披萨都是将ID传递到此页面的超链接。 我的问题的核心在于以foreach循环开头的代码。我只想根据手头的SELECT查询数据库中读出。 我知道将查询放入循环很奇怪,但是目前这是我弄清楚如何循环遍历SESSION数组中所有id的唯一方法。 我尝试了很多事情来输出查询应该提供的返回值,我在弄乱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>
    

解决方法

您将需要使用循环,但无需为每次迭代都运行查询。您可以使用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,-2); //Get rid of the trailing comma and space
$query .= \')\';
您可以运行查询。 我建议您使用准备好的语句,尽管我不确定如何将它们用于in语句。