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.