Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示订单的PHP购物车_Php_Mysql_Multidimensional Array_Pdo_Shop - Fatal编程技术网

显示订单的PHP购物车

显示订单的PHP购物车,php,mysql,multidimensional-array,pdo,shop,Php,Mysql,Multidimensional Array,Pdo,Shop,Hy 我正在创建一个PHP商店用于培训目的。我希望用户能够查看他最近下的订单,但我很难意识到这一点 我的数据库中有以下表: 客户(孩子、姓名、地址等) 产品(pid、产品名称、产品描述、价格) 订单-->oid、kid、付款、地址、状态 订单详细信息-->oid、日期、pid、数量) 好的,我已经创建了一个函数,查询从数据库中获取所需的数据 function showOrder($kid) { $db = database(); $orders = $db->query ("SELECT

Hy

我正在创建一个PHP商店用于培训目的。我希望用户能够查看他最近下的订单,但我很难意识到这一点

我的数据库中有以下表:

客户(孩子、姓名、地址等)
产品(pid、产品名称、产品描述、价格)
订单-->oid、kid、付款、地址、状态
订单详细信息-->oid、日期、pid、数量)

好的,我已经创建了一个函数,查询从数据库中获取所需的数据

function showOrder($kid)
{
$db = database();
$orders = $db->query ("SELECT * FROM orders
    INNER JOIN order_detail on orders.oid=order_detail.oid
    INNER JOIN products on order_detail.pid = products.pid
    WHERE kid='$kid' ");

$orders = $orders->fetchAll();

$lastoid = 0;
foreach($orders as $i){

    while($lastoid != $i['oid']) {
        $lastoid = $i['oid'];
        echo "Ordernr: ".$lastoid."<br/>";
        echo "Produktname: ".$i['product_name']."<br>";
        echo "Menge: ".$i['quantity']."<br/>";
        echo "Preis: ".$i['price']."<br/>";
        echo "Status: ".$i['status']."<br/>";
        echo "<br/><br/><hr/>";    
    }
}
}

问题是您没有从产品表中进行选择。您的select查询只是
orders.*
,它只不过是
orders表
下的所有列。解决方案是将products列添加到select查询中。我不太清楚为什么要显式使用内部联接,我的是这样的:

Array
(
[0] => Array
    (
        [oid] => 1
        [0] => 1
        [kid] => 1
        [1] => 1
        [2] => 1
        [date] => 2012-04-17
        [3] => 2012-04-17
        [pid] => 1
        [4] => 1
        [quantity] => 2
        [5] => 2
        [payment] => Nachnahme
        [6] => Nachnahme
        [street] => teststraße
        [7] => teststraße
        [number] => 2
        [8] => 2
        [zip] => 2222
        [9] => 2222
        [city] => Teststadt
        [10] => Teststadt
        [status] => in Bearbeitung
        [11] => in Bearbeitung
        [12] => 1
        [product_name] => Acer Laptop
        [13] => Acer Laptop
        [price] => 29.00
        [14] => 29.00
        [details] => blabla
        [15] => blabla
        [category] => Laptop
        [16] => Laptop
        [date_added] => 2012-04-05
        [17] => 2012-04-05
    )

[1] => Array
    (
        [oid] => 1
        [0] => 1
        [kid] => 1
        [1] => 1
        [2] => 1
        [date] => 2012-04-17
        [3] => 2012-04-17
        [pid] => 2
        [4] => 2
        [quantity] => 2
        [5] => 2
        [payment] => Nachnahme
        [6] => Nachnahme
        [street] => teststraße
        [7] => teststraße
        [number] => 2
        [8] => 2
        [zip] => 2222
        [9] => 2222
        [city] => Teststadt
        [10] => Teststadt
        [status] => in Bearbeitung
        [11] => in Bearbeitung
        [12] => 2
        [product_name] => Grundig TV
        [13] => Grundig TV
        [price] => 22.00
        [14] => 22.00
        [details] => blabla

        [15] => blabla
        [category] => TV
        [16] => TV
        [date_added] => 2012-04-05
        [17] => 2012-04-05
    )

[2] => Array
    (
        [oid] => 1
        [0] => 1
        [kid] => 1
        [1] => 1
        [2] => 1
        [date] => 2012-04-17
        [3] => 2012-04-17
        [pid] => 7
        [4] => 7
        [quantity] => 1
        [5] => 1
        [payment] => Nachnahme
        [6] => Nachnahme
        [street] => teststraße
        [7] => teststraße
        [number] => 2
        [8] => 2
        [zip] => 2222
        [9] => 2222
        [city] => Teststadt
        [10] => Teststadt
        [status] => in Bearbeitung
        [11] => in Bearbeitung
        [12] => 7
        [product_name] => Nokia Handy
        [13] => Nokia Handy
        [price] => 69.00
        [14] => 69.00
        [details] => blabla
        [15] => blabla
        [category] => Handy
        [16] => Handy
        [date_added] => 2012-04-06
        [17] => 2012-04-06
    )

[3] => Array
    (
        [oid] => 2
        [0] => 2
        [kid] => 1
        [1] => 1
        [2] => 2
        [date] => 2012-04-17
        [3] => 2012-04-17
        [pid] => 8
        [4] => 8
        [quantity] => 1
        [5] => 1
        [payment] => Vorauskasse
        [6] => Vorauskasse
        [street] => musterstraße
        [7] => musterstraße
        [number] => 1
        [8] => 1
        [zip] => 1111
        [9] => 1111
        [city] => stadt
        [10] => stadt
        [status] => in Bearbeitung
        [11] => in Bearbeitung
        [12] => 8
        [product_name] => PC groß
        [13] => PC groß
        [price] => 66.00
        [14] => 66.00
        [details] => blabla
        [15] => blabla
        [category] => Computer
        [16] => Computer
        [date_added] => 2012-04-06
        [17] => 2012-04-06
    )
)  
select orders.*, products.* from orders,order_detail,products where 
orders.oid=order_detail.oid and order_detail.pid=products.pid and orders.kid=1
以下是我得到的结果:

| oid | kid | pid | product_name |
|  1  |  1  |  1  | camera       |
|  1  |  1  |  2  | pants        |

您的代码进入while循环

$lastoid = 0;
它将运行第一个while循环,因为$lastoid不等于$i['oid']。一个是零,另一个是一。在下一行中,将$i['oid']的值指定给$lastoid。这使它们相等,while循环将停止。如果循环不中断,您将有一个无休止的相同信息行。在while循环中,没有对下一个订单的引用

像这样改变它

$lastoid = 1;
foreach($orders as $key => $value){

    if($lastoid == $value[$key]['oid']) {
        echo "Ordernr: ".$lastoid."<br/>";
        echo "Produktname: ".$i['product_name']."<br>";
        echo "Menge: ".$i['quantity']."<br/>";
        echo "Preis: ".$i['price']."<br/>";
        echo "Status: ".$i['status']."<br/>";
        echo "<br/><br/><hr/>";    
    } else {
        $lastoid = $value[$key+1]['oid'];
    }
}
$lastoid=1;
foreach($key=>$value的订单){
如果($lastoid==$value[$key]['oid']){
echo“Ordernr:.$lastoid.”
; echo“Produktname:”.$i['product_name'].“
”; echo“Menge:.$i['quantity']。”
; echo“Preis:”.$i[“价格]”
; 回显“状态:.”i['Status']。“
”; 回声“


”; }否则{ $lastoid=$value[$key+1]['oid']; } }
只需注意:使用
fetchAll(PDO::FETCH_ASSOC)相反,如果您只使用关联键,它将节省内存和迭代速度。我尝试了您的语句,但出现了一个db错误。从products表中,我得到了足够的信息,我想我想创建一个具有以下结构的表:orderid | product name | quantity | price | status如果订单只包含一种产品(在我的例子中是oid 1),那么创建表没有问题-但是oid2包含3种产品,首先我只在其中获得1种产品,因为我从未尝试过数据查询,所以有一些拼写错误现在已经修复。另一件事是
订单
表格
order
是mysql中的保留字。我把它改成了订单。我试着对你上面发布的结构进行了查询,结果返回了编辑后的答案中提到的两行。