go
komunikace  internet  prog.  web-prog.  hardware  software  bezpečnost  magazín  disk.fórum
   

Nákupní košík v PHP (2.)

počet názorů: 9   poslední: 12.03.2004 10:27:12   číst názory   přidat názor   vytisknout

Dokončení krátkého seriálu o nákupním košíku. Dnes si ukážeme práci se sessions a cookies. Nakonec bude také potřeba spočítat celkovou cenu objednávky pomocí JavaScriptu.


Nákupní košík musí provádět čtyři základní funkce. Musí umožnit uživateli přidávat a mazat výrobky z jejich košíku. Pak také musí umět měnit počet položek a spočítat celkovou cenu zásilky.

Soubor kosik.php obsahuje čtyři funkce popsaná v předchozím odstavci. Použijeme rozcestník switch, aby byl script přehlednější.

<?php
include("db.php");

switch($_GET["action"])
{
 case "add":
 { 
   addprod($_GET["id"], $_GET["pocet"]); 
   ukazkosik(); 
   break; 
 } 
 case "update": 
 { 
   updateprod($_GET["id"], $_GET["pocet"]); 
   ukazkosik(); 
   break; 
 } 
 case "remove": 
 { 
   removeprod($_GET["id"]); 
   ukazkosik(); 
   break; 
 } 
 default: 
 { 
   ukazkosik(); 
 } 
}

Jak vidíte, používám proměnou $_GET, která byla do PHP přidána až ve verzi 4.2. Pokud používáte starší verzi, budete muset tuto proměnou nahradit $HTTP_GET_VARS. Používání $_GET je ale rychlejší.

V rozcestníku switch máme čtyři možné případy, jak postupovat dál. Podívejme se na ně podrobněji:

  • add: Když kliknete na odkaz "Přidat" v souboru seznam.php, zavoláte funkci addprod(), která přidá položku z databáze podle ID.
  • update: Změní se počet produktů, které si chce uživatel objednat. Jak uvidíte, každá položka má vysunovací seznam s počtem, kolikrát ho chceme objednat. Při změně změní cenu i počet výrobků v košíku.
  • remove: smaže produkt z košíku

Když navštívíme dokument kosik.php bez dalších parametrů, je zavolána funkce ukazkosik(). Nyní si ukážeme funkci addprod(), která má dva parametry (id a počet kůsů).

function addprod($id, $pocet)

Hlavní část fuknce addprod() kontroluje, jestli už není produkt náhodou v zákazníkově košíku. Pokud ano, zvětšíme počet kusů, ale nevložíme ho znovu.

$result = mysql_query("select count(*) from kosik where 
cookieid = '" .
 KosikId() . "' and produktid = $id"); 

$row = mysql_fetch_row($result); 
$pocetradku = $row[0]; 

if($pocetradku == 0) 
{
// položka neexistuje, a proto ji uložíme

mysql_query("insert into kosik(cookieid, produktid, pocet) values('" . 
KosikId() . "', $id, $pocet)");
} 
else 
{
// položka existuje, zvýšíme počet

updateprod($id, $pocet); 
}

Při pohledu na kód si jednoduše odvodíte jeho funkčnost. Když proměnná $pocetradku je nula (produkt ještě není v košíku), pak vložíme do nákupního košíku vybranou položku. Jestliže proměnná není nula, stačí pouze přidat jeden kus pomocí funkce updateprod().

function updateprod($id, $pocet)

Funkce pokračuje jednoduchým SQL příkazem, zvýšením počtu kusů vybraného výrobku. Pole cookieid použijeme ke kontrole uživatelova session ID k patřičnému produktu, abychom si byli jisti, že bude upraven pouze počet kusů správného uživatele.

mysql_query("update kosik set pocet = $pocet where cookieid = '" . 
KosikId() . "' and produktid = $id");

Odstranění položky z košíku je jediná věc, o kterou se stará funkce removeprod(). K vymazání z databáze potřebujeme pouze parametr ID.

function removeprod($id)

mysql_query("delete from kosik where cookieid = '" . KosikId() . "' and 
produktid = $id");

Teď máme hotové základní funkce, které budeme potřebovat. Pokročilejší funkce si ukážeme v dalším odstavci.

Sestavení nákupního košíku

Nakonec musíme vytvořit seznam všech položek, které jsou v nákupním košíku, a také spočítat celkovou cenu zásilky. U každého výrobku bude vysunovací seznam, ve kterém zvolíte počet kusů.

Začneme SQL dotazem INNER JOIN k získání seznamu produktů z tabulky kosik a detailů z tabulky produkty.

$result = mysql_query("select * from kosik inner join produkty on 
kosik.produktid = produkty.id where kosik.cookieid = '" 
. KosikId() . "'
 order by produkty.jmeno asc");

Když jsme znovu získali seznam prvků, zobrazíme je jako řádky tabulky.

while($row = mysql_fetch_array($result))
{
// zjistí celkovou cenu
$totalcena += ($row["pocet"] * $row["cena"]);
?>
<tr>
<td width="15%">
<select name="<?php echo $row["id"]; ?>" 
onChange="updatepocet(this)">
<?php

for ($i = 1; $i <= 20; $i++)
{
  echo "<option ";
  if ($row["pocet"] == $i) {
  echo " selected ";
} else {
  echo ">" . $i . "</option>";
}
}
?>

</select>
</td>
<td width="55%">
<?php echo $row["jmeno"]; ?>
</td>
<td width="20%">
<?php echo $row["cena"]; ?> Kč
</td>
<td width="10%">
<a href="kosik.php?action=remove&id=<?php echo $row["id"]; 
?>">Odstranit</a>
</td>
</tr>
<?php
}

Celkovou cenu položek uchováme v proměnné $totalcena. Zjistíme ji takto:

$totalcena += ($row["pocet"] * $row["cena"]);

// jiný způsob zápisu
$totalcena = $totalcena + ($row["pocet"] * $row["cena"]);

Důležitý je tag select, který při události onChange zavolá funkci JavaScriptovou updatepocet(). Tato funkce je definována v hlavičce souboru. Je velmi jednoduchá a vlastně jen přesměrovává prohlížeč na jiný dokument s parametry, které obstarají správnou funkci.

<script language="JavaScript">

function updatepocet(polozka)
{
id = polozka.name;
pocet = polozka.options[polozka.selectedIndex].text;

document.location.href = 
'kosik.php?action=update&id='+id+'&pocet='+pocet;
}
</script>

Při zavolání funkce zjistí vybranou hodnotu počtu kusů a také ID položky. Pak je vloží do parametrů adresy souboru kosip.php.

Závěr

V tomto krátkém seriálu jste si mohli vytvořit pomocí PHP, mySQL a JavaScriptu základ internetového obchodu. Nákupní košík je dobrý odrazový můstek pro stavbu celého eshopu. Nebyly uveřejněny všechny zdrojové kódy, jen ty zajímavější. Kompletní script si můžete stáhnou zde.




Autor: Jan Ježek, informace o autorovi
Rubrika: Programování - PHP
Čtenářů: 1007     Zobrazení: 1254

Související články:
Nákupní košík v PHP (1.)

Jak hodnotíte tento článek?

lepší <-->horší
Názory: počet: 9   poslední: 12.03.2004 10:27:12   číst názory   přidat názor   vytisknout


Nadpis Autor Datum
malá chyba v raru Karel 21.01.2004 05:46:28
Dobry Ondra 23.01.2004 07:38:12
  Re: Dobry Jakub Podhorský 23.01.2004 12:36:26
  Re: Dobry Pepa Z. 23.01.2004 14:05:11
    Re: Dobry Jakub Podhorský 23.01.2004 20:29:32
    Re: Dobry Creckx 25.01.2004 00:42:03
cekly e-shop popo 14.02.2004 22:35:00
  Re: cekly e-shop -FtW- 24.02.2004 20:39:57
Nefunguje Petr 12.03.2004 10:27:12
Nový příspěvek
Věc:
Jméno:
E-mail:

- nepoužívejte HTML k formátování textu příspěvku
- nepoužívejte A HREF= pro odkazy, aktivní budou automaticky
- odřádkování provádějte klávesou ENTER, nikoliv tagem <br>
zasílat odpovědi na můj e-mail











(c) P.E.S. consulting, s.r.o. 2000-2004. Provozovatel nezodpovídá za obsah a původ článků a diskuzních příspěvků, odpovědnost nesou jednotliví redaktoři a autoři. Informace o PC Světě naleznete zde
Novinka: Bazar
Na PC Světě nově zprovozněn bazar techniky a příslušenství
www.pcsvet.cz/bazar/
ADSL připojení
ADSL připojení
Anketa
Novinky e-mailem
Zasílání denního nebo týdenního přehledu nových článků
Nový redaktor
Chcete se stát přispivatelem pro PC Svět? info a registrace zde



ATLAS.CZ
powered by PES RedSys 3.0





© 2000-2004 pcsvět.cz / pcsvet@pcsvet.cz / ISSN 1213-6042