ALTE DOCUMENTE |
APLICAŢIE
V.1. Descrierea site-ului
În cadrul acestei aplicatii prin combinarea a PHP MySQL s-a dorit realizarea unui site dinamic care da posibilitatea vizitatorilor sai sa-si gaseaca perechea potrivita. Site-ul reprezinta implementarea Web a unei agentii matrimoniale. Utilizatorii se pot înregistra, pentru a-si introduce mai multe date personale. Pot vizualiza informatiile celorlati membrii si cauta anumite persoane în functie de ccriteriil selectate.
Aplicatia implementeaza si unele functionalitati avansate, cum ar fi trimiterea automata de e-mail catre adresele specificate de utilizatori si încarcarea de fisiere pe server.
V.1.1. Structura site-ului
Pentru o mai bun 14114l1123o 59; organizare a aplicatiei fisierele au fost incluse, pe cât posibil, în directoare cu denumiri semnificative. Astfel, directorul images contine toate imaginile incluse în paginile site-ului, în directorul photos sunt stocate fotografiile membrilor înregistrati. Directorul templates contine fisierele .php folosite ca template pentru toate paginile din site, iar directorul styles contine fisierele .css (Cascading Style Sheet) folosite pentru realizarea layout-ului site-ului. În directorul functions sunt continute fisiere .php care vor fi incluse în alte fisiere si în ele sunt definite mai multe functii utile.
Paginile principale ale aplicatiei sunt urmatoarele: index.php, members.php, register.php, search.php, contact.php si about.php. Astfel, index.php reprezinta pagina home a site-ului, paginile contact.php si about.php contin informatii despre autorul aplicatiei si, respectiv, modul de contactare a acestuia. Pagina register.php contine un formular html pe care utilizatorii trebuie sa-l completeze pentru a se putea înregistra ca membrii ai site-ului. Daca formularul este completat corect si înregistrarea este realizata cu succes iar utilizatorului îi este prezentat un mesaj sugestiv si este trimis un e-mail catre adresa specificata de acesta, respectiv, daca înregistrarea esueaza, este afisat un mesaj de eroare corespunzator. Pagina members.php contine lista tuturor membrilor înregistrati, cu câteva informatii reprezentative pentru fiecare si cu legaturi catre paginile personale care contin informatii detaliate ale acestora. Pagina search.php cuprinde un formular html care permite cautarea în baza de date folosind mai multe criterii. Rezultatele cautarii sunt afisate în pagina search_results.php, având acelasi layout ca si pagina member_details.php, pagina cu informatii detaliate despre fiecare membru.
V.1.2. Utilizarea template-urilor si a Style Sheet-urilor
Pentru pastrarea aceluiasi layout pentru toate paginile, ca si pentru a-l putea modifica sau înlocui cu usurinta, paginile au fost implementate pe baza unui fisier folosit ca template, caruia i-a fost atasat un fisier .css.
Fisierul template folosit pe care este structurat site-ul contine un tabel format din trei rânduri ce îndeplinesc rolurile de header, content si footer. Partea de header consta într-un nou tabel, care la rândul sau contine trei rânduri, folosite pentru titlu, bara de meniu si bara de stare. Titlul va fi setat pentru fiecare pagina care implementeaza acest template. Bara de meniuri este realizata prin includerea fisierului menubar.php, iar bara de stare este implementata în fisierul statusbar.php. Partea de content va fi, de asemenea, setata separat pentru fiecare fisier al site-ului. Partea de footer implementata în fisierul footer.php contine informatii de tip Copyright.
Codul complet al fisierului template.php este prezentat în continuare:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>template</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="styles(css)/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="800" align="center">
<tr>
<td>
<table width="100%" align="center">
<tr>
<td align="center">title</td>
</tr>
<tr>
<td><?php include "menubar.php"; ?></td>
</tr>
<tr>
<td><?php include "statusbar.php"; ?></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">content</td>
</tr>
<tr>
<td>
<?php
include "footer.php";
?>
</td>
</tr>
</table>
</body>
</html>
Fisierul .css contine declaratiile de stil pentru elementele HTML folosite în cadrul paginilor. Acestea pot fi cu usurinta modificate si, datorita faptului ca acest Style Sheet este aplicat tuturor paginilor, întregul layout al site-ului este modificat automat.
V.1.3. Crearea bazei de date MySQL
Pentru stocarea informatiilor despre membrii aplicatiei s-a folosit o baza de date MySQL. Aceasta este formata din patru tabele, si anume members, care contine informatiile despre membrii, languages, care contine o lista a limbilor pe care utilizatorii le pot selecta, spokenlanguages, care reprezinta legaturile dintre fiecare membru si limbile cunoscute de acesta si photos, care contine informatiile despre fotografiile mebrilor, maximum cinci fotografii pentru fiecare membru.
Structura tabelului members, cel mai complex dintre tabele bazei de date folosite, este descrisa în figura urmatoare, precum si tabelele languages, spokenlanguages si photos:
V.2. Utilizarea bazelor de date MySQL
PHP include o biblioteca de functii care furnizeaza o interfata cu sistemul MySQL de gestiune a bazelor de date. Folosind aceste functii, un program PHP poate obtine accesul la datele rezidente într-o baza de date MySQL si le poate modifica.
Majoritatea interactiunilor cu o baza de date se desfasoara dupa un model secvential simplu:
Se deshide o conexiune cu serverul MySQL.
Se specifica baza de date la care se va obtine accesul.
Se emit interogari SQL, se obtine accesul la rezultatele interogarilor si se executa operatii non-SQL.
Se închide conexiunea cu serverul MySQL.
V.2.1. Conectarea la serverul MySQL
Pentru a se realiza conectarea la un server MySQL, se invoca functia mysql_connect(), a carei sintaxa este urmatoarea:
mysql_connect(nume_gazda, nume_utilizator, parola)
unde nume_gazda este numele gazdei pe care ruleaza serviciul MySQL, nume_utilizator este identificatorul de utilizator MySQL care va fi folosit, iar parola este parola MySQL asociata identificatorului de utilizator. Functia returneaza false în caz de esec, iar în caz contrar returneaza o valoare, denumita identificator de legatura, care serveste ca instrument de manipulare pentru accesul la serverul MySQL.
Se poate omite numele gazdei, identificatorul de utilizator si parola, sau toate cele trei argumente. Daca se procedeaza astfel, vor fi luate în considerare, în mod prestabilit, urmatoarele valori:
-numele gazdei: localhost
-identificatorul de utilizator: identificatorul de utilizator al procesului server MySQL
-parola: o parola vida
În realizarea acestui site, conectarea la serverul MySQL a fost posibila folosind functia connectdb(), implementata în fisierul connection.php, inclus în directorul functions, astfel :
<?php
function connectdb()
?>
V.2.2. Selectarea bazei de date
Dupa ce programul a obtinut o conexiune cu serverul MySQL, programul poate specifica baza de date la care va avea acces. Pentru aceasta, se invoca functia mysql_select_db(), care are urmatoarea forma
mysql_select_db(baza_de_date)
unde baza_de_date este un sir care contine numele bazei de date la care urmeaza a se obtine acces. Functia returneaza true daca poate obtine accesul la baza de date, respectiv false în caz contrar.
Selectarea bazei de date a fost implementata tot în functia connectdb() prezentata mai sus, astfel:
$db=mysql_select_db("adylic");
V.2.3. Detectarea aparitiei erorilor
Biblioteca MySQL din PHP furnizeaza doua functii de verificare a erorilor, si anume mysql_errno() si mysql_error() Fiecare functie returneaza un rezultat care reflecta eroarea, daca exista, asociata celei mai recente operatii cu MySQL. Daca programul executa o secventa de operatii MySQL, iar prima operatie genereaza o eroare, informatiile despre erorile respective sunt pierdute în momentul initierii celei de a doua operatii.
Nici una din cele doua functii nu necesita argumente. Functia mysql_errno() returneaza un cod numeric de eroare, în timp ce functia mysql_error() returneaza o descriere textuala a erorii. Daca nu s-a produs nici o eroare, codul numeric al erorii este zero si descrierea are ca valoare un sir vid.
Informatiile de eroare sunt disponibile numai daca este activa o conexiune cu serverul MySQL, deci nu se poate folosi nici una dintre aceste functii pentru a raporta erorile asociate functiei mysql_connect().
Incluzând si mecanismul de detectare a erorilor, functia connectdb() arata astfel :
<?php
function connectdb()
?>
V.2.4. Eliminarea mesajelor de eroare
Numeroase functii PHP pot produce erori sau mesaje de avertizare, dar PHP furnizeaza functia error_reporting(), care permite eliminarea mesajelor nedorite. Functia are urmatoarea forma:
error_reporting (masca)
unde masca specifica tipul mesajelor care vor fi raportate. Daca se specifica zero ca valoare a atributului masca, nu va fi raportat nici un mesaj. Daca se specifica E_ALL ca valoare a atributului masca, vor fi raportate toate mesajele.
V.2.5. Închiderea conexiunii cu serverul MySQL
Pentru a închide o conexiune cu serverul MySQL se invoca functia mysql_close(). Functia returneaza true în caz de reusita; în caz contrar returneaza false. În general nu este necesara invocarea functiei mysql_close(), deoarece PHP închide automat conexiunile deschise cu bazele de date atunci când un script îsi încheie executia.
V.2.6. Executarea interogarilor UPDATE, INSERT si DELETE
Din punctul de vedere al limbajului PHP, exista doua categorii de interogari SQL:
Ambele categorii de interogari sunt emise folosind functia mysql_query(), dar verificarea si prelucrarea celor doua categorii de rezultate ale interogarilor sunt procese destul de diferite.
V.2.7. Functia mysql_query()
Functia mysql_query() executa o interogare specificata. Functia are urmatoarea forma:
mysql_query(interogare)
unde interogare este un sir care contine intergoarea care urmeaza a fi executata. Functia returneaza true daca serverul a reusit sa execute interogarea; în caz contrar, returneaza false.
V.2.8. Verificarea interogarilor care nu returneaza rânduri de table
Pentru a verifica daca o interogare UPDATE, INSERT sau DELETE a avut efectul dorit, se poate folosi functia mysql_affected_rows(), care returneaza numarul rândurilor afectate de interogarea cea mai recenta. Functtia are urmatoarea forma:
mysql_affected_rows()
În cazul în care cea mai recenta interogare UPDATE, INSERT sau DELETE a esuat, functia returneaza valoarea -1.
V.2.9. Utilizarea coloanelor de tabel cu auto-incrementare
Pentru a preciza ca MySQL va repartiza o valoare secventiala unica în coloana care serveste drept cheie primara a tabelului, se poate folosi indicatorul AUTO_INCREMENT.
Când se insereaza un rind într-un tabel se poate folosi functia mysql_insert_id() pentru a determina valoarea cheii primare atribuite de MySQL. Functia are forma:
mysql_insert_id()
si returneaza valoarea zero daca interogarea precedenta nu a generat o valoare AUTO_INCREMENT. Ca atare, functia trebuie apelata la putin timp dupa interogarea care a inserat rândul din tabel, astfel încât o interogare ulterioara sa nu modifice rezultatul.
V.2.10. Prelucrarea rezultatelor interogarilor SELECT
Spre deosebire de interogarile UPDATE, INSERT si DELETE, interogarile SELECT returneaza rânduri de tabel ca rezultate. Rândurile unui tabel sunt incluse într-o structura de date numita set de rezultate. Prelucrarea setului de rezultate returnat de o interogare SELECT implica parcurgerea prin iteratie a rândurilor setului de rezultate.
O modalitate de parcurgere iterativa a rândurilor unui set de rezultate consta în obtinerea numarului de rânduri, urmata de deplasarea prin iteratie, folosind numarul de rânduri ca limita pentru o instructiune for. Pentru a obtine valoarea numarului de rânduri, se invoca functia mysql_rows(), transferând ca argument valoarea returnata de functia mysql_query().
Functia mysqli_fetch_row() se poate folosi pentru a obtine urmatorul rând din secventa setului de rezultate. Totusi, functia mysqli_fetch_row() returneaza true daca un set de rezultate contine rânduri neprelucrate, respectiv false în caz contrar. Ca atare, în general este preferabil sa se omita apelarea functiei mysqli_num_rows() si sa sa se foloseasca în schimb o instructiune while.
Valoarea returnata de functia mysqli_fetch_row() reprezinta un tablou alcatuit din toate coloanele rândului curent din tabel. Tabloul foloseste indexuri întregi, unde valoarea primului index este egala cu zero. Pentru a prelucra coloanele stocate în tablou, se foloseste o instructiune foreach, care elimina necesitatea existentei unui index explicit al buclei.
Daca se doreste obtinerea accesului la valoarea unei anumite coloane, se poate face referire la elementul din tablou folosind un index. De exemplu, daca rezultatul functiei mysqli_fetch_row() este stocat în variabila $rind, se poate obtine acces la prima coloana din setul de rezultate folosind sintaxa $rind[0], la a doua coloana folosind sintaxa $rind[1], etc.
Pentru a obtine rândurile tabelului se paote folosi mysql_fetch_array(), care returneaza un tablou asociativ. Valorile indecsilor din tablou le reprezinta numele coloanelor din setul de rezultate. Ca si functia mysqli_fetch_row(), functia mysql_fetch_array() returneaza false daca nu mai exista rânduri în setul de rezultate.
V.1.11. Lucrul cu seturi de rezultate
Biblioteca de functii MySQL a limbajului PHP include un set de functii prin care se pot obtine informatii despre un set de rezultate, inclusiv:
De asemenea, biblioteca furnizeaza o functie care permite obtinerea accesului în mod non-secvential la rândurile din setul de rezultate, prin specificarea numarului unui rând.
V.2.12. Obtinerea numarului coloanelor unui set de rezultate
Pentru a obtine numarul coloanelor dintr-un set de rezultate se invoca functia mysql_num_fields(), transferând ca argument valoarea returnata de functia mysql_query().
V.2.13. Obtinerea numelui unei coloane din setul de rezultate
Functia mysql_field_name() returneaza numele coloanei din setul de rezultate având valoarea indexului data ca argument al functiei. Indexul asociat cu prima coloana este 0, indexul asociat celei de a doua coloane este 1, etc.
V.2.14. Obtinerea lungimii unei coloane dintr-un set de rezultate
Functia mysql_field_len() returneaza lungimea maxima a coloanei dintr-un set de rezultate, având valoarea indexului data ca argument al functiei. Indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1 etc.
V.2.15. Obtinerea indicatorilor MySQL asociati unei coloane a setului de rezultate
Functia mysql_field_flags() returneaza indicatorii SQL asociati colaonei din setul de rezultate al carei index este dat ca argument al functiei. Indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1, etc. Functia mysql_field_flags() raporteaza urmatorii indicatori :
AUTO_INCREMENT
BINARY
BLOB
ENUM
MULTIPLE_KEY
NOT_NULL
PRIMARY_KEY
TIMESTAMP
UNIQUE_KEY
UNSIGNED
ZEROFILL
Daca la o coloana sunt asociati mai multi indicatori, fiecare indicator este separat de vecinii sai prin intermediul unui singur spatiu.
V.2.16. Obtinerea tipului MySQL al unei coloane din setul de rezultate
Functia mysql_field_type() returneaza tipul MySQL al unei coloane al carei index este dat ca argument al functiei. Indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1, etc.
V.2.17. Determinarea tabelului MySQL asociat unei coloane din setul de rezultate
Functia mysql_field_table() returneaza tabelul MySQL, daca exista, asociat coloanei din setul de rezultate al carei index este dat de argumentul functiei. Indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1, etc. În cazul în care coloana contine o valoare calculata sau daca respectiva coloana nu este asociata în alt mod cu un tabel MySQL, functia returneaza un sir vid.
V.2.18. btinerea structurii complete a setului de rezultate
Functia mysql_fetch_field() returneaza un obiect ale carui proprietati contin o varietate de informatii cu privire la coloana unui set de rezultate. Proprietatiile sunt urmatoarele:
blob - are valorea 1 în cazul în care coloana este de tip BLOB
max_length - lungimea maxima a coloanei;
multiple_key - are valoarea 1 în cazul în care coloana este o cheie non-unica
name - numele coloanei
not_null - are valoarea 1 în cazul în care coloana nu poate contine valoarea NULL
numeric - are valoarea 1 în cazul în care coloana este numerica
primary_key - are valoarea 1 în cazul în care coloana este o cheie primara
table - numele tabelului MySQL caruia îi apartine coloana
type - tipul MySQL al coloanei
unique_key - are valoarea 1 în cazul în care coloana este o cheie unica
unsigned - are valoarea 1 în cazul în care coloana este de tip UNSIGNED
zerofill - are valoarea 1 în cazul în care coloana este completata cu zerouri
Functia mysql_fetch_field() preia doua argumente: valoarea returnata de functia mysql_query() si indexul coloanei din setul de rezultate care va fi descris. Ca de obicei, indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1, etc.
V.2.19. Accesul non-secvential la coloanele unui set de rezultate
Functiile mysqli_fetch_row() si mysql_fetch_array() returneaza, în general rândurile dintr-un set de rezultate în mod secvential. Totusi, functia mysql_data_seek() permite obtinerea accesului la rândurile unui set de rezultate într-o maniera non-secventiala. Functia are forma :
mysql_data_seek(rezultat, numar_rind)
unde rezultat este valoarea returnata de functia mysql_query(), iar numar_rind este indexul rândului la care doriti sa obtineti accesul. Primul rând al setului de rezultate este numerotat cu 1, al doilea cu 2 etc. Functia returneaza true daca executia reuseste, respectiv false în caz contrar. O invocare ulterioara a functiei mysqli_fetch_row() sau a functiei mysql_fetch_array() va returna rândul din pozitia specificata a setului de rezultate.
V.3. Implementarea functionalitatilor principale
V.3.1. Înregistrarea noilor membrii
Pentru înregistrarea unui nou membru în baza de date a aplicatiei, utilizatorul trebuie sa completeze formularul din pagina register.php. Acesta sunt cuprinde toate câmpurile din tabelul members al bazei de date, precum si o lista cu toate înregistrarile din tabelul languages, pentru ca utilizatorul sa poata selecta limbile cunoscute. Toate câmpurile sunt obligatorii, unele au furnizate valori implicite, iar pentru cele care necesita îndeplinirea anumitor conditii pentru a putea fi valide a fost realizata o functie JavaScript. Aceasta realizeaza validarea datelor introduse în formular înainte ca cererea sa fie trimisa spre procesare serverului.
Câmpurile de tip select din formular trebuie sa aiba valori care sunt obtinute din valorile posibile ale anumitor coloane de tip enum din baza de date, iar acestea sunt obtinute prin apelarea functiei showenumvalues($col , definita în fisierul showenumvalues.php, inclus în directorul functions, functie care este implementata astfel:
<?php
function showenumvalues($col)'";
$result=mysql_query($query);
if(mysqli_num_rows($result)>0)
foreach($options as $val)
}
?>
Aceasta functie este apelata în fisierul register.php pentru diferite valori ale parametrului $col, de exemplu:
<?php showenumvalues("haircolor"); ?>
Daca datele au fost completate corect, formularul este trimis spre procesare. De acest lucru se ocupa fisierul register_action.php. Se încearca inserarea elementelor din formular folosind o interogare de tip insert si prin apelul functiei mysql_query. Daca inserarea esueaza este afisat un mesaj de eroare si utilizatorului îi este oferita posibilitatea de a se întoarce în pagina cu formularul de înregistrare. Daca înregistrarea are loc cu succes, în continuare se introduc în tabelul languages limbile specificate de utilizator, este trimis un e-mail informativ catre adresa specificata de acesta si i se ofera posibilitatea de a trece într-o noua pagina în care îsi poate upload-a pâna la maximum cinci fotografii personale. Tot acum este creat pe server un director al carui nume este format din stringul "member_" concatenat cu id-ul noului membru introdus în baza de date, director ce va fi folosit pentru stocarea fotografiilor membrului respectiv.
Pentru a nu permite executia interogarilor din pagina register_action.php în cazul în care aceasta ar fi introdusa direct în bara de adresa a browser-ului, întreg codul este cuprins într-o instructiune if în care se verifica daca a fost apasat butonul sumbit din formularul de înregistrare astfel:
if(isset($_POST["submit"]))
Pentru introducerea datelor din formular în baza de date, acestea sunt retinute în prealabil în variabile php corespunzatore:
$haircolor=$_POST["haircolor"];
$eyescolor=$_POST["eyescolor"];
$smoker=$_POST["smoker"];
$maritalstatus=$_POST["maritalstatus"];
$kids=$_POST["kids"];
$kidslivingwith=$_POST["kidslivingwith"];
$religion=$_POST["religion"];
$education=$_POST["education"];
$occupation=$_POST["occupation"];
$income=$_POST["income"];
$city=$_POST["city"];
$state=$_POST["state"];
$country=$_POST["country"];
$hobby=$_POST["hobby"];
$personaldescription=$_POST["personaldescription"];
$relationship=$_POST["relationship"];
$person=$_POST["person"];
apoi are loc crearea string-ului care va fi folosit în functia mysql_query:
$insert="INSERT INTO members(name, gender, email, password, birthdate, precisedate, birthplace, height, weight, haircolor, eyescolor, smoker, maritalstatus, kids, kidslivingwith, religion, education, occupation, income, city, state, country, hobby, presentation, relationship, person) VALUES ('".
$name."', '".$gender."', '".$email."', '".$password."', '".
$birthdate."', '".$precisedate."', '".$birthplace."', ".
$height.", ".$weight.", '".$haircolor."', '". $eyescolor."', '".$smoker."', '".$maritalstatus."', ".
$kids.", ".$kidslivingwith.", '".$religion."', '". $education."', '".$occupation."', ".$income.", '". $city."', '".$state."', '".$country."', '".$hobby."', '".
$personaldescription."', '".$relationship."', '". $person."')";
si se continua cu executia interogarii si a celorlalti pasi necesari, în functie de rezulatul acesteia:
$result=mysql_query($insert);
if(mysql_affected_rows()!=1)
else
}
chdir('photos');
$dir = 'member_'.$newid;
mkdir($dir);
$message="<center>Congratulations! You have been succesfully registered!</center><br>".
'<center>You can upload up to <b>5</b> photos <a href="upload.php?id='.$newid.'">here</a></center><br><br>';
mailto($email,$password);
Pentru realizarea trimiterii automate de e-mail a fost realizata functia mailto($to, $pass), implementata în fisierul mail.php din directorul functions. Aceasta functie primeste ca parametrii adresa de e-mail a noului membru înregistrat si parola introdusa de acesta si trimite la acea adresa un e-mail informativ, folosind functia PHP mail, astfel:
<?php
function mailto($to,$pass)
?>
V.3.2. Cautarea membrilor
Pentru cautarea în baza de date a fost creat pagina search.php care contine un formular în care utilizatorul poate specifica creiteriile de cautare. Aplicatia permite cautarea membrilor folosind orice combinatie a urmatoarelor coloane din tabelul members: name, gender, height, weight, haircolor, eyescolor, maritalstatus, smoker, country.
Dupa introducerea informatiilor dorite pentru cautare, formularul este trimis spre procesare catre pagina search_result.php. Aceasta include fisierul find.php, din directorul functions, în care este definita functia find(). Aceasta primeste ca parametrii toate variabilele din formularul de cautare si, an fuctie de valorile acestora, formeaza stringul care va fi folosit an interogare, astfel:
<?php
function find($name, $gender, $height, $weight, $haircolor, $eyescolor, $maritalstatus, $smoker, $country)
?>
În pagina search_results are loc apelul metodei find folosind datele introduse în formular si se executa interogarea respectiva. Rezultatele cautarii sunt prezentate într-un tabel, câte o înregistrare pe fiecare linie, cuprinzând câteva detalii pentru fiecare membru gasit, si cu lkegaturi catre paginile cu detalii despre fiecare.
<?php
$findresults=find($_POST["name"], $_POST["gender"], $_POST["height"], $_POST["weight"], $_POST["haircolor"], $_POST["eyescolor"], $_POST["maritalstatus"], $_POST["smoker"], $_POST["country"]);
$result=mysql_query($findresults);
echo "<table><tr><td>Name</td> <td>Gender</td> <td>Height</td> <td>Weight</td> <td>Haircolor</td>".
"<td>Eyescolor</td> <td>Marital Status</td> <td>Smoker</td> <td>Country</td>";
while($row=mysql_fetch_array($result))?>
</table>
V.3.3. Afisarea mebrilor
Pentru afisarea tuturor membrilor înregistrati în baza de date exista doua legaturi specificate în fisierul menubar.php, respectiv pentru Men si Women. Ambele legaturi indica, însa, catre aceeasi pagina, si anume members.php, dar care primeste diferite valori pentru atributul detip URL gender. Astfel, pentru Men legatura se face catre pagina members.php?gender=male, si respectiv, pentru Women, legatura este catre members.php?gender=female.
În pagina members.php, construita pe baza templeate-ului, informatiile sunt prezentate sub forma unui tabel care contine pe fiecare linie câteva infoormatii semnificative pentru fiecare membru si legatura catre pagina detaliata a acestuia. Înainte de afisarea informatiilor are loc o verificare a valorii parametrului gender din URL si se formeaza astfel interogarea corespunzatoare:
<table>
<tr>
<td>Name</td>
<td>Gender</td>
<td>Height</td>
<td>Weight</td>
<td>Haircolor</td>
<td>Eyescolor</td>
<td>Marital status</td>
<td>Smoker</td>
<td>Country</td>
</tr>
<?php
if(isset($_GET["gender"]))
}
?>
</table>
V.3.4. Upload-ul fisierelor
Dupa ce s-a înregistrat, unui membru i se da posibilitatea de a încarca pe server maximum cinci fotografii personale. Acest lucru este implementat în fisierul upload.php. Acest fisier are ca parametru de tip URL id-ul noului membru înregistrat, pentru a putea determina în care subdirector din directorul photos sa salveze fotografiile. Pagina upload.php costa într-un formular HTML cu cinci elemente input de tip file. Pagina de actiune a acestui formular este setata ca fiind tot upload.php. La accesarea paginii are loc o verificare daca a fost apasat butonul de Submit, adica daca au fost selectate fisierele pentru upload. În caz afirmativ, se încearca upload-ul fisierelor pe server si, în acelasi timp, are loc si trecerea informatiilor corespunzatoare în baza de date. La final, este setata o variabila php numita $succes, a carei valoare va fi afisata opentru a furniza utilizatorului informatii referitoare la succesul sau esecul upload-ului. Mecanismul de upload este implementat astfel:
<?php
$id=$_GET["id"];
if(isset($_POST["submit"]))
}
}
}
?>
V.3.5. Managementul sesiunilor de lucru
Pentru managementul utizatorilor care logati pe site, PHP ofera mecanismul variablelor din scope-ul $_SESSION. Pagina login.php realizeaza logarea unui utilizator. Într-un formular HTML acesta trebuie sa introduca adresa de e-mail si parola pe care a ales-o în momentul crearii contului. Acest formular este trimis spre prelucrare tot catre pagina login.php. La începutul fisierului are loc o verificare daca a fost apasat butonul de login si în caz afirmativ se preiau informatiile introduse în formular si se verifica daca acestea corespund uneia si numai uneia dintre înregistrarile din tabelul members. Daca este gasita o asemenea înregistrare, sunt setate variabilele username si userid din scopul $_SESSION si fisierul statusbar.php îsi modifica continutul pentru a afisa faptul ca utilizatorul a fost recunoscut si logat în sistem:
<?php
if(isset($_POST["submit"]))
else
}
?>
În caz contrar, este setata o variabila php numita $error si este afisat un mesaj de eroare, iar utilizatorul poate încerca din nou.
Fisierul statusbar.php este cel care realizeaza afisarea, sub bara de meniu a informatiilor legate de starea utilizatorului. Dupa ce utilizatorul este recunoscut îi este afisat un link prin care poate accesa pagina logout.php, prin care se poate deconecta, iar daca nici un utilizator nu este conectat, este afisata o legatura catre pagina login.php.
<table width="800">
<tr>
<td align="left">
<?php
if(isset($_SESSION['username']) && isset($_SESSION['userid']))
echo "Welcome, ".$_SESSION['username']."!";
else echo "Welcome, Visitor!";
?></td>
<td align="right">
<?php
if(isset($_SESSION['username']) && isset($_SESSION['userid']))
echo '<a href="logout.php">Logout</a>';
else echo '<a href="login.php">Login</a>';
?></td>
</tr>
</table>
Toate paginile folosite pentru navigare în cadrul site-ului trebuie sa apeleze functia session_start(). Aceasta permite determinarea starii utilizatorului: conectat sau neconectat. Anumite pagini ale site-ului permit accesul numai pentru utilizatorii conectati. Pentru aceasta, respectivele pagini trebuie sa realizeze o verificare a variabilelor din scope-ul $_SESSION, iar în cazul în care utilizatorul nu este conectat, este redirectat catre pagina login.php, astfel:
session_start(); require("../../../replace_diacritice.php");
if( !isset($_SESSION['username'])|| isset($_SESSION['userid']) )
Pagina logout.php realizeaza distrugerea variabilelor din scope-ul $_SESSION, si redirectarea catre pagina de start a site-ului, index.php, astfel:
<?php
session_start(); require("../../../replace_diacritice.php");
if( isset($_SESSION['username']) && isset($_SESSION['userid']) )
?>
|