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.' €</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