2017-12-20 1 views
2

Ich habe erfolgreich einen Einkaufswagen gebaut und alles funktioniert gut. Hier ist, was ich erreichen will:So arbeiten Sie mit benutzerdefinierten Warenkorb in PHP

  1. , wenn ein Benutzer auf den in den Warenkorb Button klickt, sollte es in den Warenkorb gelegt und refreshe die gleiche Seite mit dem zusätzlichen Element Update hinzufügen.
  2. Wenn ein Benutzer auf die Schaltfläche "Bild" oder "Ansicht" klickt, wird das Bild des Objekts angezeigt.

mein Problem ist, wie folgt: 1. Wenn ein Benutzer auf das Hinzufügen klickt den Warenkorb-Taste, fügt sie aber Umleitungen an der cart.php-Datei (die nicht das, was ich will, ich will die Seite neu zu laden mit dem zusätzlichen Element Update) 2. ich habe versucht, mit:

$head = $_SERVER['HTTP_REFERER']; 
echo '<script>location.href="'.$head.'"</script>'; 
exit(); 

es scheint gut zu funktionieren, wenn ein Benutzer klickt in den Warenkorb Button, aber wenn ein Benutzer klickt auf das Bild oder klicken sie auf Schaltfläche Ansicht, es refrehes die gleiche Seite, ohne dass der Benutzer das Bild sehen kann.

Unten ist mein Code.

//My custom shopping cart script 

if (isset($_GET['pid'])) { 
$pid = $_GET['pid']; 
$wasFound = false; 
$i = 0; 
// If the cart session variable is not set or cart array is empty 
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) { 
    // RUN IF THE CART IS EMPTY OR NOT SET 
    $_SESSION["cart_array"] = array(0 => array("item_id" => $pid, "quantity" => 1)); 
} else { 
    // RUN IF THE CART HAS AT LEAST ONE ITEM IN IT 
    foreach ($_SESSION["cart_array"] as $each_item) { 
      $i++; 
      while (list($key, $value) = each($each_item)) { 
       if ($key == "item_id" && $value == $pid) { 
        // That item is in cart already so let's adjust its quantity using array_splice() 
        array_splice($_SESSION["cart_array"], $i-1, 1, array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1))); 
        $wasFound = true; 
       } // close if condition 
      } // close while loop 
     } // close foreach loop 
     if ($wasFound == false) { 
      array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1)); 
     } 
} 

    $head = $_SERVER['HTTP_REFERER']; 
//header("location: $head"); 
echo '<script>location.href="'.$head.'"</script>'; 
exit(); 
    }?> 


    <!--My Products item Display--> 
    <div class="col-md-4"> 
          <div class="product-img product-img-brd"> 
           <a href="pro_single.php?pid='.$id.'"><img class="full-width img-responsive" src="../../backend/'.$product_img.'" alt="'.$product_name.'"></a> 
           <a class="product-review" href="pro_single.php?pid='.$id.'">Quick review</a> 

           <a class="add-to-cart" href="cart.php?pid='.$id.'" ><i class="fa fa-shopping-cart"></i> Add to cart </a> 

            <div class="product-price"> 
             <span class="title-price">$'.$price.'</span>    
            </div> 
           </div> 
+1

Sie können Ajax verwenden, um Artikel in den Warenkorb zu senden, und Sie müssen die Seite nicht neu laden – JoshKisb

+0

@JoshKisb ok, wie kann ich das erreichen? – emekamba

+0

ist Bild anzeigen, in den Warenkorb und den obigen Code alle eine Seite hinzufügen? – rtfm

Antwort

0

Stattdessen es zur Herstellung einer Verbindung (mit einem Anker-Tag <a>), möchten Sie etwas JavaScript schreiben, die eine der vielen verschiedenen Arten verwenden wird es mit AJAX zu nennen.

Eine einfache Version könnte wie folgt aussehen:

// update <a> in HTML 
<a onclick="addToCart(' . $id . ')">Add to Cart</a> 

// JavaScript 
const addToCart = id => fetch('cart.php?pid=' + id).then(response => { /* do something with response here */ }); 

Dies ist eine einfache Version ist, aber es gibt Ihnen eine Idee. Es gibt Unmengen von Anleitungen für AJAX mit all den verschiedenen Methoden (ich bevorzuge die neueren fetch(), aber es gibt unter anderem auch jQuery.ajax() und pure XMLHttpRequest).

Wenn Sie einen Anker mit einem Link verwenden, heißt es "Gehe zu diesem Ort", was nicht das ist, was du willst. Mit AJAX können Sie Daten abrufen, ohne den Fluss der Seite selbst zu beeinträchtigen.

Seitennotiz: Ändern Sie idealerweise auch Ihre <a> zu einer <button>. Dies wird es semantischer machen, da eine Schaltfläche ein Ding ist, um etwas zu tun, und ein Anker ein Link zu einer anderen Seite ist.

Verwandte Themen