Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Carrello: Piccolo problema con le sessioni

    Ciao a tutti
    ho realizzato un semplice carrello della spesa:
    alla pagina confirm.php mi arrivano codice e prezzo che ottengo con una request e che mantengo con le sessioni in questo modo:
    Codice PHP:
    $_SESSION['codice'] = $_REQUEST['codice'];

    $codice $_SESSION['codice']; 
    (e faccio la stessa cosa per il prezzo)
    chiedo se l' utente vuole confermare l' acquisto dell artico $codice al costo di $prezzo!
    cliccando su "compra" passo al cart.php la $i (che mi serve per incrementare l'array cart)

    al cart.php arrivano dunque la $i, e con la session start riprendo il lcodice e prezzo e con un ciclo inserisco tutto nel carrello.

    IL PROBLEMA è:
    se aggiungo al carrello un articolo con codice: 010203 e prezzo 19.90
    e poi aggiungo un altro articolo con codice: 000123 e prezzo 39.90

    anziche ottenere:

    CODICE | PREZZO
    ------------------
    010203 - 19.90
    000123 - 39.90

    ottengo:

    CODICE | PREZZO
    ------------------
    000123 - 39.90
    000123 - 39.90

    si ricorda praticamente solo dell' ultima cosa che aggiungo, credo che sto sbagliando l ' utilizzo delle sessioni o forse sbaglio ad usare l array?
    qualcuno può aiutarmi a risolvere questo problema?
    vi posto i codici delle pagine! grazie in anticipo
    PAGINA DI CONFERMA CHIAMATA "catalog.php" DOVE ARRIVANO I DATI CODICE E PREZZO:
    Codice PHP:
    <?php
    session_start
    ();
    if (!isset(
    $_SESSION['cart'])) {
        
    $_SESSION['cart'] = array ();
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>conferma</title>
    </head>
    <body>
    <h1>Conferma acquisto</h1>


    il tuo carrello contiene <?php 
        
    echo count($_SESSION['cart']); ?> articoli. </p>
    <?php 
    $_SESSION
    ['codice'] = $_REQUEST['codice'];
    $_SESSION['prezzo'] = $_REQUEST['prezzo'];

    $codice $_SESSION['codice']; 
    $prezzo $_SESSION['prezzo'];

    $items = array($codice);
    $prices = array($prezzo);
    ?>
    <table border="0">
        <thead>
            <tr>
            <th>Codice</th>
            <th>Prezzo</th>
            </tr>
    </thead>
    <tbody>
    <?php
        
    for ($i 0$i count($items); $i++) {
        echo 
    '<tr>'
        echo 
    '<td>' $items[$i] . '</td>';
        echo 
    '<td>$' number_format($prices[$i], 2) . '</td>';
        echo 
    "<td> | Vuoi davvero aggiungere questo articolo al carrello?_<a href=\"cart.php?codice=$codice&amp;prezzo=$prezzo&amp;buy=$i\">Compra!</a></td>";
        echo 
    '<tr>';
        }
    ?>
     </tbody>
     </table>
     

    [url="dati_articolo.htm"]Shopping[/url] | [url="cart.php"] il tuo carrello[/url]</p>
    </body>
    </html>
    __________________________________________________ ________________________
    il carrello cart.php
    Codice PHP:
    <?php
    session_start
    ();
    if (!isset(
    $_SESSION['cart'])) {
        
    $_SESSION['cart'] = array ();
    }
    if (isset(
    $_GET['buy'])) {
        
    //Aggiunge l'oggetto alla fine dell'array $_SESSION['cart']
        
    $_SESSION['cart'][] = $_GET['buy'];
        
    header('location: ' $_SERVER['PHP_SELF'] . '?' SID);
        exit();
    }
    if (isset(
    $_GET['empty'])) {
        
    //Svuota l'array $_SESSION['cart']
        
    unset($_SESSION['cart']);
        
    header('location: ' $_SERVER['PHP_SELF'] . '?' SID);
        exit();
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Shopping Cart</title>
    </head>
    <body>
    <h1>Carrello</h1>
    <?php 
    $prezzo 
    $_SESSION['prezzo'];
    $codice $_SESSION['codice'];
    $items = array($codice);
    $prices = array($prezzo);
    ?>
    <table border="1">
    <thead>
    <tr>
    <th>Codice</th>
    <th>Prezzo</th>
    </tr>
    </thead>
    <tbody>
    <?php
        $total 
    0;
        for (
    $i 0$i count($_SESSION['cart']); $i++) {
        echo 
    '<tr>';
        echo 
    '<td>' $items[$_SESSION['cart'][$i]] . '</td>';
        echo 
    '<td align="right">$';
        echo 
    number_format($prices[$_SESSION['cart'][$i]], 2);
        echo 
    '</td>';
        echo 
    '</tr>';
        
    $total $total $prices[$_SESSION['cart'][$i]];
    }
    ?>
    </tbody>
    <tfoot>
    <tr>
    <th align="right">total</th>
    <th align="right">&euro; <?php echo number_format($total2); ?></th>
    </tr>
    </tfoot>
    </table>


    [url="dati_articolo.htm"]Shopping[/url] | 
    <?php print(" <a href=\"cart.php?empty=1\">Svuota carrello</a> "); ?>
    </body>
    </html>
    www.gicchesto.com
    Servizi informatici ed elettronici a 360° per aziende e/o privati.

  2. #2
    up
    www.gicchesto.com
    Servizi informatici ed elettronici a 360° per aziende e/o privati.

  3. #3

    una idea su come risolvere

    ciao ho visto la tua richiesta e con molto piacere cerco di darti qualche idea su come risolvere
    nel mio carrello in breve:

    ogni oggetto in vendita è un form a se

    ogni volta che un oggetto viene messo nel carrello salvo i dati dell'oggetto(prezzo, codice, etc) in un array

    poi salvo questo array in una variabile

    che a sua volta viene salvata in $_SESSION['items'.$i]

    e tramite un operazione semoplice ogni volta che un oggetto è aggiunto al carrello $i incrementa di uno

    quindi poi per mostrare gli oggetti messi nel carrello apro l'array con un foreach loop

    l'importante però è incrementare $i di uno ogni volta che qualcosa è stata aggiunta

    ecco un po di codice

    Codice PHP:

    session_start
    ();

    //PER INCREMENTARE $i salvo il dato in $_SESSION['i']
    //CONTROLLO SE QUALCOSA è STATO POSTATO QUINDI SE UN OGGETTO è STATO
    //INSERITO E SE ESISTE I

    if($_POST['size'] && $_SESSION['i']){


    //SE I ESISTE E QUALCOSA è STATO AGGIUNTO
    //ALLORA INCREMENTO DI 1 'I'
    //E SALVO IL VALORE IN $i
    $_SESSION['i'] = $_SESSION['i'] +1;
    $i $_SESSION['i'];



    }

    //QUESTA è LA MIA PAGINA DI CART DETAILS QUINDI SI
    //PUO VISITARE ANCHE SENZA AVER INSERITO UN NUOVO OGGETTO
    //QUINDI SE I ESISTE, MA NON è STATO INSERITO NIENT'ALTRO
    //I RIMANE UGUALE NON INCREMENTA

    elseif($_SESSION['i'] && ! $_POST['size']){
    $i $_SESSION['i'];



    }
    //SE INVECE è IL PRIMO OGGETTO INSERITO
    //PERCHE ESISTE POST MA NON SESSION I
    //ALLORA $i è uguale a 1
    elseif($_POST['size'] && ! $_SESSION['i']){


    $i 1;
    }

    //DOPO RACCOLGO IL RESTO DEI DATI

    //CONTROLLO SE QUALCOSA è STATO INSERITO
    if ($_POST['product_name']){



    //AGGIUNGO I DATI ALLE VARIABILI
    //IN QUESTO MOMENTO SALVO I A SECONDA SEMPRE DAL CALCOLO AD INIZIO
    //PAGINA 

    $_SESSION['i'] = $i;
    $name=$_POST['product_name'];
    $quantity $_POST['quantity'];
    $size$_POST['size'];
    $product_price$_POST['product_price'];
    $order_num$i;

    //ALLO STESSO MODO CALCOLO IL SUBTOTALE E IL TOTALE
    $subtotal $quantity $product_price;
    $_SESSION['subtotal'] = $_SESSION['subtotal'] + $subtotal;


    //AGGIUNGO I DATI AD UN ARRAY CHIAMATO  $ITEMS
    $items= array(
    "product name" =>$name,
    "quantity" => $quantity,
    "size" => $size,
    "price" =>  $product_price,
    "order number" => $order_num,
    "subtotal" => $subtotal
    );

    //INFORMO SULL'ULTIMO OGGETTO INSERITO
    echo "succesfully added to cart";
    echo
    "
    "
    ;

    echo
    "Product Name : [b]".$name."[/b]
    "
    ;

    echo 
    "Quantity : [b]".$quantity."[/b]
    "
    ;

    echo
    "Size : [b]".$size."[/b]
    "
    ;

    echo
    "Price : [b]".$product_price."[/b]
    "
    ;




    echo
    "Subtotal : [b]";

    echo 
    $subtotal."[/b]
    "
    ;
    echo
    "

    "
    ;





    //AGGIUNGO L'ARRAY SALVATO IN ITEMS 
    //A $_session['items'.$i] DOVE $i di volta in volta viene incrementato di uno


    $_SESSION['items'.$i] = $items;
    }

    //MENTRE IL CODICE DI PRIMA MOSTRA L'ULTIMO PRODOTTO AGGIUNTO 
    //LO SALVA IN SESSIONE
    //ORA CHIAMO UN ALTRA PAGINA CHE MI MOSTRA TUTTI GLI OGGETTI IN CARRELLO
    //CHE IO HO CHIAMATO session_cart.php
    //SE I ESISTE INCLUDE LA PAGINA IL CUI CODICE è SOTTO
    if($_SESSION['i']){

    include(
    "session_cart.php");


    QUESTO è il codice di session_cart.php che giusto attraversa l'array items tante volte quante volte $i esiste
    Codice PHP:

    //IN QUANTO IO INCLUDO IL FILE IN UNA PAGINA DOVE I CALCOLI SONO GIA FATTI
    //ALL'INIZIO PAGINA non necessita di session_start()
    //diversamente se usi una pagina a parte all'inizio della pagina dovresti aggiungere
    //session_start(); e $i = $_SESSION['i'];

    for ($i =1$i <=$_SESSION['i']; $i++){


    foreach(
    $_SESSION['items'.$i] as  $key=>$value)

    {

       echo 
    $key." : [b]".$value."[/b]
    "
    ;


    }



    dovrebbe dare un output del tipo

    Nome prodotto : esempio
    codice : esempio
    prezzo : esempio

    che non sono altro che i dati che abbiamo salvato nell'array $items passato poi a $_SESSION['items'.$i]

    spero di averti dato un idea e di essere stato comprensibile visto che devo ammettere che è la prima volta che scrivo su questo forum

  4. #4

    volevo aggiungere

    che ovviamente il primo for loop fa si che vengano mostrati i dati relativi a tutti i prodotti nel carrello io ti ho fatto l'esempio dell'output per un oggetto

    ma li mostra tutti,

    almeno questa è una soluzione che ho sperimentato io e ancora devo perfezionare

  5. #5
    Grazie per la tua risposta, si cmq dal punto di vista concettuale ho ben capito e risolto. ho utilizzato un array per salvare tutto in sessioni, e poi riesco a visualizzare il tutto con una bella explode! inoltre poi con un foreach ho messo per ogni articolo la modifica di quantità o la cancellazione di quell articolo e con un for riesco a fare anche la somma totale.

    fare un carrello non è facile, ma girando e girando e mettendo insieme le cose , si riesce alla fine.

    Grazie per l aiuto cmq, e chi come me ha avuto problemi con carrelli può chiedermi info!
    www.gicchesto.com
    Servizi informatici ed elettronici a 360° per aziende e/o privati.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.