z8e8ei
<titlu>Accesul la date</titlu>
<titlu>Scopuri</titlu>
• Invatati sa obtineti accesul la datele scalare transmise unui program
PHP de catre un formular HTML
• Invatati sa folositi constructia PHP echo pentru a trimite date
de iesire la browser
• Invatati sa construiti siruri care includ valorile variabilelor
PHP
• Invatati sa obtineti accesul la valorile variabilelor de mediu
Majoritatea programelor PHP folosesc formularele HTML pentru a obtine date
de intrare, in cadrul acestui modul, veti invata sa obtineti accesul
la datele trimise unui program PHP prin intermediul unui formular HTML. De asemenea,
veti invata sa obtineri accesul la datele stocate in variabilele
de mediu pe parte de client, respectiv pe parte de server. Variabilele de mediu
stocheaza informatii utile despre browsere, servere Web si PHP.
<titlu>Obtinerea si utilizarea datelor de la un formular</tittlu>
Deoarece PHP a fost conceput ca limbaj de scripting pentru Web, faciliteaza
accesul la variabilele transmise de catre formularele HTML. In modulul
precedent, ati invatat sa creati formulare HTML. Iata un formular HTML
simplu, care include o caseta cu text:
<HTML>
<HEAD><TITLE>Un formular HTML simplu </TITLE>
</HEAD>
<BODY>
<FORM METHOD=”POST” ACTION=”phpinfo.php”>
<BR>Tastati niste date:
<BR><INPUT TYPE=”TEXT” NAME=”date”>
<BR><BR><INPUT TYPE=”SUBMIT”>
</FORM>
</BODY>
</HTML>
Observati ca atributul NAME al etichetei INPUT atribuie casetei cu text numele
date.
In cazul in care creati un script denumit phpinfo.php, care executa
functia phpinfo() si o stocheaza in acelasi dosar ca si formularul, prin
expedierea formularului se cere scriptului sa afiseze un raport care indica
starea serverului de aplicatie PHP. In
sectiunea intitulata „Variabile PHP", raportul de stare prezinta
valorile variabilelor din formular. Figura 4-1 prezinta raportul de stare asociat
formularului HTML simplu.
Retineri ca raportul de stare are doua coloane. Numele variabilei asociate controlului
din formular, in speta date, apare in coloana din stanga,
inglobat in textul HTTP_POST_VARSa"date"i. Valoarea variabilei,
care reprezinta textul introdus de utiliza¬tor, este prezentata in
coloana din dreapta. In figura, valoarea variabilei o constituie textul
"acestea sunt datele".
<figura 4-1>Un raport de stare PHP, care indica valoarea variabilei din
formular denumita date
PHP Variables
<Variabila>PHP_SELF</varialila><value>/Ibmccarty/php/module-04/phpinfo.php</value>
<variabila> HTTP_POST_VARSa„date”i </varialila> <value>
this is data </value>
<Sfatul specialistului>
Intrebare: Constructia HTTP_POST_VARSa"date"i este suspect de
asemanatoare cu o referinta la un tablou. Despre ce este vorba?
Raspuns: Daca ati observat parantezele drepte si v-ati reamintit ca ele sunt
asociate cu tablourile PHP, atunci sunteti o persoana extrem de atenta. Daca
nu, parcurgeti rapid sectiunea intitulata „Valori scalare si tablouri"
din Modulul 2.
In momentul expedierii unui formular, numele si valorile variabilelor incluse
in formular sunt inserate in tabloul HTTP_POST_VARS. Cheia fiecarui
element al tablou¬lui este numele unei variabile din formular; valoarea
elementului din tablou determina valoarea variabilei. Daca doriti, puteti obtine
accesul la variabilele formularului folosind tabloul HTTP_POST_VARS; cu toate
acestea, veti invata in curand modalitati mult mai convenabile
de acces la variabilele unui formular. </Sfatul specialistului>
<titlu>Trimiterea datelor de iesire catre browser</titlu>
Desigur, nu putem pretinde ca utilizatorii sa citeasca un raport de stare PHP
pentru a afla valorile variabilelor. Mai mult, esenta programarii consta in
capacitatea de a manipula valorile, nu de a le vizualiza pur si simplu, in
aceasta sub-sectiune veti invata sa folositi constructia echo pentru a
trimite date de iesire la un browser, iar in sectiunea urmatoare veti
invata sa construiti siruri care inglobeaza valorile variabilelor.
Prin combinarea acestor tehnici, puteti afisa valorile variabilelor PHP intr-o
forma pe care utilizatorii o pot intelege cu usurinta. In modulele
ulterioare, veti invata sa manipulati valorile variabilelor astfel incat
sa puteti construi programe PHP utile. Constructia echo va permite sa trimiteti
date de iesire catre un browser. Con¬structia are o diversitate de forme.
lat-o, poate, pe cea mai utila dintre ele:
echo sir_expresie;
Aceasta forma consta numai din cuvantul echo, urmat de o expresie sir
si de un caracter punct si virgula care determina incheierea instructiunii.
Efectul unei aseme¬nea instructiuni consta in a trimite browserului
valoarea expresiei sir. De exemplu, instructiunea
echo „<BR><B>„Datele sunt elegante!</B>”;
trimite browserului textul „Datele sunt elegante!". Retineti ca
textul include etichete HTML, care influenteaza modul de formatare a textelor,
determinandu-le sa apara pe o linie noua, scrise cu ajutorul caracterelor
aldine.
Utilitatea acestei forme a constructiei echo se bazeaza pe numeroasele moduri
in care puteti scrie o expresie sir. Una dintre cele mai utile modalitati
foloseste opera¬torul de concatenare pentru unirea a doua expresii sir.
De exemplu, sa luam in considerare urmatoarea instructiune echo:
echo „Datele sunt” . „ elegante!”;
Operatorul de concatenare, reprezentat printr-un punct, ataseaza a doua expresie
sir ia prima. Rezultatul este acelasi ca si cel generat de urmatoarea instructiune:
echo „Datele sunt elegante!”;
Constructia echo este oarecum ciudata, in sensul ca este asemanatoare
cu o functie, dar nu este functie. De exemplu, puteti folosi paranteze pentru
a delimita expresia sir ceruta de constructia echo:
Daca preferati, puteti furniza mai multe expresii sir, fiecare din aceste expresii
fiind separata de vecinii sai prin intermediul unei virgule:
echo „Datele sunt”, „ elegante!”;
Cu toate acestea, nu puteti folosi simultan paranteze si virgule, asa cum se
procedeaza in cazul functiilor autentice:
echo („Datele sunt”, „elegante!”); // Eroare de sintaxa
Mai mult, o expresie furnizata constructiei echo nu trebuie sa fie o expresie
sir, daca PHP stie sa converteasca expresia intr-un sir. De exemplu, urmatoarea
sintaxa este corecta:
echo „unu plus unu este ”; echo 2;
<Sfatul specialistului>
Intrebare: Sa presupunem ca programul meu PHP are ca date de iesire etichete
HTML, ceea ce determina intercalarea unor elemente HTML in componentele
programului meu. Exista vreo modali¬tate mai convenabila de a scrie constructii
de tip echo in aceasta situatie?
Raspuns: Da, exista, in loc de a scrie
<? echo "datele mele de iesire";
?> puteti scrie pur si simplu
<?= "datele mele de iesire" ?>
PHP percepe semnul egal ca o abreviere pentru echo, atata vreme cat
semnul egal urmeaza imediat dupa simbolul <?. Retineti, totusi, ca aceasta
caracteristica este disponibila numai daca PHP a fost compilat sau configurat
cu optiunea de confi¬gurare short_tags. Daca descoperiti ca nu puteti folosi
cu succes constructia <?=, solicitati administratorului dumneavoastra de
sistem sa activeze aceasta optiune. </Sfatul specialistului>
<titlu>Construirea sirurilor care inglobeaza valori ale variabilelor</titlu>
Pentru a putea trimite browserului valorile variabilelor, tot ce mai aveti
de invatat este sa construiti expresii sir care includ valorile variabilelor.
Iata un script simplu care include o asemenea expresie
<?php
$raza = 2;
$pi = 3.14159;
$arie = $pi*$raza*$raza; echo „Aria cercului este $arie.”;
?>
Cand inglobati intr-un sir numele unei variabile, precum
$arie, PHP inlocuieste numele variabilei cu valoarea acesteia. Daca executati
scriptul dat ca exemplu, veti vedea datele de iesire:
Aria cercului este 12.56636
Uneori, doriti sa obtineti la iesire numele unei variabile, nu valoarea acesteia.In
asemenea cazuri, inserati un caracter backslash (\) in fata numelui variabilei.
Sa consideram urmatorul exemplu:
<?php
$raza = 2;
$pi = 3.14159;
$arie = $pi*$raza*$raza; echo „Valoarea variabilei \ $aria este $arie.”;
?>
Rezultatul acestui script este:
Valoarea variabilei $arie este 12.56636
<Test „la minut">
• Scrieti o instructiune echo care scrie textul „PHP este pentru
programa¬torii de calibru."
• Scrieti o instructiune echo care scrie valoarea variabilei $circum.
• Scrieti o instructiune echo care scrie numele variabilei $radacina,
urmata de un semn egal si de valoarea variabilei. </Test „la minut">
<titlu>Proiectul 4-1 : Agenda cu adrese de e-mail</titlu>
In cadrul acestui proiect, veti scrie instructiuni PHP prin care se obtine
accesul la datele obtinute de la un formular HTML. De asemenea, veti scrie instructiuni
PHP care trimit date HTML la browserul utilizatorului.
Acest proiect este primul dintr-o serie de proiecte, care va culmina cu o aplicatie
PHP care furnizeaza o agenda de adrese accesibila prin Web. Veti invata
mai multe despre agenda de adrese si despre functionalitatile acesteia pe masura
ce veti continua sa lucrati la dezvoltarea aplicatiei.
<titlu>Scopurile proiectului</titlu>
• Prezentarea modului de scriere a sirurilor PHP care incorporeaza
datele obtinute de la un formular HTML
• Prezentarea modului de utilizare a instructiunii PHP echo pentru a trimite
date catre browserul utilizatorului
<titlu>Pas cu pas</titlu>
1. Plasati urmatorul script PHP intr-un fisier denumit p-4-1 .html si
incarcati acest fisier in serverul dumneavoastra PHP:
<HTML>
<HEAD>
<TITLE>Proiectul 4-1<TITLE>
</HEAD>
<BODY>
<!--Fisierul p-4-1.html -- >
<FORM METHOD=”POST” ACTION=”p-4-1.php”>
<H2>Lista cu persoane de contact</H2>
<BR>Porecla:
<nota>Raspunsuri la test:
• echo "PHP este pentru programatorii de calibru."
• echo "Valoarea este Scircum."; sau ceva similar
•echo "\$radacina=$radacina";</nota>
<BR><INPUT TYPE=”TEXT” NAME=”Porecla”>
<BR>
<BR>Nume complet:
<BR<<INPUT TYPE=”TEXT” NAME=”Numecomplet”>
<BR>
<BR>Memo:
<BR><TEXTAREA NAME=”Memo” ROWS=”4” COLS=”40”
WRAP=”PHYSICAL”>
</TEXTAREA>
<BR>
<BR>
<INPUT TYPE=”SUBMIT”>
</FORM>
</BODY>
</HTML>
2. Plasati urmatorul script PHP intr-un fisier denumit p-4-1.php si incarcati
acest fisier in serverul dumneavoastra PHP, plasandu-l in
acelasi catalog ca si fisierul p-4-1 .html:
<?php
// Fisierul p-4-1.html echo „<BR>Porecla=$Porecla”; echo „<BR>Nume_complet=$Nume_complet”; echo „<BR>Memo=$Memo”;
?>
3. Orientati un browser Web spre adresa URL a fisierului care contine formularul
HTML. Ecranul browserului trebuie sa fie asema¬nator celui prezentat in
ilustratia urma¬toare. Introduceti o porecla, un nume complet si o nota
scurta (memo). Executati clic pe butonul de expediere.
<imagine>
Contact list
Nickname bill
Full Name Bill McCarty
Memo Email: bmccarty@osborn.com
Submit Query
</imagine>
4. In momentul executarii scriptului de prelucrare, acesta obtine accesul
la cele trei variabile ale formularului si trimite browserului utilizatorului
numele si valorile variabilelor, asa cum se poate vedea in ilustratia
urmatoare.
Nickname=bill
Fullname=Bill McCarty
Memo=Email: bmccarty@osborne.com
<titlu>Obtinerea si utilizarea datelor de la o variabila de mediu</titlu>
In cazul in care sunteti familiarizat cu sistemele de operare UNIX
sau MS-DOS, probabil ca sunteti un cunoscator al variabilelor de mediu. Variabilele
de mediu sunt folosite pentru stocarea optiunilor si a parametrilor care personalizeaza
mediul de aplicatie. Aplicatiile pot obtine accesul la valorile variabilelor
de mediu si isi pot ajusta comportamentul in consecinta. De exemplu,
calea de cautare a programelor MS-DOS este stocata intr-o variabila de
mediu denumita PATH. In general, comen¬zile sistemelor de operare sunt folosite
pentru a configura variabilele de mediu si pentru a stabili valorile acestora.
Cu toate acestea, unele aplicatii manipuleaza valorile variabilelor de mediu.
Atat serverul Web Apache, cat si serverul de aplicatie PHP folosesc
variabile de mediu pentru a prezenta informatii de stare. Unele dintre cele
mai importante variabile de mediu folosite de Apache si PHP sunt rezumate in
tabelul 4-1. Nume¬roase servere Web, altele decat Apache, furnizeaza
o parte din aceste variabile de mediu sau chiar pe toate.
Multe dintre aceste variabile reflecta caracteristicile cererii HTTP care a
solicitat executia PHP. Puteti vizualiza toate variabilele de mediu disponibile
pentru progra¬mele PHP prin invocarea functiei phpinfo() si vizualizarea
datelor de iesire generate de aceasta. Figura 4-2 prezinta o portiune a raportului
de stare prezentat de functia phpinfo() care identifica numeroase variabile
de mediu.
<Tabelul 4-1 Importante variabile de mediu PHP>
*Variabila de mediu
*Descriere
*CONTENT_LENGTH
*Lungimea, in octeti, a corpului cererii.
*CONTENT_TYPE
*Tipul MIME al datelor din corpul cererii.
*DOCUMENT_ROOT
*Calea care constituie radacina arborelui catalogului cu docu¬mente al serverului
Web.
*GATEWAZ_INTERFACE
*Versiune a protocolului CGI (Common Gateway Interface) folosit de serverul
Web.
*http_ACCEPT
*Continutul antetului HTTP Accept:.
*http_ACCEPT_CHARSET
*Continutul antetului HTTP Accept-Charset:, care specifica seturile de caractere
intelese de client.
*HTTP_ACCEPT_ENCODING
*Continutul antetului HTTP Accept-Encoding:, care specifica tipurile de continuturi
intelese de client.
*http_ACCEPT_LANGUAGE
*Continutul antetului HTTP Accept-Language:, care specifica limbajele preferate
de client.
*http_CONNECTION
*Continutul antetului HTTP Connection:, care indica optiunile solicitate de
client.
*http_HOST
*Continutul antetului HTTP Host:, care indica numele de gazda, folosit de client
la prezentarea cererii.
*http_REFERER
*Adresa URL a paginii Web care a trimis browserul clientului la pagina curenta.
*HTTP_USER_AGENT
*Continutul antetului HTTP user-Agent, care indica browserul clientului si versiunea
acestuia.
*PATH
*Calea de executie asociata cu mediul serverului.
*QUER_STRING
*Sirul de interogare, daca exista, care a insotit cererea.
*REMOTE_ADDR
*Adresa IP a clientului.
*REMOTE_HOST
*Numele de gazda al clientului.
*REMOTE_PORT
*Adresa portului clientului de unde a pornit cererea.
*REQUEST_METHOD
*Metoda de cerere HTTP folosita; de exemplu, GET, POST, PUT sau HEAD.
*REQUEST_URI
*URI folosit pentru accesul la pagina curenta. URI este alcatuit dintr-un URL
si un sir optional de interogare.
*SCRIPT_FILENAME
*Numele de cale absolut al scriptului curent.
*SCRIPT_NAME
*Adresa URL a scriptului curent.
*SERVER_ADMIN
*Adresa de e-mail a administratorului serverului Web .
*SERVER_HOST
*Numele de gazda asociat serverului Web care prelucreaza cererea.
*SERVER_PORT
*Port folosit de serverul Web pentru comunicatii.
*SERVER_PROTOCOL
*Numele si versiunea protocolului prin intermediul caruia s-a executat cererea.
*SERVER_SIGNATURE
*Sirul care identifica versiunea serverului Web si numele de gazda folosit pentru
prelucrarea cererii.
*SERVER_SOFTWARE
*Sirul care identifica programul server Web si versiunea acestuia.
</tabel 4-1>
Puteti obtine accesul la variabila de mediu exact asa cum procedati pentru
orice alta variabila PHP. Pur si simplu inserari inaintea numelui variabilei
de mediu un simbol al dolarului ($), astfel incat numele sa se conformeze
sintaxei PHP. De exemplu, urmatoarea instructiune echo trimite browserului adresa
IP a clientului:
echo „Adresa IP a clientului este $REMOTE_ADDR.”;
<figura 4-2>
Datele de iesire ale functiei phpinfo(), care afiseaza numeroase variabile de
mediu.
<titlu>Apache Environment</titlu>
<Variable>CONTENT_LENGTH</variable><value> 14</value>
<Variable>CONTENT_TYPE</variable><value>application/x-www-form-urlencoded</value>
<Variable>DOCUMENT_ROOT</variable><value>/home/http/htlm</value>
<Variable>HTTP_ACCEPT</variable><value>*/*</value>
<Variable> HTTP_ACCEPT_ENCODING </variable> <value> gzip,deflate
</value>
<Variable> HTTP_ACCEPT_LANGUAGE</variable><value>en-us</value>
<Variable> HTTP_CONNECTION</variable><value>Keep-Alive</value>
</figura 4-2>
<Sfatul specialistului>
Intrebare: O buna parte din informatiile prezentate in tabe¬lul
4-1 par neclare. Care este utilitatea acestor variabile de mediu?
Raspuns: Daca nu cunoasteti protocolul HTTP in amanuntime, s-ar putea
sa nu descoperiti prea multe utilitati pentru aceste variabile de mediu. Cu
toate acestea, o importanta utilizare comuna o constituie autentificarea clientului.
Prin accesul la variabila de mediu REMOTE_ADDR, puteti determina adresa IP a
clientului. Intr-un modul ulterior, veti invata sa testati valoarea unei
variabile si sa modificati comportamentul unui script in functie de valoarea
respectiva. De exemplu, puteti folosi acest procedeu pentru a exclude cererile
care provin din afara unui anumit set de adrese IP, cum ar fi cele care reprezinta
o anumita retea. Astfel, aplicatia dumneavoastra poate deveni mai rezistenta
la atacurile hackerilor care incearca sa creeze o bresa in sistemul
de securitate.
O alta utilizare importanta a variabilelor de mediu consta in ocolirea
limitarilor impuse de un anumit browser. Variabila de mediu HTTP_USER_AGENT
identifica browserul client si versiunea acestuia. Un script PHP poate testa
valoarea acestei variabile de mediu si trimite numai date de iesire acceptabile
pentru versiunea browserului aflat in uz.</sfatul specialistului>
<Test „la minut">
• Care este numele variabilei PHP care contine numele gazdei serverului
Web?
• Care este numele variabilei PHP care contine numele gazdei clientului?</test”la
minut>
<tilu>Proiect 4-2: Vizualizarea variabilelor de mediu</titlu>
In cadrul acestui proiect, veti vizualiza valorile a numeroase variabile
de mediu PHP.
<titlu>Scopurile proiectului</titlu>
• Prezentarea modului de vizualizare a variabilelor de mediu
• Prezentarea modului de utilizare a instructiunii echo pentru a trimite
browserului date deb iesire
<titlu>Pas cu pas</titlu>
1. Plasati urmatorul script PHP intr-un fisier denumit p-4-2.php si incarcati
acest fisier in serverul dumneavoastra PHP:
<nota>Raspunsuri la test:
• $SERVER_HOST
• $REMOTE HOST</nota>
<?php
//Fisierul p-4-2.php echo „<PRE>”; echo „<BR><B>Browser :</B> $HTTP_USER_AGENT”; echo „<BR><B>Host :</B> $HTTP_HOST”; echo „<BR><B>Referer :</B> $HTTP_REFERER”; echo „<BR><B>Remote Host :</B> $HTTP_REMOTE_HOST”; echo „<BR><B>Remote Address :</B> $HTTP_REMOTE_ADDR”; echo „<BR><B>Remote Port :</B> $HTTP_REMOTE_PORT”; echo „</PRE>”;
?>
2. Orientati un browser Web spre adresa URL a fisierului care contine scriptul
PHP. La executarea scriptului de prelucrare, acesta afiseaza valorile variabilelor
de mediu, asa cum se poate vedea in ilustratia urmatoare.
<figura> Proiect 4-2 - Miciosoft Internet Explorer
Browser :Mozilla/4.0 (conpatible; MSIE 5.0; Windows 98; DigExt)
Host : osborne.com
Referer : https: / / osborne.com/Ibmccarty/php/module-04/
Remote Host : client.isp.net
Remote Address : 198.45.24.130
Remote Port : 24203</figura>
<Test de evaluare>
1. Care este variabila PHP ce trebuie folosita pentru a obtine accesul la datele
asociate unui control definit de eticheta HTML <INPUT TYPE="TEXT"
NAME="culoare">?
2. Scrieti o instructiune PHP care trimite browserului valoarea variabilei $x.
3. Scrieti o instructiune PHP care trimite browserului numele variabilei $y.
4. Scrieti o instructiune PHP care trimite browserului adresa URL a paginii
care face referire la pagina curenta.