PHP session probléma explorerben
Sziasztok!
A problémám az lenne, hogy van egy egyszerű bevásárló kosár, ahol a session kezelés nem tökéletes. Minden alkalommal, amikor a kosárba teszek egy terméket egyből kettő kerül be. Az adatokat GET-tel kapja (egy azonosítót és egy darabszámot). A darabszám jó amit megkap, olyan mintha kétszer futna le a script. Csak IE alatt nem jó, Firefox ügyesen megcsinálja (természetesen). A berakás a következőképpen működik:
Ez elé és mögé is betettem ezt a kiíratást:
Ami azt mutatja, hogy még a programrészlet lefutása előtt beállítja a $_SESSION["shopcart"]-ban a megfelelő értéket. Lehet valami szerver beállítás? (bár ez furcsa lenne, mert ugye Firefoxban minden OK) Nem localhoston fut, hanem egy tök új szerveren, amin php5 van. (IE6 és IE7 alatt is)
■ A problémám az lenne, hogy van egy egyszerű bevásárló kosár, ahol a session kezelés nem tökéletes. Minden alkalommal, amikor a kosárba teszek egy terméket egyből kettő kerül be. Az adatokat GET-tel kapja (egy azonosítót és egy darabszámot). A darabszám jó amit megkap, olyan mintha kétszer futna le a script. Csak IE alatt nem jó, Firefox ügyesen megcsinálja (természetesen). A berakás a következőképpen működik:
$in = false;
if ($_GET["func"] == "cartadd") {
foreach ($_SESSION["shopcart"] as $id => $cik) {
if (strlen($_GET["product_id"]) >= 10 && $id === $_GET["product_id"]) {
$_SESSION["shopcart"][$id] = $_SESSION["shopcart"][$id]+$_GET["db"];
$in = true;
}
else if (strlen($_GET["product_id"]) <= 9 && $id == $_GET["product_id"]) {
$_SESSION["shopcart"][$id] = $_SESSION["shopcart"][$id]+$_GET["db"];
$in = true;
}
}
if (!$in) {
$_SESSION["shopcart"][$_GET["product_id"]] = $_GET["db"];
}
}
if ($_GET["func"] == "cartadd") {
foreach ($_SESSION["shopcart"] as $id => $cik) {
if (strlen($_GET["product_id"]) >= 10 && $id === $_GET["product_id"]) {
$_SESSION["shopcart"][$id] = $_SESSION["shopcart"][$id]+$_GET["db"];
$in = true;
}
else if (strlen($_GET["product_id"]) <= 9 && $id == $_GET["product_id"]) {
$_SESSION["shopcart"][$id] = $_SESSION["shopcart"][$id]+$_GET["db"];
$in = true;
}
}
if (!$in) {
$_SESSION["shopcart"][$_GET["product_id"]] = $_GET["db"];
}
}
Ez elé és mögé is betettem ezt a kiíratást:
print_r($_SESSION["shopcart"]);
Ami azt mutatja, hogy még a programrészlet lefutása előtt beállítja a $_SESSION["shopcart"]-ban a megfelelő értéket. Lehet valami szerver beállítás? (bár ez furcsa lenne, mert ugye Firefoxban minden OK) Nem localhoston fut, hanem egy tök új szerveren, amin php5 van. (IE6 és IE7 alatt is)
Megoldás
A formban egy image típusú gombbal ment a submit:
onclick="document.forms.addtocart7.submit();"
Erre javítottam:
onclick="document.forms.addtocart7.submit(); return false;"