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

    strano comportamento sessioni

    Sto realizzando un sito e-commerce e succede una cosa alquanto strana :

    in una classe setto la sessione ['cart'] :

    Codice PHP:
    public function addCart($pId$qta){ 
    $pId trim($pId); $pId $this->mMysqli->real_escape_string($pId); 
    $result parent::SympliQuery('SELECT * FROM prodotti WHERE id = "'.$pId.'"'); 
    $product $result->fetch_assoc(); 
    if (
    $product['offerta']){ 
    $prezzoCadauno $product['prezzo_offerta']; 
    }else{ 
    $prezzoCadauno $product['prezzo']; 

    $cart = (isset($_SESSION['cart'])) ? $_SESSION['cart'] : array();
    if (
    array_key_exists($pId$cart)){ 
    $cart[$pId]['qta'] = ($cart[$pId]['qta'] + $qta); 
    }else{ 
    $cart[$pId]['qta'] = $qta

    $cart[$pId]['nome'] = $product['nome']; 
    $cart[$pId]['confezione'] = $product['confezione']; 
    $cart[$pId]['img'] = $product['img_thumb']; 
    $cart[$pId]['pId'] = $pId
    $cart[$pId]['prezzoCadauno'] = $prezzoCadauno
    $cart[$pId]['prezzoSingoloTotale'] = ($prezzoCadauno $cart[$pId]['qta']); $_SESSION['cart'] = $cart
    header('Location: shopping_cart.php'); 

    Tutto funziona benissimo.
    Ora in alto a destra (vicino al menu) faccio comaparire l'icona del carrello coi var prodotti :

    Codice PHP:
    public function mostraBarCart($altFlag$titleFlag$altCart$titleCart){ 
    echo 
    '<div id="bar_cart" class="mini_text"> 
    <div id="utente"> 

    Utente :</p> </div> 
    <div id="lingua"> 

    Lingua :</p> [img]images/italy.gif[/img] </div> 
    <div id="mini_cart"> [url="shopping_cart.php"][img]images/cart.gif[/img][/url] <p class="link_text">[url="shopping_cart.php"]CARRELLO SPESA[/url]</p>'
    $prezzoTot 0$totProdotti 0;
     if (isset(
    $_SESSION['cart'])){ 
    foreach (
    $_SESSION['cart'] as $id_prodotto){ 
    $prezzoTot += $id_prodotto['prezzoSingoloTotale']; $totProdotti += $id_prodotto['qta']; 

    } echo 
    '<span class="mini_text">[url="shopping_cart.php"]'.$totProdotti.' prodotti[/url] - '.$prezzoTot.' &euro;</span>'; echo '</div> </div>'; } 
    Anche questo funziona benissimo.
    N.B. la condizione if (isset($_SESSION['cart'])) una volta che aggiungo prodotti al carrello risulta giustamente true e mi mostra cosi quanti prodotti ho nel carrello coi relativi prezzi.

    Il problema arriva dopo e cioè quando un utente esegue il login io voglio che se è settata la sessione cart deve essere indirizzato alla pagina checkout:

    Codice PHP:
    public function VerifyLogin(){ 
    $email = (isset($_POST['email'])) ? $this->securityData($_POST['email']) : '';
    $pwd = (isset($_POST['pwd'])) ? $this->securityData($_POST['pwd']) : ''
    if (empty(
    $email) || empty($pwd)){ header('Location: login.php?failed=1'); 
    }else{ 
    $result parent::SympliQuery('SELECT id, ver FROM users WHERE email = "'.$email.'" AND pwd = "'.md5($pwd).'"'); 
    $numResult $result->num_rows$ver $result->fetch_assoc(); 
    if (
    $numResult != 1){
     
    header('Location: login.php?failed=2'); 
    }else{ 
    if (!
    $ver['ver']){ 
    header('Location: login.php?failed=3'); 
    }else{ 
    $_SESSION['auth'] = 1$_SESSION['user_id'] = $ver['id']; 
    if (isset(
    $_SESSION['cart'])){ 
    header('Location: checkout.php'); 
    }else{ 
    //mi esegue questo 





    Una volta loggato (l'ultimo pezzo della funzione) anzichè mandarmi alla pagina checkout esegue il blocco else come se la sessione cart non fosse settata. Invece è settata perchè nel famoso carrello in alto a destra risultano prodotti.

    Come mai, secondo voi, in una classe l'istruzione if (isset($_SESSION['cart'])) viene considerata true mentre in un'altra no?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    please indentare codice

  3. #3
    praticamente ho constatato che fuori della classe l'istruzione if (isset($_SESSION['cart'])) è true ma dentro la funzione nella classe è false

  4. #4
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    così ad occhio penso sia un errore di posizionameno di session_start che però non vedo nel codice dove hai messo session_start

  5. #5
    hai ragione, sei un grande!

    Praticamente avevo messo quell'istruzione prima del template che richiamava la funzione session start():

    Codice PHP:
    <?php
    ob_start
    ();
    require_once(
    'php/class.template.php');
    $titleHead '';
    $description '';
    $keywords '';
    $template = new template();
    $template->headHtml($titleHead$description$keywords);
    ?>
    avevo chiamato la funzione di verifica login prima di queste righe che comprendono la funzione session start()

    Grazie

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 © 2025 vBulletin Solutions, Inc. All rights reserved.