Sunteți pe pagina 1din 6

smaranda.belciug@inf.ucv.

ro Laborator 12 Tehnologii Web si Programare Client Server

Construirea unui simplu co de cumprturi n PHP Pasul 1. Pregtirea bazei de date Relum exemplul cu librria. Presupunem c avem doar trei cri n librrie.
CREATE TABLE books ( id int(6) unsigned NOT NULL auto_increment, title varchar(100) NOT NULL default '', author varchar(100) NOT NULL default '', price decimal(3,2) NOT NULL default '0.00', PRIMARY KEY (id) ) TYPE=MyISAM; INSERT INTO books VALUES (1, 'Bla1', 'x', '24.99'); INSERT INTO books VALUES (2, 'Bla2', 'y', '17.99'); INSERT INTO books VALUES (3, 'Bla3', 'Oolon z', '14.99');

2. Identificarea cerinelor Cosul de cumprturi trebuie s afieze un mesaj pe toate paginile din site (mpreun cu propoziia: Ai 5 obiecte n co), care n momentul n care este apsat s afieze coul de cumprturi. Avnd n vedere c n baza de date sunt stocate detaliile despre stocuri, singura informaie necesar va fi id-ul fiecarui produs care este adugat n cos. Pentru acest lucru va trebui s folosim sesiuni PHP. Pasul 3. Folosirea sesiunilor n PHP Lucrul cu sesiuni n PHP este foarte uor de nteles. Pentru a le porni trebui s adugm session_start(); la nceputul codului. In variabilele sesiune se pot stoca valori sau array-uri. $_SESSION['name'] = 'Matei'; $_SESSION['age'] = 31; Pasul 4. Crearea coului Vom stoca coninutul coului de cumprturi ntr-o list, n care id-urile produselor sunt separate de virgul. Mai jos este codul pentru afiarea mesajului Ai X obiecte pe fiecare pagin.
function writeShoppingCart() { $cart = $_SESSION['cart']; if (!$cart) { return '<p>Nu ai niciun obiect in cos</p>'; } else { // parsam variabila de sesiune cart

smaranda.belciug@inf.ucv.ro
$items = explode(',',$cart); $s = (count($items) > 1) ? 's':''; return '<p>Ai <a href="cart.php">'.count($items).' obiecte'.$s.' in cos</a></p>'; } }

Aceast funcie ia valoarea variabilei de sesiune cart i o salveaz ntr-o variabil local (pentru a scrie mai puin). Dac avem coul gol, atunci returnm un anumit mesaj; dac nu, folosim funcia explode() pentru a crea un array cu toate produsele din co i apoi cu count() le numrm i afim rezultatul (variabila $s este folosit pentru a afia corect elementele care apar de mai multe ori). Pentru a afia mesajul corect pe site scriem: echo writeShoppingCart(); Pasul 5. Show me the money Jerry Maguire La pagina coului de cumprturi nsui (cart.php) se poate ajunge n mai multe moduri. Utilizatorul ar putea s fac click pe un link creat de writeShoppingCart() de mai sus; sau a apsat pe un link Add to cart din pagina unui produs. Daca este cea de-a doua, trebuie s interceptm click-ul respectiv i s updatm coninutul coului nainte de a afia noua list de produse. Tot ce trebuie este s adugam id-ul produsului sesiunii cart. Link-ul produselor ar arata asa.
<a href="cart.php?action=add&id=1">Add to cart</a>

Id-ul poate fi extras din $_GET[id] i adugat la co.


$cart = $_SESSION['cart']; if ($cart) { $cart .= ','.$_GET['id']; } else { $cart = $_GET['id']; } $_SESSION['cart'] = $cart;

Pasul 6. Obiecte multiple, un singur produs Este posibil ca utilizatorul s aib mai multe de un obiect de acelai tip n co. Deoarece nu vrem s duplicm obiectele cnd afim coul, trebuie s cretem cantitatea.
$cart = $_SESSION['cart']; if ($cart) { $items = explode(',',$cart); $contents = array(); foreach ($items as $item) { $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1; }

smaranda.belciug@inf.ucv.ro De aceast dat, dup ce am folosit explode() pentru lista de id-uri, le-am iterat ntrun nou array $contents, care const n perechi de cheie valoare, unde cheia este id-ul iar valoarea este cantitatea produsului din coul de cumprturi. Dac avem 1,1,3,1,2 rezult 1 3, 2 1, 3 1. Acum c am stabilit numrul de obiecte din co, s facem un query n baza de date pentru fiecare dintre ele i s le afim ntr-un tabel:
$total = 0; $output[] = '<table>'; foreach ($contents as $id=>$qty) { $sql = 'SELECT * FROM books WHERE id = '.$id; $result = $db->query($sql); $row = $result->fetch(); extract($row); $output[] = '<tr>'; $output[] = '<td><a href="cart.php?action=delete&id='.$id.'" class="r">Remove</a></td>'; $output[] = '<td>'.$title.' by '.$author.'</td>'; $output[] = '<td>&pound;'.$price.'</td>'; $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>'; $output[] = '<td>&pound;'.($price * $qty).'</td>'; $total += $price * $qty; $output[] = '</tr>'; } $output[] = '</table>'; $output[] = '<p>Total: &pound;'.$total.'</p>';

Pasul 7. tergerea unui produs Dup cum arat codul mai sus, se poate terge un produs din co, la fel cum se adaug: <a href="cart.php?action=delete&id=1">Remove</a> S expandm codul de mai devreme prin adugarea unui switch():
$cart = $_SESSION['cart']; $action = $_GET['action']; switch ($action) { case 'add': if ($cart) { $cart .= ','.$_GET['id']; } else { $cart = $_GET['id']; } break; case 'delete': if ($cart) { $items = explode(',',$cart); $newcart = ''; foreach ($items as $item) { if ($_GET['id'] != $item) { if ($newcart != '') { $newcart .= ','.$item;

smaranda.belciug@inf.ucv.ro
} else { $newcart = $item; } } } $cart = $newcart; } break; } $_SESSION['cart'] = $cart;

Cazul delete itereaz elementele din sesiunea cart, cutnd dup produsele pe care nu care le tergem, adugnd-ule ntr-o variabil temporar. Cnd terminm coninutul lui $newcart este trecut in $cart. Pasul 8. Updatarea unui produs In final, vom permite clientului s updateze coninutul coului manual, schimbnd cantitate din casua produsului. Pentru asta avem nevoie de un formular i de un buton de update cart pentru submit.
$output[] = '<form action="cart.php?action=update" method="post" id="cart">'; $output[] = '<table>'; foreach ($contents as $id=>$qty) { $sql = 'SELECT * FROM books WHERE id = '.$id; $result = $db->query($sql); $row = $result->fetch(); extract($row); $output[] = '<tr>'; $output[] = '<td><a href="cart.php?action=delete&id='.$id.'" class="r">Remove</a></td>'; $output[] = '<td>'.$title.' by '.$author.'</td>'; $output[] = '<td>&pound;'.$price.'</td>'; $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>'; $output[] = '<td>&pound;'.($price * $qty).'</td>'; $total += $price * $qty; $output[] = '</tr>'; } $output[] = '</table>'; $output[] = '<p>Grand total: &pound;'.$total.'</p>'; $output[] = '<div><button type="submit">Update cart</button></div>'; $output[] = '</form>';

De reinut este c n ciuda faptului c formularul folosete metoda POST, action-ul include o variabil GET, action=update. Din nou, putem expanda codul pentru a procesa updatri.
case 'update': if ($cart) { $newcart = ''; foreach ($_POST as $key=>$value) { if (stristr($key,'qty')) { $id = str_replace('qty','',$key);

smaranda.belciug@inf.ucv.ro
$items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart); $newcart = ''; foreach ($items as $item) { if ($id != $item) { if ($newcart != '') { $newcart .= ','.$item; } else { $newcart = $item; } } } for ($i=1;$i<=$value;$i++) { if ($newcart != '') { $newcart .= ','.$id; } else { $newcart = $id; } } } } } $cart = $newcart; break;

Interogm coninutului array-ului $_POST (care conine cantitile) i extragem perechile de id-uri i valori. Pentru fiecare produs tergem apoi toate instanele existente i rescriem noua cantitate. Mai jos este funcia final pentru afiarea produselor din co.
function showCart() { $cart = $_SESSION['cart']; if ($cart) { $items = explode(',',$cart); $contents = array(); foreach ($items as $item) { $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1; } $output[] = '<form action="cart.php?action=update" method="post" id="cart">'; $output[] = '<table>'; foreach ($contents as $id=>$qty) { $sql = 'SELECT * FROM books WHERE id = '.$id; $result = $db->query($sql); $row = $result->fetch(); extract($row); $output[] = '<tr>'; $output[] = '<td><a href="cart.php?action=delete&id='.$id.'" class="r">Remove</a></td>'; $output[] = '<td>'.$title.' by '.$author.'</td>'; $output[] = '<td>&pound;'.$price.'</td>'; $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';

smaranda.belciug@inf.ucv.ro
$output[] = '<td>&pound;'.($price * $qty).'</td>'; $total += $price * $qty; $output[] = '</tr>'; } $output[] = '</table>'; $output[] = '<p>Grand total: &pound;'.$total.'</p>'; $output[] = '<div><button type="submit">Update cart</button></div>'; $output[] = '</form>'; } else { $output[] = '<p>You shopping cart is empty.</p>'; } return join('',$output); }

S-ar putea să vă placă și

  • Visucam 500 - Instrucţiuni de Utilizare PDF
    Visucam 500 - Instrucţiuni de Utilizare PDF
    Document2 pagini
    Visucam 500 - Instrucţiuni de Utilizare PDF
    Mirela Marinescu
    Încă nu există evaluări
  • Afis Date Personale
    Afis Date Personale
    Document1 pagină
    Afis Date Personale
    Mirela Marinescu
    Încă nu există evaluări
  • Corelare Pentacam
    Corelare Pentacam
    Document2 pagini
    Corelare Pentacam
    Mirela Marinescu
    Încă nu există evaluări
  • Traducere 532s
    Traducere 532s
    Document81 pagini
    Traducere 532s
    Mirela Marinescu
    Încă nu există evaluări
  • Manual de Utilizare Cerrus 400
    Manual de Utilizare Cerrus 400
    Document201 pagini
    Manual de Utilizare Cerrus 400
    Mirela Marinescu
    Încă nu există evaluări
  • Traducerea YAG - III
    Traducerea YAG - III
    Document33 pagini
    Traducerea YAG - III
    Mirela Marinescu
    Încă nu există evaluări
  • INVESTIGATII PP
    INVESTIGATII PP
    Document15 pagini
    INVESTIGATII PP
    Mirela Marinescu
    Încă nu există evaluări
  • WEBlab 7
    WEBlab 7
    Document9 pagini
    WEBlab 7
    Mirela Marinescu
    Încă nu există evaluări
  • WEB Ex7 8
    WEB Ex7 8
    Document3 pagini
    WEB Ex7 8
    Mirela Marinescu
    Încă nu există evaluări
  • GLAUCOMUL
    GLAUCOMUL
    Document10 pagini
    GLAUCOMUL
    Mirela Marinescu
    100% (1)
  • WEBlab 10
    WEBlab 10
    Document9 pagini
    WEBlab 10
    Mirela Marinescu
    Încă nu există evaluări
  • WEBlab 9
    WEBlab 9
    Document15 pagini
    WEBlab 9
    Mirela Marinescu
    Încă nu există evaluări
  • XML Form
    XML Form
    Document1 pagină
    XML Form
    Mirela Marinescu
    Încă nu există evaluări
  • Contract - Scolarizare - Optica Si Optometrie - FSE PDF
    Contract - Scolarizare - Optica Si Optometrie - FSE PDF
    Document4 pagini
    Contract - Scolarizare - Optica Si Optometrie - FSE PDF
    Mirela Marinescu
    Încă nu există evaluări
  • WEBlab 8
    WEBlab 8
    Document17 pagini
    WEBlab 8
    Mirela Marinescu
    Încă nu există evaluări
  • WEBlab 5
    WEBlab 5
    Document18 pagini
    WEBlab 5
    Mirela Marinescu
    Încă nu există evaluări
  • WEBlab 6
    WEBlab 6
    Document10 pagini
    WEBlab 6
    Mirela Marinescu
    Încă nu există evaluări
  • WEBlab 2
    WEBlab 2
    Document12 pagini
    WEBlab 2
    Mirela Marinescu
    Încă nu există evaluări
  • WEBlab 4
    WEBlab 4
    Document12 pagini
    WEBlab 4
    Mirela Marinescu
    Încă nu există evaluări
  • WEB Ex1 2
    WEB Ex1 2
    Document3 pagini
    WEB Ex1 2
    Mirela Marinescu
    Încă nu există evaluări
  • WEBlab 1
    WEBlab 1
    Document35 pagini
    WEBlab 1
    Mirela Marinescu
    Încă nu există evaluări
  • Web Lab 3
    Web Lab 3
    Document25 pagini
    Web Lab 3
    Sanfira Marius
    Încă nu există evaluări
  • WEB Ex3 4
    WEB Ex3 4
    Document2 pagini
    WEB Ex3 4
    Mirela Marinescu
    Încă nu există evaluări
  • Lab 10 Java
    Lab 10 Java
    Document6 pagini
    Lab 10 Java
    Mirela Marinescu
    Încă nu există evaluări
  • Lab 8 Java
    Lab 8 Java
    Document18 pagini
    Lab 8 Java
    Mirela Marinescu
    Încă nu există evaluări
  • Proiect Web Cerinte
    Proiect Web Cerinte
    Document1 pagină
    Proiect Web Cerinte
    Mirela Marinescu
    Încă nu există evaluări
  • Lab 12 Java
    Lab 12 Java
    Document15 pagini
    Lab 12 Java
    Mirela Marinescu
    Încă nu există evaluări
  • Lab 11 Java
    Lab 11 Java
    Document9 pagini
    Lab 11 Java
    Mirela Marinescu
    Încă nu există evaluări
  • Lab 9 Java
    Lab 9 Java
    Document16 pagini
    Lab 9 Java
    Mirela Marinescu
    Încă nu există evaluări