Autor | Zpráva | ||
---|---|---|---|
Rellik Profil |
#1 · Zasláno: 19. 7. 2011, 20:53:55 · Upravil/a: Rellik
Zdravím,
v diskuzi http://diskuse.jakpsatweb.cz/?action=vthread&forum=2&topic=127828 sem řešil použití košíku na e-shopu - měl sem ukládání položek do košíku pomocí tabulek a teď to podle rad předělávám pomocí session. Narazil sem ale na jednu věc, na kterou nikde nemůžu narazit a to sem prohledal kde co. Udělal sem nový script na výpis košíku: <h2>Košík:</h2> <?php $cash = intval($_GET['cash']); $kod_zbozi = strip_tags(intval($_POST['kod'])); $pocet = strip_tags(intval($_POST['qty'])); // zápis položek do session if($cash ==1) { $_SESSION['kosik'][intval($kod_zbozi)] = array('pocet' => intval($pocet)); } // úprava položek v session if($cash ==2) { $pocet = $_POST['qty']; $key = $_POST['key']; if($pocet == 0) { unset($_SESSION['kosik'][$key]); // smaže aktuální položku } else { /// tady nevím jak přičíst nebo odečíst počet položek v session } } // výpis položek košíku echo '<table class="kosik">'; echo '<tr class="kosik_zahlavi"> <td>Název Zboží</td><td>Cena s DPH</td><td>Množství</td> <tr>'; $idecka=array(); $i=0; foreach ($_SESSION['kosik'] as $key => $value) { $idecka[$i]=array("ID" => $key,"pocet"=> $value["pocet"]); $i++; $sql = mysql_query("SELECT * FROM zbozi WHERE kod_zbozi = '".$key."'"); while($data=mysql_fetch_array($sql)) { $vypis=' <tr><td> <b>{nadpis}</b> </td> <td> <span class="red"><b>{cena},-kč</b></span> </td> <td> <form action="?page=kosik&cash=2" method="post"> <input type="hidden" name="key" value="'.$key.'" /> <input type="text" name="qty" value="'.$value["pocet"].'" size="2" /> <button type="submit" name="buy" class="button buy">Přepočítat</button> </form> </td> </tr>'; $vypis=str_replace('{nadpis}',$data['nazev'],$vypis); $vypis=str_replace('{cena_bez_dph}',$data['cena'],$vypis); $cena = sprintf("%0.2f", $data['cena']*$value["pocet"]*1.2); $vypis=str_replace('{cena}',$cena,$vypis); echo $vypis; // výpočet ceny $cena = $data['cena']*$value["pocet"]; $pole[$sid++] = $cena; } } echo '</table>'; echo "Celkem bez DPH: <span class='red'>".array_sum($pole).",-kč</span>\n<br />\n\t\t"; echo "Celkem s DPH: <span class='red'>".array_sum($pole)*1.2.",-kč</span>\n<br /><br />\n\t\t"; echo '<a href="?page=objednavka" class="button">Dokončení nákupu</a>'; ?> A právě nevím jak měnit počet položek, které už jsou v session - mazání mi jde.. :-) Pak bychtaky chtěl poradit jak to dál zpracovat: Napadlo mě to asi tak: Obsah session podobně jako u tohoto výpisu uložit do tabulky v DB (musím popřemýšlet jak to spáchat), kde by navíc bylo ID zákazníka, to samé ID by bylo v tabulce kde by se uložila zákazníkova adresa po potvrzení objednávky. Ukázka práce "nového" košíku : http://firstpage.profitux.cz/fotoshop/ - (přidávání položek je momentálně možné pouze z úvodní strany) |
||
Rellik Profil |
#2 · Zasláno: 19. 7. 2011, 21:44:14 · Upravil/a: Rellik
Tak tu změnu už sem vyřešil.
Řádek 18: $_SESSION['kosik'][intval($key)] = array('pocet' => $pocet); Teď ještě jedna otázka: Když se vrátím na zboží a dám do košíku položku, která už v košíku je, jak docílím toho aby se přičetla v tom košíku ke stejné položce? |
||
zatomik Profil |
#3 · Zasláno: 19. 7. 2011, 21:51:18
Mělo by fungovat normálně toto:
$_SESSION['kosik'][$key] = intval($pocet) |
||
Rellik Profil |
#4 · Zasláno: 19. 7. 2011, 21:59:08
zatomik:
> Mělo by fungovat normálně toto: > > $_SESSION['kosik'][$key] = intval($pocet) Mělo by fungovat na první dotaz a nebo na přičtení počtu v košíku?? I když to přičtění už mám v hlavě trochu vymyšlené - i když myslím že trochu prasácky: napadlo mě k položce přidat další hiden input, kde by byl aktuální počet položky a s odesláním by se to sečetlo s opětovným zadáním počtu položek u stejného zboží. blbě se to vysvětluje. prostě v košíku je třeba 10 UV filtrů - při procházení filtry mě napadne ještě jeden přikoupit a kliknu na tlačítko do košíku - je tam přednastavená hodnota jedné položky. Kdybych to řešil jako minulý dotaz, tak se mi změní počet filtrů v košíku na 1. Když tam přidám hiden intput s hodnotou 10 (už je v košíku), tak po odeslání se to sečte a uvede jako nová hodnota položky. Je to blbé řešení? Nebo to jde udělat jednodušej? |
||
zatomik Profil |
#5 · Zasláno: 19. 7. 2011, 22:06:46
To bylo k tomu prvnímu.
U toho druhého testuj jestli je $_SESSION['kosik'][intval($kod_zbozi)] == null, pokud ano tak tam nastavis 1 a pokud ne tak udelas $_SESSION['kosik'][intval($kod_zbozi)] + 1, tim pridas 1polozku do kosiku. |
||
Rellik Profil |
#6 · Zasláno: 20. 7. 2011, 17:02:16
zatomik:
Do košíku nemám problém zapsat zboží. problém mám s tím, že pokud už zboží v košíku existuje a v obchodě kliknu znovu na stejné zboží, tak by se mělo přičíst. Jinak ten kód $_SESSION['kosik'][intval($kod_zbozi)] + 1 nefunguje - zamrzne stránka. Vkládání dělám takhle: $_SESSION['kosik'][intval($kod_zbozi)] = array('pocet' => intval($pocet)); |
||
Rellik Profil |
#7 · Zasláno: 20. 7. 2011, 18:08:32
Tak už sem to zprovoznil i s přidáváním položek
U položky, která už je v košíku je hiden input ve kterém je počet položek v košíku, takže se po opětovném odeslání sečte předchozí počet s počtem odesílaným. Líp je to vidět přímo ve zdrojáku. Teď jdu projít $_GET a $_POST a zabezpečit. Změna oproti původnímu: Vytváření ID zákazníka odpadlo, jde plnit košík rovnou. Do session se zapíše ID zboží a jeho zakoupený počet. Co ještě půjde dodělat: Po dokončení objednávky se obsah košíku zapíše do DB kde bude doručovací adresa s vygenerované ID zákazníka, podle kterého se bude dát sledovat stav zboží. |
||
Rellik Profil |
#8 · Zasláno: 22. 7. 2011, 16:42:20 · Upravil/a: Rellik
Tak se znovu ozývám pro radu. Celý e-shop sem předělal, tudíž není nutné vytváření ID zákazníka a zboží se ukládá do session. http://firstpage.profitux.cz/fotoshop/
Chtěl bych poradit (pomoct) jak elegantně uložit vybrané zboží a jeho počet do DB abych to pak mohl v administraci znovu vypsat jako fakturu. V DB mám tabulku id | id_zakaznik | zbozi | pocet Do id_zakaznik se generuje 10 místné unikátní číslo při odeslání objednávky pak bych chtěl ze session nějak vydolovat kod zbozi a jeho pocet a uložit to taky do té tabulky. Na výpis session sem si zatím udělal takovou funkci: function vypis() { $kos=array(); $i=0; foreach ($_SESSION['kosik'] as $key => $value) { $kos[$i]=array("ID" => $key,"pocet"=> $value["pocet"]); $i++; echo $key ." ".$value["pocet"]." "; // vypíše ID zboží a jeho počet - tyto jediné data jsou v SESSION } } Takhle se to momentálně vypíše do toho jednoho inputu, což mi moc nepomůže, protože mi z toho vznikne pouze řada čísel. Chtěl sem aby se to rozdělilo na dva inputy kde v jednom bude kód zboží a v druhém počet. Ježe když bude víc položek v košíku, tak by ty inputy měly stejné name="" a tak by se odeslal jen jeden od každého. A číslovat to pomocí $i je asi taky blbost, protože by se pak musely nějak vyřešit i $_POSTy podle počtu položek. Poradí mi někdo jak to elegatně provést? Díky |
||
Časová prodleva: 13 let
|
0