Lumea reala
In cursul acestei serii, ti-am oferit un tur al PHP, invatandu-te tot ce trebuie sa stii pentru a te lansa in utilizarea acestui limbaj de programare extrem de puternic. Ai invatat cum sa procesezi siruri, sa scrii functii, sa construiesti obiecte si sa generezi exceptii. Ai mai invatat cum sa citesti datele introduse de utilizatori in formulare, sa cauti prin baze de date si sa utilizezi cookie-uri si sesiuni pentru a memora starea aplicatiei. Nu mai esti bobocul timid intr-ale PHP-ului dinainte, ci un luptator PHP curajos si puternic, gata de a prelua tot ce lumea (sau seful tau) arunca spre tine.
Exista un singur dezavantaj. Desigur ca ai tot armamentul, dar inca nu l-ai utilizat niciodata in lumea reala. Iata rolul acestor parti finale ale PHP 101.
In cele doua capitole finale ale acestei serii de tutoriale vei putea citi despre implementarea a doua aplicatii PHP din lumea reala. Nu numai ca vei fi introdus in dezvoltarea propriu-zisa a aplicatiilor utilizand PHP, dar vei avea ocazia sa testezi toata teoria cu care ai fost indoctrinat in ultimele saptamani.
Intrebari arzatoare
Prima aplicatie este destul de simpla. Este un sistem de votare pentru un site web, care iti permite sa calculezi rapid ceea ce cred vizitatorii tai despre anumite subiecte. Acest mecanism de vot online este destul de popular deoarece iti permite sa afli ce gandesc vizitatorii tai si sa iti faci site-ul cat mai dinamic si interactiv.
Mai mult ca sigur ca ai vazut un astfel de sistem functionand pe multe portaluri web si ai o imagine destul de clara in minte despre cum functioneaza.
Oricum, este un bun exercitiu sa notezi exact ceea ce ar trebui sa execute produsul final inainte de a incepe sa scrii chiar si o singura linie de cod (It-istii numesc asta definirea cerintelor).
- Trebuie sa existe un mecanism prin care utilizatorul poate vedea o intrebare si apoi poate selecta dintr-o lista de raspunsuri posibile. Acest "vot" trebuie sa fie ulterior captat in sistem si adaugat numarului de voturi aferent acelei intrebari.
- Trebuie sa existe o metoda prin care administratorul siteului poate adauga noi intrebari sau le poate sterge pe cele vechi. Pentru a stoca aceste intrebari si raspunsuri poti crea un tabel intr-o baza de date SQL, dar e posibil ca administratorul site-ului sa nu fie destul de priceput in SQL pentru a modifica aceste date manual. Asadar, ar trebui furnizata o interfata de tip formular pentru a-i face munca mai simpla.
- In mod evident, trebuie sa existe o modalitate de a vedea rapoarte ale voturilor furnizate în cazul fiecarei intrebari si a raspunsurilor aferente. Raportul ar trebui sa contina un calcul al voturilor totale inregistrate la o intrebare, dar si o separare a voturilor obtinute pentru fiecare raspuns.
Apare o intrebare importanta: Are vreun rost sa stabilesti numarul de variante disponibile pentru fiecare intrebare? In opinia mea, nu are, deoarece numarul variantelor disponibile se va schimba in cazul fiecarei intrebari. Este mai bina ca acest numar sa fie variabil si sa-i permiti administratorului site-ului sa adauge cate variante considera a fi necesare. Poti oricum defini o limita superioara cu privire la numarul de variante posibile pentru fiecare intrebare - cel mai potrivit ar fi sa pui 5.
Avand aceasta schita in minte, urmatorul pas este sa creezi o baza de date care sustine aceste cerinte.
Designer al bazelor de date
Aceasta este structura tabelelor pe care le vei utiliza pentru aceasta aplicatie, stocata in db.sql:
CREATE TABLE `questions` (
`qid` tinyint(3) unsigned NOT NULL auto_increment,
`qtitle` varchar(255) NOT NULL default '',
`qdate` date NOT NULL default '0000-00-00',
PRIMARY KEY (`qid`)
);
CREATE TABLE `answers` (
`aid` tinyint(3) unsigned NOT NULL auto_increment,
`qid` tinyint(4) NOT NULL default '0',
`atitle` varchar(255) NOT NULL default '',
`acount` int(11) NOT NULL default '0',
PRIMARY KEY (`aid`)
);
Dupa cum poti observa este destul de simplu: un tabel pentru intrebari si unul pentru raspunsuri. Cele doua tabele sunt conectate prin intermediul unui camp qid. Cu aceasta structura poti avea un numar infinit de raspunsuri la fiecare intrebare. (Nu iti doresti asta - ai prefera ca acest numar sa fie 5 sau mai putin - dar logica implementarii acestei reguli este mai bine situata la nivelul aplicatiei decat la nivelul bazei de date).
Pentru a incepe si pentru a-ti oferi o idee mai buna cu privire la functionarea acestei structuri in lumea reala, insereaza o intrebare in baza de date, impreuna cu trei raspunsuri posibile:
INSERT INTO `questions` VALUES (1, 'Ce versiune de PHP folosesti?', '2008-10-15');
INSERT INTO `answers` VALUES (1, 1, 'PHP 3.x', 0);
INSERT INTO `answers` VALUES (2, 1, 'PHP 4.x', 0);;
Alternativ, poti crea o noua baza de date si sa tastezi source db.sql in command prompt pentru a incarca direct structurile tabelelor si datele.
Sistemul de vot
Dupa ce ne-am ocupat de baza de date, este timpul sa trecem la paginile web pe care le vede utilizatorul. Prima este user.php, care se conecteaza la baza de date pentru a obtine ultima intrebare din tabel si o afiseaza impreuna cu toate variantele de raspuns. Iata codul:
<html>
<head><basefont face = 'Arial'></head>
<body>
<?php
include('config.php');
$connection = mysql_connect($host, $user, $pass) or die('EROARE: Nu s-a putut realiza conexiunea!');
mysql_select_db($db) or die('EROARE: Nu s-a putut selecta baza de date!');
$query = "SELECT aid, atitle FROM answers WHERE qid = '$qid'";
$result = mysql_query($query) or die("EROARE: $query.".mysql_error());
if (mysql_num_rows($result) > 0) {
$row = mysql_fetch_object($result);
$qid = $row->qid;
echo '<h2>'.$row->qtitle .'</h2>';
echo "<form method = post action = 'user_submit.php'>";
$query = "SELECT aid, atitle FROM answers WHERE qid = '$qid'";
$result = mysql_query($query) or die("EROARE: $query.".mysql_error());
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_object($result)) {
echo "<input type = radio name = aid value = '".$row->aid."'>'".$row->atitle."'</input><br />";
}
echo "<input type = hidden name = qid value = '".$qid."'>";
echo "<input type = submit name = submit value = 'Vote!'>";
}
echo '</form>';
}
else {
echo '<font size="-1">Nu exista intrebari configurate</font>';
}
mysql_close($connection);
?>
</body>
</html>
|