2015-11-05 41 views
-1

我有一個購物車,其中顯示訂單,我正在使用會話來存儲購物車內容。現在我想要做的是在按結賬按鈕時將購物車內容插入到數據庫中。但每次任何用戶只檢出正在插入數據庫的「數組」字樣。我曾嘗試 -當試圖保存php購物車會話內容時,僅插入「數組」字,無法檢索購物車的內容

$sqlimp = implode(",", $_SESSION["cart"]); 

和n的print_r的$ sqlimp,它顯示數組,數組,ArayArray,數組,數組(如果有2項)。下面是我的代碼 - 的index.php

<?php 
    session_start(); 
    // print_r($_SESSION["user"]); 
    if(! isset($_SESSION["user"])){ 
     header("Location: index.php"); 
    } 
    require("connection.php"); 
    if(isset($_GET['page'])){ 

     $pages=array("products", "cart"); 

     if(in_array($_GET['page'], $pages)) { 

      $_page=$_GET['page']; 

     }else{ 

      $_page="products"; 

     } 

    }else{ 

     $_page="products"; 

    } 

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <!-- <link rel="stylesheet" href="css/reset.css" /> --> 
    <link rel="stylesheet" href="styles.css" /> 


    <title></title> 


</head> 

<body> 
<h1> Welcome to our site! </h1> 
<a href="logout.php" style="float:right">Logout</a> 
<?php 
// Echo session variables that were set on previous page 
     echo "Welcome " . $_SESSION["user"] . ".<br>"; 
     ?> 

    <div id="container"> 

     <div id="main"> 

      <?php require($_page.".php"); ?> 

     </div><!--end of main--> 

     <div id="sidebar"> 
     <h1>Cart</h1> 
<?php 

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

     $sql="SELECT * FROM products WHERE id_product IN ("; 

     foreach($_SESSION['cart'] as $id => $value) { 
      $sql.=$id.","; 
      // $sql1= "INSERT INTO cart (contents) VALUES ('" . $_SESSION["cart"]. "')"; 
     } 

     $sql=substr($sql, 0, -1).") ORDER BY name ASC"; 
     $query=mysql_query($sql); 
     // $query1= mysql_query($sql1); 
     while($row=mysql_fetch_array($query)){ 

     ?> 
      <p><?php echo $row['name'] ?> x <?php echo $_SESSION['cart'][$row['id_product']]['quantity'] ?></p> 
     <?php 

     } 
    ?> 
     <hr /> 
     <a href="home.php?page=cart">Go to cart</a> 
    <?php 

    }else{ 

     echo "<p>Your Cart is empty. Please add some products.</p>"; 

    } 

?> 

     </div><!--end of sidebar--> 

    </div><!--end container--> 

</body> 
</html> 

products.php

<?php 

    if(isset($_GET['action']) && $_GET['action']=="add"){ 

     $id=intval($_GET['id']); 

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

      $_SESSION['cart'][$id]['quantity']++; 

     }else{ 

      $sql_s="SELECT * FROM products 
       WHERE id_product={$id}"; 
      $query_s=mysql_query($sql_s); 
      if(mysql_num_rows($query_s)!=0){ 
       $row_s=mysql_fetch_array($query_s); 

       $_SESSION['cart'][$row_s['id_product']]=array( 
         "quantity" => 1, 
         "price" => $row_s['price'] 
        ); 


      }else{ 

       $message="This product id it's invalid!"; 

      } 

     } 

    } 

?> 
    <h1>Product List</h1> 
    <?php 
     if(isset($message)){ 
      echo "<h2>$message</h2>"; 
     } 
    ?> 
    <table> 
     <tr> 
      <th>Name</th> 
      <th>Price</th> 
      <th>Action</th> 
     </tr> 

     <?php 

      $sql="SELECT * FROM products ORDER BY name ASC"; 
      $query=mysql_query($sql); 

      while ($row=mysql_fetch_array($query)) { 

     ?> 
      <tr> 
       <td><?php echo $row['name'] ?></td> 
       <td><?php echo $row['price'] ?>$</td> 
       <td><a href="home.php?page=products&action=add&id=<?php echo $row['id_product'] ?>">Add to cart</a></td> 
      </tr> 
     <?php 

      } 

     ?> 

    </table> 

cart.php

<?php 

    if(isset($_POST['submit'])){ 

     foreach($_POST['quantity'] as $key => $val) { 
      if($val==0) { 
       unset($_SESSION['cart'][$key]); 
      }else{ 
       $_SESSION['cart'][$key]['quantity']=$val; 
      } 
     } 

    } 

?> 

<h1>View cart</h1> 
<a href="home.php?page=products">Go back to the products page.</a> 
<form method="post" action="home.php?page=cart"> 

    <table> 

     <tr> 
      <th>Name</th> 
      <th>Quantity</th> 
      <th>Price</th> 
      <th>Items Price</th> 
     </tr> 

     <?php 

      $sql="SELECT * FROM products WHERE id_product IN ("; 

        foreach($_SESSION['cart'] as $id => $value) { 
         $sql.=$id.","; 
        } 

        $sql=substr($sql, 0, -1).") ORDER BY name ASC"; 
        $query=mysql_query($sql); 
        $totalprice=0; 
        while($row=mysql_fetch_array($query)){ 
         $subtotal=$_SESSION['cart'][$row['id_product']]['quantity']*$row['price']; 
         $totalprice+=$subtotal; 
        ?> 
         <tr> 
          <td><?php echo $row['name'] ?></td> 
          <td><input type="text" name="quantity[<?php echo $row['id_product'] ?>]" size="5" value="<?php echo $_SESSION['cart'][$row['id_product']]['quantity'] ?>" /></td> 
          <td><?php echo $row['price'] ?>$</td> 
          <td><?php echo $_SESSION['cart'][$row['id_product']]['quantity']*$row['price'] ?>$</td> 
         </tr> 
        <?php 

        } 
     ?> 
        <tr> 
         <td colspan="4">Total Price: <?php echo $totalprice ?></td> 
        </tr> 

    </table> 
    <br /> 
    <button type="submit" name="submit">Update Cart</button> 
    <a href="checkout.php">Checkout</a> 
</form> 
<br /> 
<p>To remove an item set its quantity to 0. </p> 

checkout.php

<?php 
session_start(); 
include("connection.php"); 

$sql="SELECT * FROM products WHERE id_product IN ("; 

     foreach($_SESSION['cart'] as $id => $value) { 
      $sql.=$id.","; 
      $sqlimp = implode(",",$_SESSION['cart']); 
      print_r($sqlimp); 
      $sql1= "INSERT INTO cart (contents) VALUES ('" . $_SESSION["cart"]. "')"; 
     } 

     $sql=substr($sql, 0, -1).") ORDER BY name ASC"; 
     $query=mysql_query($sql); 
     $query1= mysql_query($sql1); 
    // or die("Query to store cart failed"); 
?> 

任何幫助將是讚賞。

+1

代碼有很多錯誤。我強烈建議你學習使用最新手冊的PHP。你正在爲你的mysql查詢使用一個不推薦使用的函數,你不是在逃避數據等等......當你打算用這個代碼啓動一個webshop時,你會遇到很多麻煩,包括失敗的命令,mysql注入等等... – AgeDeO

回答

0

在你的foreach循環中checkout.php你試圖插入$_SESSION['cart']而不是你的計算$sqlimp。因此,您需要將該行更改爲:

$sql1= "INSERT INTO cart (contents) VALUES ('$sqlimp')";