PHP SESSION HTML表携带问题

时间:2012-11-08 02:01:37

标签: php

我使用URL中的add将项目添加到cart.php。

    case "add":
if (isset($_SESSION['cart'][$comic_id])) {
$_SESSION['cart'][$comic_id]++;
} else {
$_SESSION['cart'][$comic_id] = 1;}

...我的项目显示在cart.php的HTML表格中。我只想在checkout.php中重新调用数组中的特定变量,以便客户确认订单总数及其个人详细信息。

当我使用以下内容时,我似乎只能使用SESSION变量携带最后添加的项目/行:

$_SESSION['totalnameqty']=$name . " " . $qty . " " . $cost;

...然后在checkout.php页面上使用echo:

$totnamqty=$_SESSION['totnamqty'];
echo $totnamqty;

...我想携带所有物品$ name,$ qty&将$ cost添加到cart.php中的HTML表格中,而不仅仅是1个项目/行。不确定如何执行此操作或是否可行。有人可以帮忙吗?

这是我的cart.php:

if (isset($_SESSION['cart'][$comic_id])){

    echo "<table border=\"0\" padding=\"10\" width=\"80%\">";
    echo "<td colspan=\"1\" align=\"left\"><a href=\"title.php\">Continue Shopping</a></div>";
    echo "<td colspan=\"6\" align=\"right\"><a href=\"$_SERVER[PHP_SELF]?action=empty\" onclick=\"return confirm('Crystal Fusion: Are you sure you wish to empty your cart?');\">Empty Cart</a></td>";                  
    echo "<tr height=\"20px\">";
    echo "<tr height=\"20px\">"; 
    echo "<td align=center>Image</td><td align=center>Title</td><td align=center>Description</td><td colspan=3 align=center>Copies (+/-)</td><td align=center>Price</td>";
    echo "<tr height=\"20px\">";


    foreach($_SESSION['cart'] as $comic_id => $qty) {   

        $sql = sprintf("SELECT title, description, cost, image_thumbnail
                FROM comic 
                WHERE comic_id = %d;",$comic_id); 

        $result = mysql_query($sql);

        if(mysql_num_rows($result) > 0) {

            list($name, $description, $price, $image_thumbnail) = mysql_fetch_row($result);


            $cost = $price * $qty; 
            $total = $total + $cost; 

            $cost = number_format($cost,2); 
            $total = number_format($total,2); 
            $description =  substr($description, 0, 250); 

            echo "<br><tr>";
            echo "<td width=\"10px\" align=\"center\"><img height=100 align=center src=\"$image_thumbnail\">";
            echo "<td align=\"center\">$name</td>";
            echo "<td width=\"40%\" align=\"center\">$description...<a href=comic_dyn.php?comic_id=$comic_id>More Info</td>";
            echo "<td width=\"30px\" align=\"center\"><a href=\"$_SERVER[PHP_SELF]?action=add&comic_id=$comic_id\">+<br></a><td align=\"center\">$qty <td width=\"20px\" align=\"center\"><a href=\"$_SERVER[PHP_SELF]?action=remove&comic_id=$comic_id\">-</a></td>";
            echo "<td align=\"right\">$$cost</td>";
            echo "</tr>";           
        }

    }

    echo "<br><tr><tr height=100px>";
    echo "<td><td><td colspan=\"4\" align=\"right\">Total:</td>";
    echo "<td width=\"60px\" align=\"right\">$$total</td>"; 
    echo "<tr><td colspan=\"7\" align=\"right\"><a href=\"checkout_html.php\">Proceed to Checkout</a>"; 
    echo "<tr height=\"50px\">";
    echo "</table>";
}else{

    echo "Your cart is currently empty."; 
    echo "<br><br><td colspan=\"1\" align=\"left\"><a href=\"title.php\">Continue Shopping</a></div>"; 

}

//session variables (to be carried to checkout.php
$_SESSION['cost']=$cost;
$_SESSION['name']=$name;
$_SESSION['qty']=$qty;
$_SESSION['totnamqty']=$name . " " . $qty . " " . $cost;

1 个答案:

答案 0 :(得分:0)

您在循环中设置$ name,$ qty和$ cost值,因此您正在访问循环下方/外部的最后设置值。此外,您在开头使用$ comic_id,但下面在foreach语句中使用相同的变量。我猜你可以删除foreach而是使用:$ qty = $ _SESSION ['cart'] [$ comic_id]?

否则,假设顶部的isset()不正确,并且您试图从购物车中循环每个$ comic_id;然后你想索引每个$ comic_id的'cost','name','qty'和'tonamqty'值。例如。在你的foreach循环中使用这样的东西:$ _SESSION ['漫画'] [$ comic_id] ['cost'] = $ cost;

但是,我认为不使用会话变量的结账方法更合适。我会将用户当前看到的内容发布到checkout.php,而不是使用会话数据。假设从多个选项卡访问会话,并且用户在过时的选项卡上单击结帐。如果使用会话变量,服务器只知道用户请求签出会话中的最新项目,而不是主动可见的项目。