Stránka: 1 z 1
| [ Príspevkov: 17 ] | |
Autor | Správa |
---|
Registrovaný: 18.10.07 Prihlásený: 14.07.11 Príspevky: 107 Témy: 32 | 32 |
cawte, chcel by som si spravit jednoduchy nakupny kosik s pouzitim session, bez databazy. do pola si pridam cca 4 veci ktore potom pomocou session chcem ukladat do nakupneho kosika. vedel by mi niekto poradit ako nato ? alebo mi napisat nejaky jednoduchy skript ako sa taketo veci robia ? diky
|
|
Registrovaný: 30.05.06 Prihlásený: 08.10.14 Príspevky: 1756 Témy: 35 | 35 Bydlisko: BA - WESTSIDE |
Napíšem ti zhruba ako na to, konečná realizácia nie je v zásade nijak náročná.
Povedzme, že máš natvrdo v skripte definované pole produktov, ktoré majú nejaké tie klasické parametre, ako je názov, popis, cena za kus, počet kusov na sklade, dodacia lehota, obrázok... Dôležité je, aby mali nejaký svoj unikátny kód (môže to byť obyčajné číslo, prípadne nejaký kratší reťazec z čísiel a písmen).
Dobré bude mať toto pole definované v samostatnom súbore, pretože ho budeme ešte viackrát potrebovať a nebude treba ho stále prepisovať na viac stránok a mať tak duplicity, ktoré sa zle udržujú.
Kód: <?php /* subor produkty.php
unikatny kod je indexom prvku v poli, dalej je nazov, popis, cena za kus, dodacia lehota (toto pole môže byť aj asociatívne, tj. jednotlivé atribúty produktu budú definované nie číslom, ale textovým reťazco. Napr. teraz pre názov použiješ $produkty["dr01"][0], v asociatívnom poli by to mohlo byť $produkty["dr01"]['nazov']) */ session_start(); $produkty["dr01"] = array("Domáci robot", "Skvelý domáci robot na miešanie cesta", "999", "24 hodín"); $produkty["dr02"] = array("Domáci robot", "Ešte lepší robot na miešanie cesta", "1999", "48 hodín"); ?>
Pri výpise všetkých týchto položiek (najlepšie foreach cyklom) vypíšeš každému produktu jedno políčko na počet produktov. Kód: // obchod.php
require_once("produkty.php"); if (count($produkty) > 0) { echo "<form action=\"pridaj_do_kosika.php\" method=\"post\">\n"; foreach ($produkty as $key=>$value) { echo " <label> ".$value[0]." - ".$value[1]." (".$value[2]." Sk za ks), dodacia lehota: ".$value[3].". Vložiť do košíka <input type=\"text\" name=\"produkt[".$key."]\" value=\"1\"> ks </label> "; } echo " <input type=\"submit\" value=\"Vložiť do košíka\"> </form> "; } else { echo "V ponuke zatiaľ nie sú žiadne produkty!"; }
Na stránke pridaj_do_kosika.php najprv pomocou funkcie require_once("produkty.php"); zahrnieš súbor s poľom a potom skontroluješ parametre odoslané z formulára, ak všetko sedí pridáš daný počet kusov do _SESSION premennej. Kód: // pridaj_do_kosika.php
require_once("produkty.php"); if (count($produkty) > 0) { if (isset($_POST['produkt']) && count($_POST['produkt']) > 0) { foreach ($_POST['produkt'] as $key=>$value) { if (ereg("^[1-9][0-9]*$", $value)) { $key = trim(htmlspecialchars(strip_tags($key))); foreach ($produkty as $pkey=>$pvalue) { if ($pkey == $key) { $_SESSION['produkt'][$pkey] = $value; } } } } } else { echo "Chyba, nevybrali ste ani jeden produkt do košíka!"; } } else { echo "V ponuke zatiaľ nie sú žiadne produkty!"; }
Po tomto kroku treba stránku presmerovať funkciou header() na stránku s výpisom obsahu košíka (aby sme zneplatnily POST premenné). Kód: // vypis.php
require_once("produkty.php"); if (isset($_SESSION['produkt']) && count($_SESSION['produkt']) > 0) { echo " <table> <caption>Obsah vášho košíka: </caption> <tr> <th>Produkt</th> <th>Cena za 1 ks</th> <th>Počet ks</th> <th>Cena celkom</th> </tr> "; $cena_celkom = 0; foreach ($_SESSION['produkt'] as $key=>$value) { $cena_celkom = $cena_celkom + ($produkty[$key][2]*$value); echo " <tr> <td>".$produkty[$key][0]."</td> <td>".$produkty[$key][2]."</td> <td>".$value."</td> <td>".($produkty[$key][2]*$value)."</td> </tr> "; } echo " <tr> <td colspan=\"3\">Celková cena nákupu: </td> <td>".$cena_celkom."</td> </tr> <table> "; } else { echo "Váš nákupný košík je prázdny!"; }
No, teraz treba ešte dorobiť odoberanie produktov z košíka, dá sa to spraviť "rozumne" (po jednom) aj nerozumne (naraz, zrušením premennej $_SESSION['produkt']); potom treba dorobiť nejaké zadávanie osobných údajov adresáta, to možeš pridať napr. do $_SESSION['adresat'] a mať to tak pokope. Po skončení nákupu je dobré hneď vymazať $_SESSION['produkt'], naopak, údaje o adresátovi si môžeš nechať (prípadne spraviť ešte jedno pole, kde budeš ukladať minulé nákupy užívateľa, samozrejme, keď vypne prehliadač, všetko sa stratí).
Ten zvyšok by si už mal nejak doklepať sám, celé je to o tom hlavne si kontrolovať všetky vstupné údaje a rozumne ich spájať a vyhodnocovať...
Skús si taký prvý pokus spraviť, daj to niekde na web a ak by si mal ešte nejaké problémy, nejak sa to doklepe.
_________________
A. S. Tanenbaum píše: The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice. |
|
Registrovaný: 18.10.07 Prihlásený: 14.07.11 Príspevky: 107 Témy: 32 | 32 |
tak to je super, velmi si mi pomohol diiiiky
|
|
Registrovaný: 09.09.07 Prihlásený: 07.11.16 Príspevky: 3114 Témy: 233 | 233 Bydlisko: Nové Zámky |
tak toto sa zide aj mne,., diki..
akurat k tomuto otazka:
Kód: strip_tags($key)
ta premenna key, to je co? tam su tie texty k tomu produktu??
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď |
|
Registrovaný: 17.10.06 Prihlásený: 08.01.11 Príspevky: 1752 Témy: 17 | 17 |
$key je index v poli
_________________ A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII code table. |
|
Registrovaný: 30.05.06 Prihlásený: 08.10.14 Príspevky: 1756 Témy: 35 | 35 Bydlisko: BA - WESTSIDE |
Doplnenie o mazanie:
Kód: // vypis.php
require_once("produkty.php"); if (isset($_SESSION['produkt']) && count($_SESSION['produkt']) > 0) { echo " <table> <caption>Obsah vášho košíka: </caption> <tr> <th>Produkt</th> <th>Cena za 1 ks</th> <th>Počet ks</th> <th>Cena celkom</th> <th>Odstránenie</th> </tr> "; $cena_celkom = 0; foreach ($_SESSION['produkt'] as $key=>$value) { $cena_celkom = $cena_celkom + ($produkty[$key][2]*$value); echo " <tr> <td>".$produkty[$key][0]."</td> <td>".$produkty[$key][2]."</td> <td>".$value."</td> <td>".($produkty[$key][2]*$value)."</td> <td><a href=\"vymaz_produkt.php?id=".$key."\">Vymazať</a></td> </tr> "; } echo " <tr> <td colspan=\"3\">Celková cena nákupu: </td> <td>".$cena_celkom."</td> </tr> <table> "; } else { echo "Váš nákupný košík je prázdny!"; }
Kód: // vymaz_produkt.php
require_once("produkty.php"); if (isset($_SESSION['produkt']) && count($_SESSION['produkt']) > 0) { $vymazany = false; if (isset($_GET['id']) && trim(strip_tags($_GET['id'])) != ''){ foreach($produkty as $key => $value){ if($key == $_GET['id']){ unset($_SESSION['produkt'][$key]); $vymazany = true; } } } if ($vymazany){ echo "<p>Produkt vymazaný!</p>"; } else { echo "<p>Daný produkt sa v košíku nenachádza!</p>"; } } else { echo "Váš nákupný košík je prázdny!"; }
Mohlo by to fungovať.
_________________
A. S. Tanenbaum píše: The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice. |
|
Registrovaný: 18.10.07 Prihlásený: 14.07.11 Príspevky: 107 Témy: 32 | 32 |
este raz diky moc, ide to super
|
|
Registrovaný: 18.10.07 Prihlásený: 14.07.11 Príspevky: 107 Témy: 32 | 32 |
chcel by som spravit nieco take, ze vsetky polozky aj s poctom by som chcel vlozit do jedneho retazca, viem ze sa to da cez funkciu implode ale neviem presne ako. vedel by mi s tym niekto pomoct ?
|
|
Registrovaný: 17.10.06 Prihlásený: 08.01.11 Príspevky: 1752 Témy: 17 | 17 |
_________________ A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII code table. |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
ked chces nieco zlucit do jedneho retazca cez funkciu implode, musis mat tie jednotlive hodnoty ulozene v poli a potom uz len urcit, cim maju byt spojene:
Kód: <?php $pole = array("auto","moto","bike"); echo implode(",",$pole); //vyskedok bude auto,moto,bike ?>
Ale nechapem jednu vec, preco to chces davat vsetko do jedneho retazca? Nechaj si to radsej vsetko v poli, s tym sa ovela jednoduchsie pracuje...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 18.10.07 Prihlásený: 14.07.11 Príspevky: 107 Témy: 32 | 32 |
ja to potrebujem mat v jedom retazci pretoze chcem poslat mailom nazov produktov a pocet produktov a ked to davam do mailu tak to potrebujem mat v jednom retazci. da sa spravit nieco take ze by som do jedneho retazca vlozil vedla seba nazov produktu a pocet ? ale len tie co su v session, cize len tie co som si vybral do kosika
myslim to tak ze ja nechcem aby mi do retazca vlozil cele pole ale len jednu polozku z toho pola. skusal som to takto
$retazec = implode("<br />", $produkty[$key][0]);
ale toto mi vypise chybu ze mam zle argumenty. da sa to nejako spravit ?
|
|
Registrovaný: 29.07.10 Prihlásený: 29.07.10 Príspevky: 1 Témy: 0 | 0 |
môžem sa spýtať.. kedy vyprší session?
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Ak môžem, by som sa chcel spýtať, načo je treba presmerovávať, a rušiť $_POSTy??
|
|
Registrovaný: 09.09.07 Prihlásený: 07.11.16 Príspevky: 3114 Témy: 233 | 233 Bydlisko: Nové Zámky |
Lebo ked nejaku POST premennu ukladas do DB, tak ja budem stlacat F5 a tebe to spravi tisice zaznamov
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Blackshadow:
To nechápem, nemáš nejaký link kde je to popísané?? Je kopa $_POSTov ktoré sa ukladajú do DB a nikdy som o ničom podobnom nečítal...
|
|
Registrovaný: 09.09.07 Prihlásený: 07.11.16 Príspevky: 3114 Témy: 233 | 233 Bydlisko: Nové Zámky |
Kód: <?php if(!empty($_POST['text'])) { mysql_query("zapis ten text do DB s insertom"); }
<form method="post"> <input type="text" name="text"> <input type="submit" value="go"> </form> ?>
napis nieco do toho inputu a potvrd.. Potom stlacaj F5 (refresh)
a nasledne sa pozri, kolko mas zaznamov v DB
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Blackshadow
No vždy ma to upozorní, že som už odosielal, takže v tom nevidím také veľké riziko....či ako??
|
|
Stránka: 1 z 1
| [ Príspevkov: 17 ] | |
|