Autor | Zpráva | ||
---|---|---|---|
lamič Profil |
#1 · Zasláno: 24. 1. 2015, 21:48:29
Ahoj, řeším teď vcelku pro mě náročnou věc. Vytvořil jsem jednoduchý e-shop kde není problém u registrovaných uživatelů vložit požadované zboží do košíku (dělal jsem pomocí session a id uživatele) nyní ovšem když chci aby si mohl zboží koupit i neregistrovaný uživatel jsem narazil na problém, že již session nemohu použít, protože nebudu znát id a vlastně nic o co bych se mohl opřít. Logicky mě napadá, že by to mělo jít pomocí cookies jenže nevím moc jak s tím začít. Jde mi o to, aby se zboží zobrazilo v košíku toho, který si jej objednal a třeba po zavření prohlížeče nebo po uplynutí časového intervalu se zboží třeba vyprázdní. Vkládání do databáze a ostatní věci v administraci mi fungují, jedná se pouze o to zobrazení dat v košíku [Strukrura tabulky: 1tab. pro reg. 2 pro nereg. uživatele]. Helfne mi někdo? Stačí mi zatím návrh postupu jak bych jej znal a něco nefungovalo v jeho realizaci hodil bych zde i kod a mohlo by se pokračovat dále. Děkuji za případnou pomoc
|
||
juriad Profil |
#2 · Zasláno: 24. 1. 2015, 21:56:34
Můžeš používat session i pro neregistrované uživatele. Pro vložení produktu do košíku nepotřebuješ znát id uživatele. Stačí ti to, že to přiřadí košík každému návštěvníkovi.
|
||
snazimse Profil |
#3 · Zasláno: 24. 1. 2015, 22:05:49
Session id, je právě ta identifikace podle které provedeš přidání nereg.uživatele ,až vyprší jako je to na většině eshopů,bude zase košík prázdný.
|
||
lamič Profil |
#4 · Zasláno: 24. 1. 2015, 22:46:51
takže do scriptu kde vlastně neregistrovaný odesílá objednávku bych tedy měl přiřadit session id. poté vzít tu proměnnou a vložit do košíku? P.S. jaký je parametr session na id? Já používám pro příhlášení
session_start(); session_name('WebsiteID');
|
||
Alphard Profil |
#5 · Zasláno: 25. 1. 2015, 10:54:47
Session id se může měnit, viz třeba session_regenerate_id(). Ukládáte do databáze hodně údajů pro košík? U neregistrovaných uživatelů je možné vůbec nic nevkládat do db a informaci o zboží držet výhradně v session/cookie. Až po dokončení objednávky se vše přepíše do databáze.
Kdybyste to chtěl dávat do databáze, tak nejvhodnější postup by byl vytvářet si dočasné uživatele a jejich id si ukládat do session, stejně jako u registrovaných. Rozdíl by byl jen v té dočasnosti, přidal bych sloupec s poslední aktivitou a pravidelně promazával staré uživatele (a přes cizí klíče vše co s němi souvisí). (Tímhle v principu jen změníte uložiště, po ztrátě session identifikátoru je obsah databáze nedosažitelný stejně jako session samotná, ale využití současné db struktury může být implementačně jednodušší.) Pro úplnost viz PHP triky - Nákupní košík v cookie, výhoda cookies je v tom, že k nim lze přistoupit z javascriptu a delší platnost (což je sporné, platnost session lze také nastavit libovolnou). |
||
lamič Profil |
#6 · Zasláno: 25. 1. 2015, 13:55:23
díky za reakci, nicméně bych si vybral to nejrychlejší řešení. Promazávání údajů moc nechci řešit, páč do databáze chci zasahovat pouze minimálně. I když by to asi byla chvilka... Řešení se session id mi příjde nejrychlejší... Možná by se mi hodil příklad jeho využití. zkusím o tom něco nastudovat, ale asi by mi pomohl i názorný příklad.. díky za odpověď
|
||
lamič Profil |
#7 · Zasláno: 26. 1. 2015, 16:09:28
Tak jsem si něco o tom přečetl, ale moc chytrý z toho nejsem je tu někdo, kdo by mi s tím pomohl?
|
||
Jan Tvrdík Profil |
lamič:
session_start(); if (isset($_POST['productId'], $_POST['quantity'])) { $productId = (int) $_POST['productId']; $quantity = (int) $_POST['quantity']; if (!isset($_SESSION['cart'][$productId])) { $_SESSION['cart'][$productId] = 0; } $_SESSION['cart'][$productId] += $quantity; } |
||
lamič Profil |
#9 · Zasláno: 26. 1. 2015, 16:29:52
děkuji, že se mi někdo ozval... co se týče toho kódu chápu správně, že tento kód musí být umístěn ve skriptu objednávky. Tím se přiřadí danemý nereg. uživateli session a poté tuto session v košíku musím vyvolat? Nebo jsem vedle?
|
||
Časová prodleva: 5 dní
|
|||
lamič Profil |
Tak jsem se k tomu opět po nějakém čase vrátil... mám soubor kupted.php v něm tento script na vytvoření session
session_start(); $_SESSION["kosik"][intval($_GET["id"])] = intval($_GET["pocet"]); include ("connect.php"); Když se podívám do session souboru přidá se mi tam "kosik|a:1:{i:0;i:0;}" s určitou velikostí... nyní ale když ve skriptu kosík.php se snažím vyvolat obsah uložené proměnné mi to nic neukáže... kod kosik.php <?php include ("connect"); ; include "fce.php"; if ($_SESSION["kosik"]) { $result = mysql_query("SELECT * FROM e_objednavky_bez_registrace JOIN e_produkty ON e_objednavky.id_produktu=e_produkty.id_produktu WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')"); while ($row = mysql_fetch_assoc($result)) { echo htmlspecialchars($row["nazev"]) . " (" . $_SESSION["kosik"][$row["id"]] . ")<br />\n"; } mysql_free_result($result); } |
||
juriad Profil |
#11 · Zasláno: 31. 1. 2015, 16:35:31
lamič:
Před přístupem do SESSION ji musíš nastartovat. Nejspíš chceš do kosik.php přidat session_start(); .
|
||
lamič Profil |
juriad:
prřidáno nyní vypada skript kosiku takto: <?php session_start(); include ("connect"); ; include "fce.php"; if ($_SESSION["kosik"]) { $result = mysql_query("SELECT * FROM e_objednavky_bez_registrace JOIN e_produkty ON e_objednavky.id_produktu=e_produkty.id_produktu WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')"); while ($row = mysql_fetch_assoc($result)) { echo htmlspecialchars($row["nazev"]) . " (" . $_SESSION["kosik"][$row["id"]] . ")<br />\n"; } mysql_free_result($result); } ?> 6ádná změna je nto píše nějakej warning, Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /data/web/virtuals/87224/virtual/www/kosik.php on line 9 Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in /data/web/virtuals/87224/virtual/www/kosik.php on line 12 |
||
juriad Profil |
Máš chybu v SELECTu. Vypiš si jej.
$select = "SELECT * FROM e_objednavky_bez_registrace JOIN e_produkty ON e_objednavky.id_produktu=e_produkty.id_produktu WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')"; echo $select; $result = mysql_query($select); Ve zvýrazněné části se odkazuješ na tabulku, ze které nevybíráš data. |
||
lamič Profil |
#14 · Zasláno: 31. 1. 2015, 17:10:22
juriad:
<?php session_start(); include ("connect"); ; include "fce.php"; if ($_SESSION["kosik"]) { $result = mysql_query("SELECT * FROM e_objednavky_bez_registrace JOIN e_produkty ON e_objednavky_bez_registrace.id_produktu=e_produkty.id_produktu WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')"); while ($row = mysql_fetch_assoc($result)) { echo htmlspecialchars($row["nazev"]) . " (" . $_SESSION["kosik"][$row["id"]] . ")<br />\n"; } mysql_free_result($result); } ?> opraveno stále stejné warningy a prazdna stranka |
||
juriad Profil |
#15 · Zasláno: 31. 1. 2015, 17:11:55
Chyba je v tom dotaze. Odlaď si jej v PHPMyAdminu či Admineru. Neznáme tvé databázové schéma, takže víc poradit nejde.
|
||
lamič Profil |
#16 · Zasláno: 31. 1. 2015, 17:17:22
juriad:
dotaz SELECT * FROM e_objednavky_bez_registrace JOIN e_produkty ON e_objednavky_bez_registrace.id_produktu=e_produkty.id_produktu |
||
juriad Profil |
#17 · Zasláno: 31. 1. 2015, 17:23:02
Vypiš si celý sestavený dotaz a ten odlaď. Nejspíš není v SESSION to co očekáváš.
|
||
lamič Profil |
#18 · Zasláno: 31. 1. 2015, 17:27:54
juriad:
udělal jsem hned za SQL příkaz echo" $result"; a na stránce se mi objevilo Resource id #5
|
||
juriad Profil |
#19 · Zasláno: 31. 1. 2015, 17:33:52
Počkej. Výsledek dotazu není FALSE? V tom případě to nemůže psát warningy.
Prohlédni si zdroják v [#13] a zkus, zda dotaz (ne výsledek dotazu) něco vrátí, když jej zadáš do PHPMyAdminu. |
||
lamič Profil |
Takže začnu od začátku... tabulka v databázi ma toto usporadani
id_objednavky_bez_registrace id_produktu nazev jmeno prijmeni ulice mesto psc email telefon cena pocet datum cislo_objednavky script kup_ted.php vypada takto <?php session_start(); $_SESSION["kosik"][intval($_GET["id_objednavy_bez_registrace"])] = intval($_GET["pocet"]); include ("./Connect/mysql_connect.php"); include "funkce.php"; if (isset($_GET["id_produktu"])) { $id_produktu = $_GET["id_produktu"]; $pocet_ks_na_sklade = mysql_result(mysql_query("select * from e_produkty where id_produktu = $id_produktu"), 0, "pocet"); } ?> skript kusik.php vypada takto [pre] <?php session_start(); include ("./Connect/mysql_connect.php"); ; include "funkce.php"; if ($_SESSION["kosik"]) { $result = mysql_query("SELECT * FROM e_objednavky_bez_registrace JOIN e_produkty ON e_objednavky_bez_registrace.id_produktu=e_produkty.id_produktu WHERE id_objednavky_bez_registrace IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')"); echo" $result"; while ($row = mysql_fetch_assoc($result)) { echo htmlspecialchars($row["nazev"]) . " (" . $_SESSION["kosik"][$row["id"]] . ")<br />\n"; } mysql_free_result($result); } ?> P.S. warning už to nepíše jak jsi psal o te DB tak jsem si všiml, že tam nemám v tabulce id ale id_objednavky_bez_registrace... takže ted po tomto scriptu co jsme napsal to vypisuje jen prazdnou stranku juriad: po zadaní celého příkazu do php myadmin vyšel výsledek MySQL vrátil prázdný výsledek (tj. nulový počet řádků). ( Dotaz trval 0.0312 sekund ) což ani jinak skončit nemohlo ale ukazuje to, že chyba není v sql ne? nikdo? :-( Dostal jsem se do stádia, kde se mi už asi podařilo napojit na session, nicméně se mi zobrazují pouze texty proměnné se mi tam nezobrazují... neví někdo kde by mohla být chyba? mám podezdření, že se mi do session neukládají správné hodnoty a tímpádem se nezobrazují ani v košíku... jak bych to měl zkontrolovat prosím? |
||
Časová prodleva: 9 let
|
0