Autor | Zpráva | ||
---|---|---|---|
imtoo Profil |
#1 · Zasláno: 27. 2. 2014, 15:56:33
Dobrý den,
upravuji svůj dříve napsaný eshop (kde nákupní košík v pořádku fungoval), ale v nové verzi mi moc nefunguje. Konkrétně mám stránku s produktem (product.php) a z toho vede tlačítkem odkaz na skript (cart_script) přidávající výrobek do $_SESSION["cart"] a přesměrovává ze skriptu na košík (cart.php). Ihned po přesměrování na cart.php se mi zobrazuje správně hodnota košíku (i když dám ctrl + F5), dokonce i když přejdu na odeslání objednávky (order_conf.php) je hodnota košíku správná. Jakmile, ale přejdu na nějakou další stránku (index.php, contact.php,product.php) tak hodnota $_SESSION["cart"] není žádná, i když poté z této stránky přejdu na cart.php nebo order_conf.php, tak nemám hodnotu session také žádnou. Na začátku každé stránky mám session_start();. product.php - odkaz na přidání produktu <a href="http://www.domain.com/eshop/cart_script.php?action=add&id=13" class="btn btn-ex btn-cart btn-black"> cart_script.php <? session_start(); if (htmlspecialchars($_GET["action"]) == "add") { $_SESSION["cart"][intval($_GET["id"])] = "1"; // přidá 1 ks do košíku Header("Location: http://www.domain.com/eshop/cart.php"); } elseif (htmlspecialchars($_GET["action"]) == "delete") { unset($_SESSION["cart"][intval($_GET["id"])]); //smaže session výrobku Header("Location: http://www.domain.com/eshop/cart.php"); } else { Header("Location: http://www.domain.com/eshop/cart.php"); } ?> Všechny stránky jsou tvořeny takto (začátek všech stránek jako index.php, cart.php, order_conf.php, contact.php, product.php) <? session_start(); include "res/connect.php"; //připojení k db include "res/header.php"; ...HTML kód ?> Kde v header.php je právě zmíněný košík, který násobí počty druhů produktů s cenou uloženou v db a pak vypíše celkovou hodnotu košíku. header.php - zobrazení košíku ...HTML kód <? if (!isset($_SESSION["cart"])) { //vypsání celkové ceny echo "0"; } else{ $result = mysql_query("SELECT * FROM goods WHERE id IN ('" . implode("', '", array_keys($_SESSION["cart"])) . "')") or die (""); //vybere údaje z tabulky goods podle všech klíču v session cart while ($row = mysql_fetch_assoc($result)) { $_SESSION["sum"][$row["id"]] = $_SESSION["cart"][intval($row["id"])]*$row["price"]; } mysql_free_result($result); $sum_price = array_sum($_SESSION["sum"]); echo $sum_price; }?> ...HTML kód Několik dní už nad tím dumám s googlem a nemůžu na nic přijít. Uvítám všechny rady a předem děkuji za věnovaný čas. |
||
Alphard Profil |
#2 · Zasláno: 27. 2. 2014, 23:33:49
Zkoušel jste už debugovat stylem, že na každou stránku dáte nějaké
var_dump($_SESSION); a trochu to proklikáte? Odstíní se tím další podmínky a možné chyby. Pokud v nějakém případě přechodu na jinou stránku session skutečně zmizí a jste si jistý, že všude bylo validně session_start() (třeba selhání kvůli BOM a potlačená chybová hláška?), bude třeba hledat konkrétní příčinu. Zmizela cookie, nebo session soubor? Případně kouknout do nastavení, jestli jsou v pořádku všechny cesty apod.
(Podobných vláken pamatuji více, obvykle tazatel najde nějakou „hloupou“ chybu nebo překlep, který přehlížel.) |
||
rafej Profil |
#3 · Zasláno: 28. 2. 2014, 13:54:32
Taky bych si prověřila tok stránek - tj. průběh nákupního procesu a výstupní stránky.
Kde odstraňujete SESSION po úspěšném dokončení nákupu? Nemůže se stát, že odskok na specifickou stránku resetuje SESSION? Co se stane při nedokončeném nákupu nebo při neúspěšném odeslání objednávky/košíku? |
||
Časová prodleva: 21 dní
|
|||
imtoo Profil |
#4 · Zasláno: 21. 3. 2014, 13:57:12 · Upravil/a: imtoo
Alphard:
Zkoušel jsem var_dump($_SESSION) - U stránek kde je košík nulový (když by neměl být) mi to vypíše array(0) { } . Hned po přidání produktu do košíku to vypíše array(2) { ["cart"]=> array(1) { [13]=> string(1) "1" } ["sum"]=> array(1) { [13]=> int(2999) } }
Žádné chybové hlášky jsem po error_reporting(15); neobjevil.
Můžete mi prosím poradit kde mám hledat session soubor? session.save_path mám nastaveno na /fs/tmp , ale nemůžu ho nikde najít.
Díky moc. rafej: Session odstraňuji na stránce order_conf.php po uložení objednávky do databáze. Žádný kód co by měl resetovat session jsem nikde nenašel. Při nedokončeném nákupu/neúspěšně odeslané objednávce se se session nic neděje, mělo by zůstat stejné do zavření prohlížeče, popř. po určitém časovém intervalu zmizet, ne? Zvláštní je, že mi to na prvním hostingu v rámci stejného poskytovatele v pohodě běží, ale na druhém hostingu už ne. A to jsem pouze přesunul kód do menu v souboru header.php, takže mě akorát napadá jestli to třeba není includováním souborů. |
||
Davex Profil |
Liší se nějak výpis parametrů ve skriptech, kde je a není vidět obsah košíku?
<?php session_start(); var_dump($_SERVER["HTTP_HOST"], $_SERVER["SERVER_PORT"], session_id(), session_save_path(), session_cache_limiter()); print_r(session_get_cookie_params()); |
||
Časová prodleva: 5 dní
|
|||
imtoo Profil |
#6 · Zasláno: 27. 3. 2014, 14:02:00 · Upravil/a: Moderátor (editace znemožněna) 27. 3. 2014, 15:14:53
Joooo, vyřešeno!
Díky Davex. U var_dump($_SERVER["HTTP_HOST"]) jsem si všimnul, že na stránkách kde jsem košík viděl bylo "domain.com" a tam kde nebyl košík vidět bylo "www.domain.com".
Takže jsem upravil odkaz pro přidání produktu do košíku z <a href="http://www.domain.com/eshop/cart_script.php?action=add&id=13" class="btn btn-ex btn-cart btn-black"> na <a href="domain.com/eshop/cart_script.php?action=add&id=13" class="btn btn-ex btn-cart btn-black"> a už to běží.
Ještě jednou moc díky! Zamykám. Moderátor jenikkozak: Pro zamknutí není důvod.
|
||
Časová prodleva: 11 let
|
0