PARTE1 PHP, Mysql, SQL
PARTE1 PHP, Mysql, SQL
Cartea este destinata celor care vor sa cunoasca “apogeul” programarii al nivel
mondial,in sensul programarii pe Internet.Comertul Electronic si paginile Web active
constitue lucrul cel mai cautat in strainatate in vederea lucrului ca programator la nivel
inalt.De aceea sunt multe secrete care nu se vad atunci cand lucram pe Internet, de exemplu
trimiterea unui email,cumpararea de pe internet,căutarea unei informaţii,efectuarea de
calcule,grile,animaţii..si toate de la distanţa infinita,pentru ca nu conteaza de unde sunt
accesate ci ca funcţioneaza si ruleaza transmiţînd datele la sursa.
Toate programele au fost rulate pe calculator cu ajutorul unor simulatoare care pot fi
gasite la autori,sau descarcate de pe internet si instalate conform indicaţiilor din carte.
De asemenea s-a urmarit sa fie parcurse etapele invaţarii unui limbaj de programare
care sunt studiate la liceu sau facultate.
Autorii,
Prof.BOGDAN P.CONSTANTIN,
Referenţi stiintifici :
1
PHP , MYSQL,SQL*PLUS
Cuprins
Prefata
Instalarea resurselor necesare pentru a verifica programele
Partea 1-a: Introducere
Partea 2-a: Afişarea informaţiilor şi Variabilele
Partea 3-a: Instrucţiunile IF
Partea 4-a: Cicluri şi Vectori
Partea 5-a: E-mail cu PHP
Partea 6-a: PHP cu Formulare
Partea 7-a: Observaţii finale
Partea 8-a:Lucrul cu Mysql-Front
Partea 9-a:Aplicatii PHP
Partea 10-a:Aplicatii MYSQL
Partea 11_a:SQL PLUS* Oracle9i
Bibliografia
2
Instalarea programelor care sa ruleze aplicatiile din carte se face astfel:
1)instalarea serverului APACHE:
next/next/next/install
3
finish cand apare imaginea :
next/next/next/next si apare :
4
finish si l-am instalat.
3)instalarea utilitarului prin care rulam visual bazele de date MYSQL-FRONT 2.4:
-apas setup.exe si apare :
next/install
5
next/finish.
ok
6
connect dupa care ne apare o eroare:
introduc numele utilizatorului(si parola) care l-am creat cand am instalat WINDOWS-
ul astfel dupa care ok:
7
si apare fereastra :
8
next/next/next/next si validam ca in imagine:
next/install
9
Programul ruleaza orice:php sau pagini web daca deschid corespunzator tipul de fisier
cu FILE /OPEN.E posibil sa nu mearga si atunci copiez in calea de mai jos fisierele
din imagine :
ok.
Deci lansarea in executie se face astfel :
File/new:
10
Cu FILE/OPEN pot deschide un fisier:
11
Crearea unei baze de date se face astfel TOOLS/CREATE DATABASE:
OK
In cadrul bazei de date se pot creea tabele.
Crearea unei tabele se face astfel:
Vizualizarea
continutului unei tabele
12
SELECT studenti.stud_id,studenti.nume,studenti.prenume,studenti1.nume FROM
studenti,studenti1 where studenti.stud_id=studenti1.stud_id ;
Codul
interogarii
Executia
interogarii
Deshidere
interogari
13
Partea a-I-a ---PHP
Introducere
Până nu demult, în Internet erau puţini cei care realizau şi foloseau fişierele de comenzi - scripturile.
Recent, însă, tot mai multă lume îşi construieşte propriile pagini Web, sau chiar propriile centre Web,
iar limbajele de comenzi, pentru realizarea de script-uri, devin tot mai importante. În acelaşi timp,
aceste limbaje devin tot mai uşor de învăţat, iar PHP este unul din ele, poate cel mai simplu şi cel mai
puternic (deocamdată).
Declaraţia PHP
Scripturile PHP sunt întotdeauna incluse între două taguri PHP, conform aceleaşi scheme ca şi în
HTML. Astea spun serverului să preia information dintre ele şi să o interpreteze ca expresie din PHP.
Există trei forme diferite de marcare a expresiilor - comenzilor PHP, şi anume:
<?
comenzi PHP
?>
<?php
comenzi PHP
php?>
<script language="php">
comenzi PHP
</script>
Toate trei acţionează - se comportă exact la fel. In cele ce urmează vom folosi doar prima variantă,
pentru simplitate (<? şi ?>). Dar pot fi folosite, la fel de bine oricare din cele trei. Atenţie, combinarea
lor nu este însă permisă, nu putem folosi pentru deschidere <? iar pentru închidere </script> , spre
exemplu.
Primul script
Primul script PHP este desigur unul banal şi totuşi esenţial. Tot ce va face este să furnizeze informaţiile
despre instalarea şi starea PHP-ului pe server. Scrieţi cu editorul de texte următoarele:
<?
phpinfo();
?>
Aşa cum se vede este o singură linie de cod PHP. Este o funcţie standard din PHP, numită phpinfo, care
va cere serverului să scrie şi să transmită un tebel standard cu informaţiile de configurare a serverului.
O observaţie importantă din acest exemplu: linia de cod PHP se termină cu punct şi virgulă (;). Asta-i
foarte important ca sintaxă. La fel ca în multe alte limbaje de comenzi sau de programare, liniile trebuie
să se termine cu un marcaj anume,adesea tot (;), iar dacă acest terminator este omis rezultă o eroare.
Odată scris, scriptul trebuie salvat ca fişier dându-i un nume. În acest caz, să-i spunem phpinfo.php.
Apoi trebuie să încărcăm fişierul pe server, în spaţiul uzual al documentelor Web. După asta, folosind
navigatorul, apelăm scriptul prin URL-ul corespunzător. Dacă lucrează (şi dacă PHP este instalat pe
server) atunci vom obţine o listă amplă, plină cu detalii despre situaţia PHP pe server.
Dacă scriptul nu lucrează şi apare o pagină albă, atunci avem sau o eroare în modul în care a fost scris
scriptul, sau serverul nu suportă această funcţie (situaţie extrem de puţin probabilă). Dacă, în locul
14
afişării informaţiilor apare o ofertă de descărcare a fişierului (download), sau ne apare chiar scriptul aşa
cum a fost scris (sursa), înseamnă că PHP nu este instalat pe server. Caz în care trebuie sau să căutăm
alt server sau să instalăm PHP.
Partea 2-a
Aici o să vedem cum scriem şi cum rulăm scripturi în PHP. Deocamdată ştim dacă serverul suportă
(sau nu) PHP-ul şi am înţeles, în mare, cum apare un script PHP, cum este structurat. În partea 2-a vom
vedea cum afişăm informaţiile în navigator
Introducere
In ultima parte a lecţiei precedente am discutat câteva din avantajele PHP-ului ca limbaj pentru
scripturi, învăţând cum să testăm dacă avem sau nu PHP instalat pe server. Acum vom vedea cum apar
informaţiile în navigator şi cum utilizăm variabilele pentru a prelua informaţii.
Pentru a scoate - afişa un text în scriptul PHP, avem mai multe posibilităţi. Pima, prin utilizarea
comenzii print. Print permite afişarea unui text, a unor variabile sau a unor combinaţii ale acestora, pe
ecran.
print("Salutari!");
<?
print("Salutari!");
?>
Salutari!
Variabile în PHP
Ca şi în alte limbaje de programare, în PHP putem defini variabile. Există câteva tipuri de variabile în
PHP, dar cea mai uzuală este variabila şir de caractere, numită String. Poate fi folosită pentru texte sau
numere. Toate şirurile de caractere, toate variabilele string încep cu semnul $ . Pentru a atribui un text
unei variabile string trebuie să folosim o succesiune de forma:
Este o linie simplu de înţeles, tot ce se află între ghilimele va fi atribuit variabilei string din membrul
stâng. Desigur, trebuie să ne reamintim câteva reguli privind lucrul cu şiruri de caractere.
15
construcţia:
$user_id = 987
Variabile de scoatere
Pentru a afişa o variabilă pe ecran folosim exact aceiaşi comandă ca şi pentru a afişa un text, cu o mică
diferenţă formală. Astfel, pentru a afişa stringul atribuit variabilei $text_salut scriem:
<?
$text_salut = "Bun venit pe site-ul meu Web!";
print($text_salut);
?>
Aşa cum se poate vedea, singura diferenţă ar fi că scriem în comanda print numele variabilei, fără
ghilimele, în locul textului cu ghilimele.
Din păcate scoaterea - afişajul în această formă cu print din PHP nu este prea interesant. Totul apare în
navigatorul cu caracterele (fontul) predefinite. Dar este foarte simplu să introducem un format în text
folosind HTML. Asta pentru că, PHP fiind pe server, codul se execută înainte ca pagina să fie trimisă
spre navigator. Ceea ce înseamnă că doar rezultatele rulării scriptului sunt trimise, astfel că, în
exemplul de mai sus spre navigator se va trimite doar textul:
Iar asta ne permite să includem elementele de formatare - marcare standard din HTML pentru a face ca
textul să apară aşa cum dorim. Aceste pot fi plasate direct în string-ul din scriptul PHP. Singura
problem este că multe taguri HTML pretind ghilimele în sintaxă. Iar asta ar provoca un conflict cu
ghilimelele din şirul declarat în script. Putem preciza - defini însă care semne de punctuaţie au rolul
ghilimelelor din script, şi care sunt ghilimelele care trebuie ignorate.
Sre exemplu, să afişăm textul de mai sus cu Arial scris cu roşu. Asta s-ar scrie:
Aici avem 4 ghilimele care ar putea încurca scriptul. Din cauza asta trebuie să adăugăm un backslash
(\) înaintea fiecărei ghilimele pentru a face ca scriptul PHP să o ignore. Astfel vom avea:
Pare destul de complicată această scoatere de cod HTML, dar vom vedea că există şi o cale ceva mai
simplă.
16
Instrucţiunile IF
Introducere
În cele două lecţii anterioare am văzut cum scriem un text în PHP şi cum îl atribuim unei variabile.
Acum vom vedea cum folosim condiţiile, instrucţiunea IF, pentru a lua decizii în cadrul scriptului.
Definiţia instrucţiunii IF
Instrucţiunea condiţională IF este folosită pentru a compare două valori şi a realiza acţiuni diferite în
baza rezultatelor testului. Instrucţiunea urmează sintaxa (are forma) IF - THEN - ELSE. Partea IF
testează o condiţie. Dacă aceasta este adevărată, atunci este urmată ramura THEN. În caz contrar se
merge pe ramura ELSE.
Structura instrucţiunii IF
IF ('ceva' == 'altceva') {
'Ramura THEN'
} else {
'Ramura ELSE'
}
Variabilele
Uzual, comparăm o variabilă cu o anumită porţiune de text, cu un număr, sau cu altă variabilă. Spre
exemplu:
if ($utilizator == "paginaprincipala")
adică comparăm valoarea pe care o ia variabila cu şirul precizat de caractere. Ramura THEN a
instrucţiunii fiind executată doar dacă variabila are exact valoarea care apare între ghilimele, adică dacă
coincide cu cuvântul 'paginaprincipala'. Dacă are însă valoarea 'Paginaprincipala' sau
'PAGINAPRINCIPALA' va fi urmată ramura ELSE.
In cazul de mai sus, putem completa scriptul adăugând o ramură THEN de forma:
if ($utilizator == "paginaprincipala") {
echo "Da-mi parola te rog";
}
care va afişa cererea parolei dacă numele utilizatorului este paginaprincipala. În caz contrar, nu se
afişează nimic. Putem să lăsăm instrucţiunea în această formă, pentru că nu este obligatoriu să apară o
ramură ELSE. Asta-i util mai ales când avem condiţii multiple.
if ($utilizator == "paginaprincipala") {
echo "Da-mi parola te rog";
} else {
echo "Nu te recunosc..scuze";
}
17
Dar nu suntem limitaţi doar la o singură linie. Putem adăuga orice comandă PHP între acoladele
ramurii respective. Putem chiar include alte instrucţiuni IF (cuibărite).
Alte comparaţii
Există şi alte moduri de a folosi instrucţiunea IF pentru a compara valori. Comparând două variabile
diferite ca să vedem dacă valorile lor se potrivesc sau nu, spre exemplu:
if ($parola_introdusa == $password)
Dar compararea se poate face folosind oricare din simbolurile standard de comparaţie, pentru a verifica
dacă o valoare este mai mică sau egală decât alta:
Sau:
Mai mult, putem avea teste multiple într-o singură instrucţiune IF. Spre exemplu, dacă avem un
formular şi vrem să verificăm dacă vre un câmp a fost lăsat necompletat:
Cicluri şi Vectori
Introducere
În ultimele lecţii ale acestui curs am văzut cum manevrăm texte şi variabile &ncirc;n PHP şi cum
putem folosi instrucţiunea IF pentru a le compara ca să luăm decizii. Acum vom vedea cum folosim
altă parte importantă a PHP, salturile.
Ciclul WHILE
Ciclul WHILE este una din comenzile cele mai utile din PHP. Fără a fi prea compl;icată. Un ciclu
WHILE va executa, aşa cum sugerează şi numele, o anumită parte de cod (un set de instrucţiuni), atâta
timp cât este îndeplinită o anumită condiţie.
Dacă avem o anumită secvenţă de instrucţiuni care trebuie repetate de un număr fixat de ori (fără a le
rescrie), atunci putem folosi un ciclu while. Spre exemplu, dacă vrem să scriem cuvintele "Salutari" de
5 ori, putem face astfel:
$timpul = 5;
$x = 0;
while ($x < $timpul) {
echo "Salutari";
++$x;
}
Cum interpretăm acest script? Primele două linii sunt doar atribuiri ale variabilelor. Variabila $timpul
capătă valoarea din condiţia ciclului, în acest caz - 5 . Variabila $x este contorul care va număra de câte
ori se execută secvenţa. După aceste atribuiri, urmează linia WHILE. Acesta comandă repetarea
secvenţei dintre acolade, câtă vreme $x este mai mic decât $timpul (alfel spus, repetarea până câ,nd $x
devine egal cu $timpul). Secvenţa care se execută repetat apare în următoarele 2 linii (între acolade).
18
După linia echo care afişează textul, apare o altă linie foarte importantă:
++$x;
Din programare ştim că asta înseamnă incrementarea variabilei $x, adică acelaşi lucru cu:
$x = $x + 1;
Astfel, la fiecare repetare, variabila $x ia pe rând valorile 1, 2, 3, 4, 5. La ultima, condiţia din linia
WHILE nu mai este îndeplinită şi ciclul ia sfârşit.
Folosirea lui $x
Variabila de contorizare ca ciclului (în cazul de mai sus $x ) poate fi folosită nu numai pentru
numărare. Spre exemplu, dacă vrem să creem o pagină web cu toate numerele de la 1 la 1000 în ea,
putem fie să scriem fiecare număr în parte, fie să folosim următoarea secvenţă:
$numar = 1000;
$current = 0;
while ($current < $numar) {
++$current;
echo "$current<br>";
}
Ce ar fi de spus despre acest script? Mai întâi că am plasat, spre deosebire de cazul dinainte, comanda
de incrementare ++$current; înaintea instrucţiunii echo . Asta pentru că dorim să începem cu scrierea
lui 1 , nu a lui 0. De fapt, linia ++$current; poate fi plasată oriunde în ciclul WHILE. După cum se pot
efectua orice operaţii aritmetice asupra numărului în cauză.
Vectori şi matrici
Vectorii sunt structuri obişnuite în majoritatea limbajelor de programare. Sunt variabile speciale care
pot lua mai mult decât o singură valoare, toate stocate în spaţiul propriu numerotat - în vector. Vectorii
sunt extrem de utili mai ales la ciclurile WHILE.
Definirea - iniţializarea unui vector este puţin diferită de cea a unei variabile normale. În exemplul
următor vom introduce un vector cuprinzând 5 nume:
$numes[0] = 'John';
$numes[1] = 'Paul';
$numes[2] = 'Steven';
$numes[3] = 'George';
$numes[4] = 'David';
Aşa cum se vede, componentele unui vector sunt numerotate, pornind de la 0. Pentru a adăuga o
valoare uneui vector trebuie să specificăm poziţia din cadrul vectorului - prin intermediul indicelui
plasat între parantezele drepte [ ].
Citirea unui vector se face exact la fel ca şi atribuirea. Tot ce avem de făcut este să precizăm numele
vectorului şi numărul componentei dorite. Astfel, dacă vrem să vedem cel de al treilea nume (din
vectorul $numes ) putem folosi scriptul:
19
Which would output:
Una din cele mai utile utilizări a ciclurilor apare pentru a extrage informaţiile dintr-un vector. Spre
exemplu, dacă vrem să scoatem umătoarea listă de nume:
$numar = 5;
$x = 0;
while ($x < $numar) {
$numenumar = $x + 1;
echo "Numele $numenumar este $numes[$x]<br>";
++$x
}
Aşa cum se poate vedea, folosim variabila $x din acest ciclu pentru a afişa numele înregistrate într-un
vector. Iar pentru afişare am folosit variabila $numenumar care este cu o unitate mai mare decât $x.
Asta deoarece numerotarea (indixarea) vectorului porneşte de la 0.
Partea 5-a
In lecţia următoare vom vedea cum trimitem un mesaj e-mail din PHP.
E-mail cu PHP
Introducere
Este extrem de simplu de trimis un mesaj e-mail din PHP, spre deosebire de situaţia din alte limbaje de
comandă care necesită o iniţializare aparte, tip CGI. De fapt, în PHP avem doar o singură comandă
mail() pentru a trimite un mesaj. Utilizată în formatul următor:
mail($destinatar,$subiect,$corpul_mesajului,$antet);
In acest exemplu variabilele indică prin numele lor sintaxa comenzii. De fapt se pot include chiar
textele în comandă. Să le luăm pe rând: Mai întâi variabila $destinatar. Aceasta conţine adresa e-mail la
care să fie transmis mesajul. Variabila $subiect trebuie să conţină textul care dorim să apară în linia
Subject: a mesajului. Iar variabila $corpul_mesajului conţine textul mesajului - conţinutul său.
Prin variablia $antet se transmit componentele suplimentare din antetul mesajului. Cel mai des e vorba
despre câmpul From: , dar poate fi inclusă oricare linie din antet, precum Cc:, sau Bcc: .
20
Mai înainte de a expedia un mesaj, dacă folosim variabile atunci va trebui ca, mai întâi să iniţializăm
aceste variabile. Iată un exemplu:
$destinatar = "[email protected]";
$subiect = "despre PHP";
$corpul_mesajului = "PHP este unul dintre cele mai bune limbaje de comenzi pentru
alcătuirea scripturilor";
$antet = "From: [email protected]\n";
mail($destinatar,$subiect,$corpul_mesajului,$antet);
echo "Mesaj trimis la $destinatar";
Acest cod va face două lucruri. Va trimite un mesaj la adresa [email protected] , cu subject:
'despre PHP' şi cu textul:
PHP este unul dintre cele mai bune limbaje de comenzi pentru alcătuirea scripturilor
iar mesajul e-mail va apare ca venind de la [email protected] . Dar va mai fi transmis şi textul:
către navigator.
In exemplul de mai sus, în variabila $antet, linia From: este încheiată cu \n. Acesta reprezintă un
simbol foarte important la trimiterea unui e-mail. Este codul pentru "linie nouă". Cum în antetul
mesajului (şi deci şi în variabila $antet) putem avea mai multe linii, fiecare trebuie să se încheie cu
combinaţia \n . Acesta este standardul international pentru formatul mesajelor e-mail.
Combinaţia aceasta de trecere la linie nouă ( \n ) poate fi folosită şi în corpul mesajului, în variabila
$corpul_mesajului . Dar nu are voie să apară nici în adresa de destinaţie (în variabila $destinatar ), nici
în subiectul mesajului (variabila $subiect ).
In sintaxa comenzii mail() nu contează numele variabilelor ci doar poziţia - ordinea lor. Adică, în
exemplul de mai sus putem folosi alte patru variabile numite $v1 , $v2 , $v3 şi $v4 . Totul se poate
scrie şi într-o singură linie, introducând direct textul, în forma:
Erori
Aşa cum orice programator ştie foarte bine, este foarte uşor să faci greşeli într-un script, după cum e
foarte simplu să intervină greşeli în scrierea adreselor e-mail (în mod special dacă folosim scriptul
pentru a construi mesajele). Din cauza asta, este util să adăugăm scriptului o secvenţă de verificare, de
forma:
if(mail($to,$subject,$body,$headers)) {
echo "Mesajul e-mail a fost trimis la $to cu subiectul: $subject";
} else {
echo "A intervenit o eroare la trimiterea mesajului. Verificaţi scriptul şi asiguraţi-vă că adresa
e-mail $to este corectă";
}
21
Acest script pare suficient de limpede. Dacă mesajul este expediat fără probleme, acest fapt va fi
comunicat - va apare în fereastra navigatorului. Similar, în cazul unei erori, vom recepţiona
atenţionarea cuvenită, cu sugestii de remediere.
PHP cu Formulare
Introducere
In lecţia anterioară am văzut cum folosim PHP-ul pentru a trimite mesaje e-mail dintr-un script. In
lecţia aceasta vom contiua această discuţie şi vom vedea cum folosim formularele cu PHP, pentru a
face scripturile PHP cât mai utile.
Construcţia formularului
Scrierea unui formular pentru a fi folosit cu un script PHP se face exact la fel ca şi în mod normal, în
HTML. Cum acesta este un curs de PHP nu vom intra în detalii privind scrierea formularului, ci vom
discuta trei dintre compunentele pe care trebuie să le ştiţi:
va afişa o caseta pentru introducerea unui text, casetă în care apar scrise (la început) cuvintele Numele
d-voastra. De fapt atributul value în această linie este opţional. Informaţia - textul atribuit atributului
nume va constitui numele acestei casete text, trebuind să fie unic în formular.
<textarea nume="mesaj">
Scrieţi aici mesajul d-voastră.
</textarea>
va afişa o casetă mare de text cuprinzând îndemnul 'Scrieţi aici mesajul d-voastră.'. Si de data aceasta,
numele casetei este definit (mesaj) şi trebuie să fie unic.
această linie va crea un buton de trimitere în formularul respectiv. Desigur puteţi schimba/alege textul
care apare pe buton modificând expresia atribuită lui value.
Toate elementele formularului trebuie să fie cuprinse între tagurile <form> . Adică se folosesc cam aşa:
unde valoarea atribuită lui form action spune care este script-ul căruia i se transmit datele (în acest caz
fişierul prelucrare.php). Aici putem avea chiar un URL complet (spre exemplu
http://relis.uvvg.ro/~bogdantica/Cursuri/PHP-proc/prelucrare.php). Metoda method spune formularului
cum să transmită datele sale. Cu opţiunea POST datele vor fi trimise scriptului într-un pachet (stream)
atunci când acesta le cere. O altă opţiune este GET, caz în care datele din formular sunt trimise în
forma unui url astfel că vor apare după un semn ? , precum în exemplul:
http://relis.uvvg.ro/~bogdantica/Cursuri/PHP-proc/prelucrare.php?nume=Mihai
Nu prea contează care metodă o folosiţi, dar este mai bine să folosiţi POST dacă-i vorba de informaţii
delicate (parole, etc.) pentru ca acestea să nu poată fi văzute în bara de adrese a navigatorului.
Pasul următor este să luăm, să extragem datele din formularul transmis script-ului, astfel încât să putem
face ceva cu ele. Există două procedee diferite de extragere a datelor în PHP, care depind de modul în
care datele au fost trimise (cu metoda GET sau cu POST). Diferenţa majoră dintre cele două constă în
22
faptul că, folosind GET, variabilele şi datele vor fi vizibile în adresa paginii, în timp ce folosind POST
acestea sunt invizibile. Cu GET, însă, putem transmite informaţii către script fără un formular, pur şi
simplu editâbd URL-ul.
Asta se poate face cam la fel cu transmiterea formularului folosind GET. Avantajul ar fi că, astfel se
pot crea legături la script-uri care vor produce efecte diferite în funcţie de legătura selectată. Spre
exemplu, putem construi un script care să ne arate diferite pagini Web, funcţie de legătura selectată:
pagina.php?user=bogdantica
poate arăta pagina mea Web (a utilizatorului bogdantica, iar:
pagina.php?user=dbogdanticau
poate arăta pagina utilizatorului dbogdanticau de pe serverul Relis, folosind acelaşi script.
Ba este posibil şi să transmitem script-ului mai mult decât o singură valoare a unui atribut folosind
schema de mai sus şi separând elementele prin simbolul & :
pagina.php?user=david&referrer=gowansnet&area=6
Aceste elemente vor putea fi accesate separat folosind variabilele GET: user, referrer şi area.
Pentru a prelua o variabilă care a fost trimisă script-ului cu metoda POST trebuie să folosim un apel de
forma:
$nume_variabila=$_POST['variabila'];
care preia, în fond, variabila de la POST (numele unui câmp din formular) şi o atribuie variabilei
$nume_variabila.
Iar asta se poate face şi trebuie făcut pentru fiecare variabilă pe care vrem să o folosim din formular
(sau din URL).
In încheierea acestei secţiuni, să vedem cum aplicăm cele discutate mai sus şi cum realizăm un
mecanism care să producă şi să ne transmită un mesaj e-mail cu comentariile unui utilizator.
Astfel avem un formular simplu în care utilizatorul poate introduce adresa sa e-mail, numele său şi
comentariile dorite. Putem desigur să adăugăm şi alte părţi într-un asemenea formular, cu condiţia să
actualizăm şi script-ul. Pentru cazul simplu de mai sus, scriem următorul script PHP:
<?
$numele=$_POST['nume'];
$adresa=$_POST['email'];
$comentariu=$_POST['comentar'];
$catre="[email protected]";
$mesaj="$numele tocmai a transmis comentariile sale. Acolo spune:\n$comentariu\n\nAdresa
sa e-mail a fost: $adresa";
23
if(mail($catre,"Comentarii din propriul Site",$mesaj,"From: $email\n")) {
echo "Multumiri pentru comentariile d-voastra.";
} else {
echo "Exista o problema la transmiterea mesajului. Verificati, va rog, modul in care ati
completat formularul.";
}
?>
Nu uitaţi să înlocuiţi adresa mea e-mail [email protected] cu propria voastră adresă e-mail.
Acest script trebuie salvat ca fişier cu numele mail.php , iar ambele fişiere (acesta şi pagina Web în
care a fost inclus formularul de mai sus) trebuie încărcate pe serverul Web în zona destinată
documentelor accesibile (acolo de unde vor fi apelate). Tot ce a mai rămas atunci de făcut, este să
verificăm completând formularul.
Observaţii finale
Introducere
In lecţiile precedente am văzut elementele de bază privind PHP şi scrierea unui script în PHP. Acum
vom mai vedea câteva amănunte, oarecum disparate.
Comentariile
In PHP există două moduri de a introduce comentarii. Unul folosit pentru o singură linie de
comentariu, altul folosit, mai ales, pentru comentarii mai largi, care privesc mai multe linii.
Comentariul dintr-o linie se scrie în forma:
Tot ce apare în linie după marcajul // va fi ingnorat la execuţia scriptului. Marcajul şi comentariul
aferent poate apare oriunde pe linie (la început, sau după o serie de comenzi, spre exemplu:
Textul este plasat deci între marcajele /* şi */ . Tot ce se află între acestea va fi ignorat la execuţie. Este
foarte important să nu uităm să închidem comentariul, cu */ , altfel scriptul nu va rula deloc.
Aşa cum poate aţi remarcat, în cele 6 lecţii din acest curs, au fost folosite patru moduri diferite de a
scoate - transmite informaţiile către navigator:
echo("textul de aici");
echo "textul de aici";
24
print("textul de aici";
print "textul de aici";
Fiecare din liniile de mai sus face acelaşi lucru, aşa încât putem folosi oricare dintre variante într-un
script. Si nu există nici o constrângere de a utiliza o aceeaşi variantă pe parcursul aceluaşi script.
Singura problemă este că, aşa cum am discutat în lecţia a 2-a, toate apariţiile semnului " în codul
HTML trebuie să apară (să fie înlocuite cu) \" chestie care, la un script lung, poate să dureze. Asta ne
conduce la o parte foarte utilă a PHP. Dacă, spre exemplu, creem dinamic un antet al unei pagini Web
cu PHP, atunci o să avem o succesiune de coduri cam aşa:
<?
Prima parte a codului PHP
?>
Codul HTML
<?
Partea finală a codului PHP
?>
Asta merge şi mai bine dacă codul PHP va continua de unde a fost lăsat, adică cam aşa:
<?
IF Statement {
?>
HTML For IF Being Correct
<?
} else {
?>
HTML For IF Being Wrong
<?
}
?>
Trebuie, desigur, să nu uităm să închidem buclele din instrucţiunea IF (o eroare destul de frecvent
întâlnită).
25
PROGRAME PHP
<
?php $sir="vara aceasta mergem in Olanda";
//sa se prezinte operatiile care se pot face cu $s2= "Italia";
numere reale $s1=substr_replace($sir,$s2,23);
$a=8; echo ("$s1");
$b=3.14; ?>
$c=$a+$b; --------
$d=array("primul","al doilea","al treilea"); <?php
$d[0]="cine "; //sa se prezinte functiile la nivel de siruri de
echo("variabila ceste =$c <br> \n"); caractere
echo("$d[0]<br> \n"); $s1="vara aceasta mergem in Olanda";
echo("$d[1]<br> \n"); $s2= "Italia";
echo("$d[2]<br> \n"); $s3=strcmp($s1,$s2);
$d[0]="cine "; echo ("$s3 <br> \n");
echo("$d[0]<br> \n"); $s4=strcmp($s2,$s1);
$c=$a/$b; echo ("$s4 <br> \n");
echo("variabila diferenta c este =$c <br> \ $s5=strlen($s2);
n"); echo (" $s5 <br> \n");
$c=$a-$b; $p=strpos($s1," ");
echo("variabila c este =$c <br> \n"); echo (" $p <br> \n");
$c=$a%2; $s6= "lia";
echo("variabila Modulo este =$c <br> \ $s7=strpos($s6,$s1);
n"); echo ("$s7 <br> \n");
$a=$a+8; ?>
echo("variabila c este =$a <br> \ ---------------------
n"); <?php
$a=++$a; //sa se determine incepand cu ce pozitie un
echo("variabila c este =$a <br> \ subsir e gasit in altul
n"); $s1=" Italia asta e Italia";
$a=--$a; $s2= "Italia";
echo("variabila c este =$a <br> \ $s5=strrpos($s1,$s2);
n"); echo("$s5\n");
?> ?>
-------- ------------
<?php <?php
//sa se scrie un program care calculeaza aria //sa se extraga dintr-un sir de la o anumita
cercului pozitie un numar de litere
$raza =3.8; //sa se ordoneze descrescator `un sir
$pi=pi(); $s1=" Italia asta e Italia";
$aria_cercului=$pi*$raza*$raza; $s2=substr($s1,2,3);
echo(" raza <br> \n"); echo ("$s2 <br>\n");
echo $raza; $s2="abc";
echo(" <br> \n"); $s3=strrev($s2);
echo ("aria este =$aria_cercului"); echo ("$s3 \n");
?>
?> ------------
-------------- <?php
<?php //sa se faca conversia din majuscule in
//sa se prezinte concaternarea a doua minuscule si invers
siruri $s1="AB";
26
$s2=strtolower($s1); $n=7;
echo "$s2 <br> \n"; if ($n>=5)
$s3="cd" ; {
$s4=strtoupper($s2); echo("promovat") ;
echo "$s4 <br> \n"; echo(" bravo");
?> }
---------- else
<?php echo("Nepromovat");
//sa se inlocuiasca intr un sir niste litere cu
altele
$s1="ABefgAB"; ?>
$s2=strtr($s1,"AB","CD"); --------------
echo("$s2"); <?php
// sa se prezinte o situatie la invatatura
?> global
---------- $n=7;
<?php if ($n<5)
//sa se inceapa un sir cu majuscula echo("Nepromovat");
$s1= ucfirst("abc"); elseif($n<=7)
echo(" $s1 <br> \n"); {
?> echo("e binisor");
------------- }
<?php else
//fiecare subsir sa inceapa cu majuscula {
$s1= ucwords("abc cde fgh"); echo("promovat cu nota mare ") ;
echo(" $s1 <br> \n"); echo(" bravo");
?> }
-----------------
<?php ?>
//sa se elimine spatiile dintre cuvinte ----------
$s1= trim(" abc cde fgh "); <?php
echo(" $s1 <br> \n"); // sa se prezinte instructiune ..IN CAZ CA...
?> $v=3;
--------- switch($v)
<?php {
//sa se prezinte sub forma de data case 1:
calendaristica niste variabile print "mica";
$a=2002; break;
$L=5; case 3:
$z=25; print "prea mare";
echo date ("l F d , Y", mktime(0,0,0 ,$L, break;
$z+30,$a)); default:
?> print "incorecta";
---------------------------- }
<?php
//sa se prezinte ora... ?>
echo (TIME()); ----------
?> <?php
--------------
<?php //INSTRUCTIUNEA IN CAZ ..CA SA FIE
//sa se faca converisa timpului COMPLETA
mt_srand (TIME()); $v=5;
$N=MT_RAND(0,1000); switch($v)
ECHO $N; {
case 1:
?> print "mica";
--------- break;
<?php case 3:
// sa se detemine promovarea sau nu la print "prea mare";
informatica dupa medie break;
27
default: $m="maria";
print "incorecta"; $n=array("ion","maria","george");
} foreach($n as $m)
?> {
------------ echo("$m e invitat <br> \n");
<?php }
//INSTRUCTIUNE SIMPLA DE ?>
DECIZIE... -------------
$a=($v>6 ? "da" : "nu"); <html>
echo "$a"; <head>
?> <title>modulul unui numar</title>
------------- </head>
<?php <body>
//suma primelor n numere <?php
$s=0; $n = -321;
$n1=5; $n1 = abs( $n );
for ($n=1;$n<=5;$n++) echo $n1;
$s+=$n; //prints "321"
echo"suma primelor $n1 numere este : $s ?>
"; </body>
</html>
?> ---------
--------- <html>
<?php <head>
//suma celor n numere cu ..instructiunea <title>transmiterea prin valoare la functii si
WHILE proceduri</title>
$s=0; </head>
$n1=5; <body>
$n=1; <?php
function ff($n1) {
while ($n<=5) $n1 += 5;
{ }
$s+=$n; $n2 = 10;
$n++; ff($n2);
} echo $n2;
echo"suma primelor $n1 numere este : $s ?>
"; </body>
?> </html>
--------------------- --------
<?php <html>
//CU INSTRUCTIUNEA..REPETA..PANA <head>
CAND..sa se scrie suma primelor n numere <title>trnsmiterea prin valoare cu mai multi
$s=0; parametrii</title>
$n1=5; </head>
$n=1; <body>
<?php
do function ff($n1, $n2) {
{ $n = $n1 + $n2;
$s+=$n; return $n;
$n++; }
} while ($n<=5) ; echo ff(3,5);
echo"suma primelor $n1 numere este : $s //will print "8"
"; ?>
</body>
?> </html>
------------ -----------
<?php <html>
//sa se faca o cautare intr un sir si daca e <head>
gasita valoarea sa poata fi inlocuita cu orice <title>functie fara parametrii</title>
de acolo </head>
28
<body> {
<?php global $a;
function ff() { $c=$a+$b;
echo "<h1>salutari</h1>"; return $c;
} }
ff(); $a=100;
?> echo suma(12);
</body> ?>
</html> -------------
---------- <?php
<html> function f1()
<head> {
<title>tabla inmultirii cu 2</title> $x=5;
</head> echo "in interiorul functiei ,x= $x <br> ";
<body> }
<?php $x=10;
for ($n=1; $n<=12; $n++) { echo "in scriptul PHP x= $x <br>";
echo "$n INMULTIT CU 2 ESTE ".($n * f1();
2)."<br>"; echo "in scriptul PHP x= $x <br>";
}
?> ?>
</body> ----------
</html> <?php
----------- //sa se prezinte comparativ transmitrea
<html> datelor prin referinta si valoare
<head> function referinta(&$x)
<title>structura repetitiva for fara {
initilalizare</title> $x=1;
</head> }
<body> function valoare($x)
<?php {
$n = -4; $x=1;
for (; $n <= 10; $n++) { }
if ($n == 0) { $y=15;
continue; echo "1.initial : y=$y <br> ";
} valoare($y);
$temp = 4000/$n; echo " 2.prin valoare : y=$y <br> ";
echo "4000 impartit la $n este... referinta($y);
$temp<br>"; echo " 3.prin referinta : y=$y <br> ";
} valoare($y);
?> echo " 4.prin valoare : y=$y <br> ";
</body>
</html> ?>
----------- sa se realizeze o lista derulanta cu un
<html> declansator
<head>
<title>DEFINIREA UNEI CONSTANTE IN
PHP</title>
</head>
<body>
<?php
define("CONSTANTA", "Bogdan");
print "salutari ".CONSTANTA;
?>
</body>
</html>
<?php
//SA SE declare variabile globale intr o
functie <?php
function suma ($b)
29
echo"<HTML>\n"; echo " <td align = right>". $distance /
echo"<HEAD>\n"; 10 ."</td>\n</tr>\n";
echo"<BODY>\n"; $distance += 50;
echo"<TITLE> pagina cu doua formulare }
</TITLE>\n";
echo"<HEAD>\n"; ?>
echo"</BODY>\n"; </table>
echo"<h2>completati formularele</h2>\n\n"; </body>
echo"<table border=4 celLpadding=10>\n"; </html>
echo"<tr>\n"; ---------------
echo"<td valigN=top>\n\n"; <?php
echo"<!--primul formular-->\n"; // sa se importe un alt fisier ca si continut
echo"<form method=post function f11()
action=phpinfo.php>\n"; {
echo"numele clientului:\n"; echo("aici <br> \n");
echo"<br><input type=text size=30 }
name=\"nume_client\">\n"; f11();
echo"<br>produsul solicitat:\n"; require("functie5.php");
echo"<br><select multiple size=4 f1(5);
name=\"tip_pizza[]\">\n" ; ?>
echo "<option value=\"marguerita\">pizza ---------
marguerita</option>\n"; <?php
echo"<option value=\"rustica\">pizza //sa se afiseze o matrice
rustica</option>\n" ; for ($i=0;$i<5;$i++)
echo"<option value=\"salami\">pizza for ($i=0;$i<5;$i++)
salami</option>\n"; $mat[$i][$j]=$i+$j;
echo"<option value=\"deliciosa\">pizza for ($i=0;$i<5;$i++)
deliciosa</option>\n"; {
echo"<option value=\"hawaii\">pizza for ($i=0;$i<5;$i++) echo($mat [$i][$j]."
hawaii</option>\n"; ");
echo"<select>\n"; echo("<br> \n");
echo"<br><input type=submit }
value=\"trimite formularul clientului\">\n";
echo"</form>\n\n";
echo"</td>\n"; ?>
echo"</tr>\n"; ---------
echo"</table>\n"; <html>
echo"</BODY>\n"; <head>
echo"</HTML>\n"; <title>conversia tipurilor de date</title>
?> </head>
<html> <body>
<body> <?php
<table border = 0 cellpadding = 3> $undecided = 3.14;
<tr> print gettype($undecided); // double
<td bgcolor = "#CCCCCC" align = print "este transformat in $undecided<br>";
center>Distanta</td> // 3.14
<td bgcolor = "#CCCCCC" align = settype($undecided, 'string');
center>Cost</td> print gettype($undecided); // string
</tr> print "este transformat in $undecided<br>";
<? // 3.14
//se considrea ca un taximestrist plateste settype($undecided, 'integer');
de zece ori mai putin cat e distanta pe print gettype($undecided); // integer
//benzina.Sa se calculeze costul dar sa nu print "este transformat in $undecided<br>";
depasesc 25 km // 3
$distance = 50; settype($undecided, 'double');
while ($distance <= 250 ) print gettype($undecided); // double
{ print "este transformat in $undecided<br>";
echo "<tr>\n <td align = // 3.0
right>$distance</td>\n"; settype($undecided, 'boolean');
print gettype($undecided); // boolean
30
print "este transformat in $undecided<br>"; <tr><td colspan="3">exprimarea pretului in
// 1 dolari</td></tr>
?> <tr><td>14</td><td>32</td><td>71</td>
</body> </table>
</html> <?php
-------- }
<?php ?>
//sa se determine numarul de componente al </body>
unui vector si de unde incep indicii </html>
//ca valoare ---------
for ($i=0;$i<5;$i++) $x[$i]=$i+10; <html>
for ($i=0;$i<5;$i++) echo("$x[$i] <br> \n"); <head>
<title>sa se prezinte structura for fara
$a=count($x) ; primul argument</title>
echo (" nr de componente al vectorului= $a </head>
<br> \n"); <body>
$a1=key($x); <?php
echo (" indicele vectorului unde e pointerul= $i1 = -4;
$a1 <br>"); for (; $i1 <= 10; $i1++) {
$a1=next($x); if ($i1 == 0) {
echo (" indicele vectorului unde e <b> continue;
pointerul +1</b> este = $a1 <br>"); }
$a1=next($x); $t = 4000/$i1;
echo (" indicele vectorului unde e <b> echo "4000 catul impartirii $i1 este...
pointerul +1</b> este = $a1 <br>"); $t<br>";
$a1=key($x); }
echo (" indicele vectorului unde e pointerul= ?>
$a1 <br>"); </body>
$a1=prev($x); </html>
echo (" indicele vectorului unde e <b> ----------
pointerul -1</b> este = $a1 <br>"); <html>
?> <head>
---------- <title>sa se prezinte structura
<html> repeta...panacand...</title>
<head> </head>
<title>tabla inmultirii cu 2 cu <body>
WHILE</title> <?php
</head> $t = 1;
<body> do {
<?php echo "numarul este: $t<br>\n";
$n = 1; $t++;
while ($n <= 12) { } while (($t > 200) && ($t < 400));
echo "$n ori 2 este ".($n * 2)."<br>"; ?>
$n++; </body>
} </html>
?> ---------
</body> <html>
</html> <head>
----------- <title>prezentati rolul
<html> comenzii..break</title>
<head> </head>
<title>prezentarea structurii if <body>
simpla</title> <?php
</head> $t = -4;
<body> for (; $t <= 10; $t++) {
<?php if ($t == 0) {
$n1 = true; break;
if ($n1) { } else {
?> $temp = 4000/$t;
<table border="1">
31
echo "4000 divided by $t is... <title>dati exemplu de folosire a
$temp<br>"; comenzii..print</title>
} </head>
} <body>
?> <?php
</body> $display_prices = true;
</html> if ($display_prices) {
------- print "<table border=\"1\">";
<html> print "<tr><td colspan=\"3\">";
<head> print "exprimarea in dolari a pretului";
<title>sa se prezite structura ..if...</title> print "</td></tr>";
</head> print
<body> "<tr><td>14</td><td>32</td><td>71</td></tr
<?php >";
$t = "t1"; print "</table>";
if ($t == "t1") { }
echo "e bine asa: $t"; ?>
} </body>
?> </html>
</body> --------
</html> <html>
--------- <head>
<html> <title>sa se creeze un tabel de forma
<head> matrice</title>
<title>sa se prezinte structura </head>
if...else..</title> <body>
</head> <?php
<body> print "<table border=\"1\"> \n";
<?php for ($y=1; $y<=12; $y++) {
$t11 = "initial"; echo "<tr> \n";
if ($t11 == "bine") { for ($x=1; $x<=12; $x++) {
echo "asta e 1"; echo "<td>";
} else { echo ($x * $y);
echo "aste e altfel $t11"; echo "</td> \n";
} }
?> echo "</tr> \n";
</body> }
</html> echo "</table>";
--------- ?>
<html> </body>
<head> </html>
<title>sa se prezinte imbricarea structurilor -------
if..else..</title> <html>
</head> <head>
<body> <title>sa se prezinte structura ..decizionala
<?php IN CAZ CA selector EXECUTA...</title>
$mood = "initial"; </head>
if ($mood == "bine") { <body>
echo "in prima faza"; <?php
} elseif ($mood == "sad") { $mood = "s";
echo "a doua faza"; switch ($mood) {
} else { case "h":
echo "asta e in final $mood"; echo "peima";
} break;
?> case "s":
</body> echo "doi";
</html> break;
-------- default:
<html> print "altfel $mood";
<head> break;
32
} face=\"Helvetica, Arial, Sans-Serif\">
?> $txt</font>";
</body> }
</html> f("stratul<br>",5);
-------- f("scris 1<br>");
<html> f("scrie 3<br>");
<head> f("scrisul patru<br>");
<title>sa se prezinte functionarea ?>
operatorului decizional ..?...:...</title> </body>
</head> </html>
<body> ---------
<?php <html>
$f1 = "s"; <head>
$text = ($f1 == "h") ? "ce apare?" : "AM <title>variabila statica are aceiasi valoare si
TERMINAT$f1"; e locala</title>
echo "$text"; </head>
?> <body>
</body> <?php
</html> function f($txt) {
<html> static $n1 = 0;
<head> $n1++;
<title>cu functii sa se implementeze diferite echo "<h1>$n1. $txt</h1>";
tipuri de scris</title> }
</head> f("unu");
<body> echo "<p>acesta e primul rang</p>";
<?php f("Doi");
function f($tag, $txt, $func = "") { echo "<p>acesta e ultimul rang</p>";
if ((!empty($txt)) && ?>
(function_exists($func))) { </body>
$txt = $func($txt); </html>
return "<$tag>$txt</$tag>\n"; --------
} <html>
} <head>
<title>variabilele globale din functie</title>
function underline($txt) { </head>
return "<u>$txt</u>"; <body>
} <?php
$n1 = 0;
echo f('b', 'make me bold'); function f($txt) {
global $n1;
$n1++;
print f('i', 'am scris subliniat', "underline"); echo "<h1>$n1. $txt</h1>";
}
f("unu");
print f('i', 'am scris aplecat italic', echo "<p>primul apel</p>";
create_function('$txt', 'return "" f("doi");
$txt"";')); echo "<p>al doilea apel</p>";
?>
?> </body>
</body> </html>
</html> --------
--------- <html>
<html> <head>
<head> <title>aplelul repetat al unei functii</title>
<title>tipuri de argumente</title> </head>
</head> <body>
<body> <?php
<?php function f($txt) {
function f($txt, $size = 3) { echo "$txt<br> \n";
echo "<font size=\"$size\" }
33
f("o linie"); --------
f("a doua"); <?php
f("a treia"); // sa se determine referentierea ca obiect al
?> unei clase
</body> class numeleclasei {
</html> var $color = "verde";
------- var $directia = "fixa";
<html> var $model = "tare";
<head> }
<title>memorarea unei variabile daca nu $car = new numeleclasei();
declarata nici statica nici globala nu apare $car -> color = "ALBA";
in program la aapel</title> $car -> directia = "MOBILA";
</head> $car -> model = "slab";
<body> echo "rezultatul e: ".$car -> color." ".$car ->
<?php directia." ".$car -> model;
function test() { ?>
$testvariable = "prima"; -------
} <?php
echo "ce variabila am: $testvariable<br>"; //sa se defineasca o metoda(functie) in cadrul
?> unei clase si sa se apeleze
</body> class numeleclasei {
</html> function f() {
-------- echo "salut!";
<html> }
<head> }
<title>nu se stie de variabila globala chiar $object1 = new numeleclasei();
daca e declarata in afara functiei</title> $object1 -> f();
</head> ?>
<body> -------
<?php <?php
$n1 = 42; //sa se determine apelul unei metode(functii)
function f() { in cadrul unei clase
echo "ce memorez $n1<br>"; class numeleclasei {
} var $name = "Matei";
f(); function f() {
?> echo "numele meu este: ".$this -> name;
</body> }
</html> }
----------- $object1 = new numeleclasei();
<?php $object1 -> f();
//sa se prezinte crearea unui obiect in ?>
programarea pe obiecte --------
class myClass { <?php
} class numeleclasei {
$object1 = new myClass(); //sa se puna in valoare recunoasterea
echo "$gettype($object1)"; metodelor in cadrul clasei( adoua functie e
?> fara ...valoare)
------- var $numele = "Matei";
<?php function f($n) {
//sa se reprezinte referentierea elementelor unei $this->numele = $n;
clase }
class numeleclasei { function f1() {
var $color = "verde"; echo "numele meu este acesta: ".$this-
var $directia = "fixa"; >numele;
var $model = "tare"; }
} }
$car = new numeleclasei(); $object1 = new numeleclasei();
echo "REFERIREA ESTE".$car -> color." ". $object1 -> f("Julia");
$car -> directia." ".$car -> model; $object1 -> f1();
?> ?>
34
-------- printf("in baza 8: %o<br>", $number);
<?php printf("ca sir de caractere: %s<br>", $number);
//sa se prezinte transmiterea functiilor si printf("in baza 16 cu litere mici: %x<br>",
datelor la clase derivate $number);
class numeleclasei { printf("in baza 16 cu litere mari: %X<br>",
var $name = "Matei"; $number);
function numeleclasei($n) { ?>
$this->name = $n; </body>
} </html>
function F1() { --------
echo "numele meu este ".$this->name; <html>
} <head>
} <title>memorarea unui vector</title>
class numeleclaseiDERIVATE extends </head>
numeleclasei { <body>
<?php
} $products = array("produsul 1"=>"222.4",
$object1 = new "produsul 2"=>"4",
numeleclaseiDERIVATE("MATEI FIUL"); "produsul 3"=>80.6
$object1 -> F1(); );
?> echo "<pre>";
-------- printf("%-20s%23s\n", "Nume produs",
<?php "pret");
//cand o clasa derivata are propria metoda printf("%'-43s\n", "");
cu aceiasi nume cu cea din clasa tata se foreach ($products as $key=>$val) {
apeleaza cea din clasa derivata chiar daca printf( "%-20s%20.2f\n", $key, $val );
are aceiasi denumire }
class numeleclasei { echo "</pre>";
var $name = "Matei"; ?>
function numeleclasei($n) { </body>
$this->name = $n; </html>
} ---------
function F1() { <html>
echo "acesta e numele meu ".$this- <head>
>name; <title>citirea datei</title>
} </head>
} <body>
class numeleclaseiDERIVATE extends <?php
numeleclasei { $date_array = getdate();
function F1() { foreach ($date_array as $key => $val) {
echo "e problema cu numele:"; echo "$key = $val<br>";
} }
} ?>
$object1 = new numeleclaseiDERIVATE("fiul <hr>
lui matei"); <?
$object1 -> F1(); echo "data: ".$date_array['mday']."/".
?> $date_array['mon']."/".
-------- $date_array['year']."<p>";
<html> ?>
<head> </body>
<title>reprezentarea in baze de </html>
numeratie</title> -------
</head> <html>
<body> <head>
<?php <title>formatul datei calendaristice</title>
$number = 543; </head>
printf("in baza 10:: %d<br>", $number); <body>
printf("in baza 2 %b<br>", $number); <?php
printf("ca numar zecimal cu dubla precizie: $time = time();
%f<br>", $number); echo date("m/d/y G.i:s", $time);
35
echo "<br>"; ?>
echo "ziua "; </body>
echo date("j of F Y, \a\\t g.i a", $time); </html>
?> <?php
</body> session_start();
</html> ?>
-------- <html>
<html> <head>
<head> <title>deschiderea unei sesiuni</title>
<title>crearea datei calendaristice</title> </head>
</head> <body>
<body> <?php
<?php echo "<p>sesiunea ta este cu nr acesta
".session_id()."</p>";
$ts = mktime(4, 15, 0, 8, 23, 2005); ?>
echo date("m/d/y G.i:s<br>", $ts); </body>
echo "<br>"; </html>
echo "aceasta data este "; -------
echo date("j of F Y, \a\\t g.i a", $ts ); <?php
?> session_start();
</body> ?>
</html> <html>
sa se realizeze transmiterea datelor dintr- <head>
un formular html intr-un program php <title>variabilee care sunt in sesiunea
ca in imagine : aceasta</title>
</head>
<body>
<?php
$_SESSION[product1] = "informatia 1";
$_SESSION[product2] = "informatia 2";
echo "aceste informatii le am memorat";
?>
<html> </body>
<head> </html>
<title>exemplu de formular</title> --------
</head> <?php
<body> session_start();
<form action="listing9.2.php" ?>
method="POST"> <html>
<p><strong>Numele:</strong><br> <head>
<input type="text" name="user"> <title>listarea continutului variabilelor
<p><strong>Adresa ta:</strong><br> dintr-o sesiune</title>
<textarea name="address" rows="5" </head>
cols="40"></textarea> <body>
<P><input type="submit" <?php
value="trimite"></p> echo "sesiunea ta avea salvate urmatoarele
</form> informatii:";
</body> echo "<ul><li>$_SESSION[product1]
</html> <li>$_SESSION[product2]\n</ul>\n";
-------SI SURSA PHP--- ?>
<html> </body>
<head> </html>
<title>citeste datele din foemular </title> ---------
</head> <?php
<body> session_start();
<?php ?>
echo "<p>bine ai venit <html>
<b>$_POST[user]</b></p>"; <head>
echo "<p>adrea ta <title>continutul unui vector de
este:<br><b>$_POST[address]</b></p>"; informatii:</title>
36
</head> echo "<li>$p";
<body> }
<h1>rezultatul acestei pagini</h1> echo "</ol>";
<?php }
if (isset($_POST[form_products])) { ?>
if (!empty($_SESSION[products])) { <p><a href="listing10.4.php">ma intorc la
$products = array_unique( pagina de cautare:</a></p>
</body>
array_merge(unserialize($_SESSION[products </html>
]), ---------
$_POST[form_products])); <html>
$_SESSION[products] = <head>
serialize($products); <title>folosirea comenzi: include()</title>
} else { </head>
$_SESSION[products] = <body>
serialize($_POST[form_products]); <?php
} include("listing11.2.php");
echo "<p>am pus acest produs in ?>
sesiune</p>"; </body>
} </html>
?> --------
<form method="POST" action="<?php <html>
$_SERVER[PHP_SELF] ?>"> <head>
<P><strong>selectati un produs</strong><br> <title>preluare date si scriere pe orizontala
<select name="form_products[]" multiple din fisier care e deschis</title>
size=3> </head>
<option value="informatia 1">informatia <body>
1</option> <?php
<option value="informatia 2">informatia $filename = "test.txt";
2</option> $fp = fopen($filename, "r") or die("n-am
<option value="informatia 3">informatia deschis $filename");
3</option> while (!feof($fp)) {
<option value="informatia 4">informatia $chunk = fread($fp, 16);
4</option> echo "$chunk<br>";
<option value="alceva">altceva</option> }
</select> ?>
<P><input type="submit" value="pune </body>
obiectul intr-o variabila sesiune"></p> </html>
</form> -------
<p><a href="listing10.5.php">ma intorc la <html>
pagina de cautare</a></p> <head>
</body> <title>cautarea cu functia fseek()</title>
</html> </head>
-------- <body>
<?php <?php
session_start(); $filename = "test.txt";
?> $fp = fopen($filename, "r") or die("Couldn't
<html> open $filename");
<head> $fsize = filesize($filename);
<title>accesul variabilelor dintr o $halfway = (int)($fsize / 2);
sesiune</title> echo "Halfway point: $halfway <BR>\n";
</head> fseek($fp, $halfway);
<body> $chunk = fread($fp, ($fsize - $halfway));
<h1> continutul paginii</h1> echo $chunk;
<?php ?>
if (isset($_SESSION[products])) { </body>
echo "<strong>aveti </html>
produsele:</strong><ol>"; --------
foreach (unserialize($_SESSION[products]) <html>
as $p) { <head>
37
<title>mutarea datelor din fisier</title> <head>
</head> <title>includ si comenzile din alt
<body> fisier</title>
<?php </head>
$filename = "test.txt"; <body>
$fp = fopen($filename, "r") or die("nu pot <?php
deschide fisierul $filename"); include("listing11.4.php");
while (!feof($fp)) { ?>
$char = fgetc($fp); </body>
echo "$char<BR>"; </html>
} --------
?> <html>
</body> <head>
</html> <title>executia de variabile din alt
-------- fisier</title>
<html> </head>
<head> <body>
<title>deschid pentru adaugare in fisier</title> <?php
</head> $addResult = include("listing11.6.php");
<body> echo "acesta este rezultatul : $addResult";
<?php ?>
$filename = "test.txt"; </body>
echo "<p>scriu in fisier$filename ... </p>"; </html>
$fp = fopen($filename, "w") or die("nu pot sa l -------
deschid $filename"); <html>
fwrite($fp, "salutari ASA L AM CREAT\n"); <head>
fclose($fp); <title>operatii si informatii despre
echo "<p>am adaugat in fisierul: fisiere</title>
$filename ...</p>"; </head>
$fp = fopen($filename, "a") or die("nu pot sa l <body>
deschid pentru adaugare fisierul: $filename"); <?php
fputs($fp, "CE AM ADAUGAT\n"); $file = "test.txt";
fclose($fp); outputFileTestInfo($file);
?>
</body> function outputFileTestInfo($f) {
</html> if (!file_exists( $f)) {
------- echo "<p>$f does not exist</p>";
<html> return;
<head> }
<title>directorul curent are echo "<p>$f este ".(is_file($f)?"":"not ")."e
continutul:</title> fisier?</p>";
</head> echo "<p>$f este ".(is_dir($f)?"":"not ")."e
<body> director?</p>";
<?php echo "<p>$f este ".(is_readable($f)?"":"not
$dirname = "."; ")."poate fi citit</p>";
$dh = opendir($dirname) or die("NU POT echo "<p>$f este ".(is_writable($f)?"":"not
VEDEA CE E IN DIRECTORUL:"); ")."poate fi scris</p>";
38
------ </head>
<html> <body>
<head> <h1>caculul pentru ambele parti:</h1>
<title>deschid fisier pentru preluare
<h2>ordinea rezultatelor</h2>
date</title>
</head> <?php
<body>
<?php echo '<p>prelucrarea ordonarii la';
$filename = "test.txt"; echo date('H:i, jS F');
$fp = fopen($filename, "r") or die("am aflat echo '</p>';
continutul fisierului $filename");
while (!feof($fp)) {
echo '<p>ordinea este dupa cum urmeaza</p>';
$line
= $totalqty = 0;
$totalqty = $tireqty + $oilqty + $sparkqty;
echo 'articolele ordonate:: '.$totalqty.'<br />';
if( $totalqty == 0)
{
echo 'You did not order anything on the
previous page!<br />';
fgets($fp, 1024);
echo "$line<br>"; }
} else
?> {
if ( $tireqty>0 )
echo $tireqty.' ciocolata<br />';
if ( $oilqty>0 )
echo $oilqty.' bomboane<br />';
if ( $sparkqty>0 )
echo $sparkqty.' suc<br />';
}
</body>
</html> $totalamount = 0.00;
39
elseif($find == 'b') </tr>
echo '<p>clientul facea aluzie la tva</p>'; <tr>
elseif($find == 'c') <td colspan=2 align=center><input
echo '<p>clientul se refera la ..telefonie</p>'; type=submit value="trimite"></td>
elseif($find == 'd') </tr>
echo '<p>clientu spunea doa asa ..oral.</p>'; </table>
else </form>
echo '<p>nu stim cum am fost gasiti de acest
client</p>'; </body>
?> </html>
</body> ------sursa php care preia datele din html-----
</html> <?php
//sa se creeze un formular de comanda care sa
se trimita pe internet
ca si la problema anterioara dar sa se //si care sa calculeze totalul pentru niste
trimita o comanda sis a se vizulizeze produse cumparate de la magazin
preluind datele dintr-un program php $tireqty = $_POST['tireqty'];
-----sursa html---- $oilqty = $_POST['oilqty'];
<html> $sparkqty = $_POST['sparkqty'];
<head> $address = $_POST['address'];
<title>cautarea de informatii</title>
</head> $DOCUMENT_ROOT =
<body> $_SERVER['DOCUMENT_ROOT'];
<h1>bonul pentru ambele parti</h1> ?>
<h2>ordonarea formularului de comanda</h2> <html>
<head>
<form action="processorder.php" <title>formularul primit: - orinea rezultata la
method=post> trimiterea formularului</title>
<table border=0> </head>
<tr bgcolor=#cccccc> <body>
<td width=150>articolele</td> <h1>formularul primit:</h1>
<td width=15>cantitatea</td> <h2>orinea rezultata la trimiterea
formularului</h2>
</tr>
<?php
<tr>
$date = date('H:i, jS F');
<td>ciocolata</td>
<td align=left><input type="text"
name="tireqty" size=3 maxlength=3></td> echo '<p>ordinea rezultata la ';
</tr> echo $date;
<tr> echo '</p>';
<td>bomboane</td>
<td align=left><input type="text" echo '<p>ordinea este precum urmaza:</p>';
name="bomboaneqty" size=3
maxlength=3></td> $totalqty = 0;
</tr> $totalqty = $tireqty + $oilqty + $sparkqty;
<tr> echo 'articole ordonate:: '.$totalqty.'<br />';
<td>suc</td>
<td align=left><input type="text" if( $totalqty == 0)
name="sparkqty" size=3 maxlength=3></td> {
</tr> echo 'nu ati ales nimic in formularul de
<tr> introducere a datelor<br />';
<td>adresa expeditorului:</td> }
<td align=center><input type="text" else
name="address" size=40 maxlength=40></td> {
40
if ( $tireqty>0 ) ?>
echo $tireqty.' ciocolata<br />'; </body>
if ( $oilqty>0 ) </html>
echo $oilqty.' bomboane<br />'; -----SURSA PHP care preia datele calculate
if ( $sparkqty>0 ) din PHP-si le afiseaza----
echo $sparkqty.' suc<br />'; <?php
} //creati un formular care sa afiseze accesarea
unui fisier
$totalamount = 0.00; $DOCUMENT_ROOT =
$_SERVER['DOCUMENT_ROOT'];
?>
define('TIREPRICE', 100);
<html>
define('OILPRICE', 10);
<head>
define('SPARKPRICE', 4);
<title>date din formular - ordinea
clientilor</title>
$totalamount = $tireqty * TIREPRICE
</head>
+ $oilqty * OILPRICE
<body>
+ $sparkqty * SPARKPRICE;
<h1>date din formular</h1>
<h2>ordinea clientilor</h2>
$totalamount=number_format($totalamount, 2,
<?php
'.', ' ');
@ $fp =
echo '<p>totalul sumei de platit:'.
fopen("$DOCUMENT_ROOT/../orders/orders.
$totalamount.'</p>';
txt", 'rb');
echo '<p>Adresa la care se trimite '.
$address.'</p>';
if (!$fp)
{
$outputstring = $date."\t".$tireqty." ciocolata \
t".$oilqty." oil\t" echo '<p><strong>a ti intarziat.'
.$sparkqty." suc\t\$".$totalamount .'mai incercati.</strong></p>';
."\t". $address."\n"; exit;
}
41
$pictures = array('wiper_blade.jpg',
'p2.jpg', 'p1.jpg'); <?php
require('header.inc');
shuffle($pictures); ?>
?> <!-- page content -->
<html> <p>acesta e pagina</p>
<head> <p>am importat continutul altui fisier unul
<title>imagini </title> pt partea suparioara altul pentru partea
</head> inferioara</p>
<body> <?php
<center> require('footer.inc');
<h1>imagini </h1> ?>
<table width = 100%> -------
<tr> <?php
<?php //dandu-se trei numere sa se determine cele
// sa se afiseze niste fotografii si sa se mai mari(primele 2)
memoreze in php intr-un vector function ff ($x, $y)
for ( $i = 0; $i < 3; $i++ ) {
{ if (!isset($x)||!isset($y))
echo '<td align="center"><img src="'; return false;
echo $pictures[$i]; else if ($x>=$y)
echo '"width="100" height="100"></td>'; return $x;
} else
?> return $y;
</tr> }
</table>
</center> $a = 1; $b = 2.5; $c = 1.9;
</body> echo ff($a, $b).'<br />';
</html> echo ff($c, $a).'<br />';
echo ff($d, $a).'<br />';
<?php ?>
//sa se creeze o tabela in care datele --------
sa fie preluate dintr un vector de cuvinte <?php
function create_table($data) // sa se dea un exemplu simplu de apelare a
{ unui fisier
echo '<table border = 1>'; echo 'acesta e fisierul principal<br />';
reset($data); // realizarea tabelei lunct cu require( 'reusable.php' );
punct echo 'secventa de comenzi se sfarseste
$value = current($data); acum<br />';
while ($value) ?>
{ -------
echo "<tr><td>$value</td></tr>\n"; <?php
$value = next($data); //sa se scrie doua functii care afiseaza
} invers un text tastat
echo '</table>'; // o functie sa fie recursiva alta iterativa
} function ff($str)
{
$my_array = array('prima','a doua',' a treia'); if (strlen($str)>0)
create_table($my_array); ff(substr($str, 1));
echo substr($str, 0, 1);
?> return;
}
42
?>
function fff($str) --------
{
for ($i=1; $i<=strlen($str); $i++)
{
echo substr($str, -$i, 1);
}
return;
}
ff('salut');
fff(' vivat');
?>
----------
<?php
// sa se puna in evidenta o functie care
accepta un numar variabil de prametrii
// si care returneaza parametrii functiei
function fff()
{
echo "numar de parametrii ai functiei:";
echo func_num_args();
fff(1,2,3);
fff("salut", 47.3);
APLICAŢII MYSQL
Sa se treca datele din formular in program php
Pentru a functiona trebuie create baza de date TESTDB si tabela .
TESTTABLE.Crearea bazei de date se face in Mysql-Front cu etapele prezentate in
introducere iar crearea tabelei se face astfel :
-ne pozitionam pe baza de date ca in figura urmatoare (dupa ce in prealabil am intrat
in mysql-front si ne-am conectat) :
43
in final structura trebuie sa fie astfel:
id testField
Int String
(11) (75)
not_null primary_key auto_increment
Crearea unei table se mai face si cu
programul urmator:
<?php
$conn = mysql_connect("localhost",
"root");
mysql_select_db("testDB",$conn);
$sql = "CREATE TABLE testTable (id int not null primary key auto_increment, testField varchar
(75))";
$result = mysql_query($sql, $conn);
echo $result;
?>
-sursa html este-------
<HTML>
<HEAD>
<TITLE>trecerea datelor din formular in program php</TITLE>
</HEAD>
<BODY>
<FORM ACTION="insert.php" METHOD=POST>
<P>da un text:<br>
<input type=text name="testField" size=30>
<p><input type=submit name="submit" value="inserare inregistrare"></p>
</FORM>
</BODY>
</HTML>
------apare-----
mysql_select_db("testDB",$conn);
$sql = "INSERT INTO testTable values ('', 'o alta valoare value')";
44
?>
Vizualizarea se face in mysql-front dar dupa ce face click drepta pe suprafata de lucru si
se alege REFRESH(sau tasta f5) :
function doDB() {
45
global $conn;
$conn = mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("testDB",$conn) or die(mysql_error());
} function emailChecker($email) {
global $conn, $check_result;
$display_block = "
<form method=POST action=\"$_SERVER[PHP_SELF]\">
<p><strong>dati adresa de email</strong><br>
<input type=text name=\"email\" size=40 maxlength=150>
<p><strong>Action:</strong><br>
<input type=radio name=\"action\" value=\"sub\" checked> subscribe
<input type=radio name=\"action\" value=\"unsub\"> unsubscribe
<input type=\"hidden\" name=\"op\" value=\"ds\">
<p><input type=submit name=\"submit\" value=\"Submit Form\"></p>
</form>";
46
<?php echo "$display_block"; ?>
</BODY>
</HTML>
Realizarea unui meniu prin care ma conectez la mai multe programe PHP ca mai jos :
47
id master_id date_added date_modified note
int int datetime datetime
(11) (11) (19) (19)
not_null primary_key auto_increment not_null
Daca se apasa pe adaugare in formularul initial trebuie sa apara o fereastra ca mai jos :
<P><strong>adresa</strong><br>
<input type=\"text\" name=\"address\" size=30>
<P><strong>oras/tara/codul</strong><br>
<input type=\"text\" name=\"city\" size=30 maxlength=50>
<input type=\"text\" name=\"state\" size=5 maxlength=2>
<input type=\"text\" name=\"zipcode\" size=10 maxlength=10>
<P><strong>tipul adresei</strong><br>
<input type=\"radio\" name=\"add_type\" value=\"acasa\" checked> acasa
<input type=\"radio\" name=\"add_type\" value=\"mobil\"> mobil
<input type=\"radio\" name=\"add_type\" value=\"altele\"> altele
<P><strong>numarul telefonului</strong><br>
<input type=\"text\" name=\"tel_number\" size=30 maxlength=25>
<input type=\"radio\" name=\"tel_type\" value=\"acasa\" checked> acasa
<input type=\"radio\" name=\"tel_type\" value=\"mobil\"> mobil
<input type=\"radio\" name=\"tel_type\" value=\"altele\"> altele
<P><strong>numarul faxului</strong><br>
<input type=\"text\" name=\"fax_number\" size=30 maxlength=25>
<input type=\"radio\" name=\"fax_type\" value=\"acasa\" checked> acasa
<input type=\"radio\" name=\"fax_type\" value=\"mobil\"> mobil
<input type=\"radio\" name=\"fax_type\" value=\"altele\"> altele
<P><strong>adresa de email</strong><br>
<input type=\"text\" name=\"email\" size=30 maxlength=150>
<input type=\"radio\" name=\"email_type\" value=\"acasa\" checked> acasa
<input type=\"radio\" name=\"email_type\" value=\"mobil\"> mobil
<input type=\"radio\" name=\"email_type\" value=\"altele\"> altele
48
<textarea name=\"note\" cols=35 rows=5 wrap=virtual></textarea>
<input type=\"hidden\" name=\"op\" value=\"add\">
if ($_POST[tel_number]) {
$add_tel = "insert into telephone values ('', $master_id,
now(), now(), '$_POST[tel_number]', '$_POST[tel_type]')";
mysql_query($add_tel) or die(mysql_error());
} if ($_POST[fax_number]) {
$add_fax = "insert into fax values ('', $master_id, now(), now(),
'$_POST[fax_number]', '$_POST[fax_type]')";
mysql_query($add_fax) or die(mysql_error());
} if ($_POST[email]) {
$add_email = "insert into email values ('', $master_id, now(), now(), '$_POST[email]',
'$_POST[email_type]')";
mysql_query($add_email) or die(mysql_error());
} if ($_POST[note]) {
$add_note = "insert into personal_notes values ('', $master_id, now(), now(),
'$_POST[note]')";
mysql_query($add_note) or die(mysql_error());
} $display_block = "<h1>am adaugat datele</h1>
<P>vreti sa adaugati alte date
<a href=\"addentry.php\">adaugati altele</a>?</p>";
}
?>
<HTML>
<HEAD>
<TITLE>introduceti datele</TITLE>
</HEAD>
<BODY>
<? print $display_block; ?>
</BODY>
</HTML>
Pentru a realiza un formular de stergere a datelor( cand aleg din meniul principal
stergere date ) ca mai jos :
sursa este:
49
<?php
if ($_POST[op] != "delete") {
$display_block = "<h1>selectati inregistrarea</h1>";
$get_list = "select id, concat_ws(', ', l_name, f_name) as display_name from master_name order
by l_name, f_name";
$get_list_res = mysql_query($get_list) or die(mysql_error());
if (mysql_num_rows($get_list_res) < 1) {
$display_block .= "<p><em>nu a ti selectat o inregistrare</em></p>";
} else {
$display_block .= "
<form method=\"post\" action=\"$_SERVER[PHP_SELF]\">
<P><strong>selectati persoana ce se va sterge</strong><br>
<select name=\"sel_id\">
<option value=\"\">-- prima selectata --</option>";
while ($recs = mysql_fetch_array($get_list_res)) {
$id = $recs['id'];
$display_name = stripslashes($recs['display_name']);
$display_block .= "<option value=\"$id\">
$display_name</option>";
}
$display_block .= "
</select>
<input type=\"hidden\" name=\"op\" value=\"delete\">
<p><input type=\"submit\" name=\"submit\" value=\"stergeti ce a ti selectat\"></p>
</FORM>";
}
50
</BODY>
</HTML>
Pe Internet avem de a a face permanent cu forumuri de discutii.Dorim sa realizam o aplicatie care sa
gestioneze acest fapt.Pentru asta dorim sa realizam un formular ca mai jos :
51
Tabela forum_topics :
topic_id topic_title topic_create_time topic_owner
int string datetime string
(3) (150) (19) (150)
not_null primary_key auto_increment
Tabela forum_posts :
post_id topic_id post_text post_create_time post_owner
int int blob datetime string
(3) (11) (65535) (19) (150)
not_null primary_key not_null blob
auto_increment
Ca sa ne apara lista de discutii si sa ma inscriu la ea ca mai jos :
am sursa PHP :
<?php
$conn = mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("testDB",$conn) or die(mysql_error());
if ($_POST[op] != "addpost") {
if (!$_GET[post_id]) {
header("Location: topiclist.php");
exit;
}
$verify = "select ft.topic_id, ft.topic_title from forum_posts as fp left join forum_topics as ft on
fp.topic_id = ft.topic_id where fp.post_id = $_GET[post_id]";
$verify_res = mysql_query($verify, $conn) or die(mysql_error());
if (mysql_num_rows($verify_res) < 1) {
header("Location: topiclist.php");
exit;
} else {
$topic_id = mysql_result($verify_res,0,'topic_id');
$topic_title = stripslashes(mysql_result($verify_res, 0,'topic_title'));
print "
<html>
<head>
<title>intorc mesajul catre:$topic_title</title>
</head>
<body>
<h1>intorc mesajul catre:$topic_title</h1>
<form method=post action=\"$_SERVER[PHP_SELF]\">
<p><strong>adresa de email a autorului : </strong><br>
<input type=\"text\" name=\"post_owner\" size=40 maxlength=150>
<P><strong>textul discutiei</strong><br>
<textarea name=\"post_text\" rows=8 cols=40 wrap=virtual></textarea>
</form>
52
</body>
</html>";
}
} else if ($_POST[op] == "addpost") {
if ((!$_POST[topic_id]) || (!$_POST[post_text]) || (!$_POST[post_owner])) {
header("Location: topiclist.php");
exit;
}
$add_post = "insert into forum_posts values ('', '$_POST[topic_id]', '$_POST[post_text]', now(),
'$_POST[post_owner]')";
mysql_query($add_post,$conn) or die(mysql_error());
header("Location: showtopic.php?topic_id=$topic_id");
exit;
}
?>
Conectarea la o discutie ca mai jos :
53
<head>
<title>CONTINUTUL discutiei:</title>
</head>
<body>
<h1>CONTINUTUL discutiei:</h1>
<?php print $display_block; ?>
<P>Would you like to <a href="addtopic.html">add a topic</a>?</p>
</body>
</html>
Preluarea datelor din tabele si punerea lor direct pe o pagina web o sa se realizeze cu programul de
mai jos.Aplicatia e utila cand implementez un magazin de comert electronic si vreau sa se actualizeze
automat pagina web ;
Tabela store_item_size :
item_id item_size
int string
(10)
54
not_null (25)
item_id item_size
1 One size fits all
2 One size fits all
3 One size fits all
4 S
4 M
4 L
4 XL
Trebuia de asemenea sa am introduse date in ele
$display_block .= "<li><a
href=\"showitem.php?item_id=$item_id\">$item_title</a></strong> (\$$item_price)";
}
$display_block .= "</ul>";
}
}
}
}
?>
<HTML>
<HEAD>
<TITLE>o categorie de produse</TITLE>
</HEAD>
55
<BODY>
<? print $display_block; ?>
</BODY>
</HTML>
Exportul datelor se face ca mai jos in Mysql_front(click dreapta pe o linie selectata a tabelei) :
sursa este :
<?php
define("ADAY", (60*60*24));
if (!checkdate($_POST['month'], 1, $_POST['year'])) {
$nowArray = getdate();
$month = $nowArray['mon'];
$year = $nowArray['year'];
} else {
$month = $_POST['month'];
$year = $_POST['year'];
}
$start = mktime (12, 0, 0, $month, 1, $year);
$firstDayArray = getdate($start);
?>
<html>
<head>
<title><?php echo "Calendar:".$firstDayArray['month']." ".$firstDayArray['year'] ?></title>
<head>
<body>
<form method="post" action="<?php echo "$_SERVER[PHP_SELF]"; ?>">
<select name="month">
<?php
$months = Array("ianuarie", "Februarie", "martie", "Aprilie", "Mai", "iunie", "iulie", "August",
"Septembrie", "Octombrie", "Noiembrie", "Decembrie");
for ($x=1; $x <= count($months); $x++) {
echo"<option value=\"$x\"";
if ($x == $month) {
56
echo " SELECTED";
}
echo ">".$months[$x-1]."";
}
?>
</select>
<select name="year">
<?php
for ($x=1980; $x<=2010; $x++) {
echo "<option";
if ($x == $year) {
echo " SELECTED";
}
echo ">$x";
}
?>
</select>
<input type="submit" value="afisaza">
</form>
<br>
<?php
$days = Array("duminica", "luni", "marti", "miercuri", "joi", "vineri", "sambata");
echo "<TABLE BORDER=1 CELLPADDING=5><tr>\n";
foreach ($days as $day) {
echo "<TD BGCOLOR=\"#CCCCCC\" ALIGN=CENTER><strong>$day</strong></td>\n";
}
for ($count=0; $count < (6*7); $count++) {
$dayArray = getdate($start);
if (($count % 7) == 0) {
if ($dayArray['mon'] != $month) {
break;
} else {
echo "</tr><tr>\n";
}
}
if ($count < $firstDayArray['wday'] || $dayArray['mon'] != $month) {
echo "<td> </td>\n";
} else {
echo "<td>".$dayArray['mday']." </td>\n";
$start += ADAY;
}
}
echo "</tr></table>";
?>
</body>
</html>
pentru a urmarii activitatea serverului Apache pe Web e nwcwsar crearea tabelei cu structura
urmatoare :
id page_title user_agent date_accessed
int string blob date
(3) (50) (65535) (10)
not_null primary_key auto_increment blob
Iar inregistrarile din tabela o sa contina :
id page_title user_agent date_accessed
exepmlu de Mozilla/4.0 (compatible; MSIE 5.01; Windows
1 acesare 98)
exemplu de
acesare este Mozilla/4.0 (compatible; MSIE 5.01; Windows
2 pagina 98)
57
exemplu de
acesare este Mozilla/4.0 (compatible; MSIE 5.01; Windows
3 pagina A 98)
Vizualizarea accesului la server poate fi vizualizat daca se va executa urmatorul program cu interfata
de mai jos :
58
<BODY>
<h1>rezultatul acesarilor</h1>
<P><strong>total de indivizi care au deschis pagini:</strong> <? echo "$all_count"; ?></p>
<P><strong>au folosit utilitarul de internet:</strong>
<?php print "$user_agent_block"; ?>
<P><strong>pagini individulale:</strong>
<?php print "$page_title_block"; ?>
</BODY>
</HTML>
Localizarea aplicatiilor in asa fel incat sa se prezinte siteul in limba tarii care acceseaza siteul se
poate face cu niste programme ca mai jos :
case "de":
define("WELCOME_TXT","salutari pe germana");
define("CHOOSE_TXT","limba este germana");
break;
case "ja":
define("WELCOME_TXT","salutari pe japoneza");
define("CHOOSE_TXT","limba este japoneza");
break;
default:
define("WELCOME_TXT","bine ai venit");
define("CHOOSE_TXT","alege limba");
break;
}
}
?>
si…
define_lang.php
59
<?
if ($_SESSION[lang] == "") {
$_SESSION[lang] = "en";
$currLang = "en";
} else {
$currLang = $_GET[lang];
$_SESSION[lang] = $currLang;
}
switch($currLang) {
case "en":
define("CHARSET","ISO-8859-1");
define("LANGCODE", "en");
break;
case "de":
define("CHARSET","ISO-8859-1");
define("LANGCODE", "de");
break;
case "ja":
define("CHARSET","UTF-8");
define("LANGCODE", "ja");
break;
default:
define("CHARSET","ISO-8859-1");
define("LANGCODE", "en");
break;
}
header("Content-type: text/html;charset=".CHARSET);
header("Content-language: ".LANGCODE);
?>
Consideram ca e util pentru intelegerea aplicatiilor si cum se rezolva lucrurile cu SQL*PLUS
care functioneaza sub serverul ORACLE 9I.De aceea in urmatorul capitol sa sa prezentam acest limbaj
SQL*PLUS.
SQL*PLUS-oracle 9i
este limbajul utilizat pentru a accesa o bază de date relaţională;
poate fi utilizat atunci când accesul la baza de date este necesar, de fiecare instrument de gestiune a
bazelor de date (Access, Oracle, SQL-Server, MySQL,...);
este un limbaj simplu, ne-procedural, cu comenzi intuitive în limba engleză;
este un limbaj standard pentru bazele de date.
Vorbind despre SQL, în multe cărţi se spune SQL = Structured Querry Language. Dar SQL nu este un limbaj
structurat în sensul structurării limbajelor de programare. De fapt, curând după apariţia lucrării lui Codd, la IBM s-
a realizat un sistem prototip pentru baze de date relaţionale. S-a numit System R şi se baza pe un set de comenzi
către baza de date, set de comenzi numit SEQUEL (Structured English QUEry Language). Cu alte cuvinte un
subset de cereri către baza de date formulate strcturat în engleză. A fost punctul de plecare pentru SQL, care a fost
standardizat ca limbaj pentru bazele de date independent de sistemul de gestiune şi de platforma de calcul. De
aceea s-a şi scurtat numele, pentru a nu mai apare confuzii cu System R şi cu vechiul limbaj SEQUEL.
O primă standardizare a SQL s-a petrecut încă din 1986, când au apărut specificaţiile ANSI (American National
Standards Institute), extinse în standardizarea ISO din 1989, apoi în 1992 şi încă mai recent, în 1999.
60
Simplitatea limbajului se reflectă în numărul mic de comenzi (zece) şi în faptul că nici dimensiunea bazei de date,
numărul de înregistrări, sau numărul de coloane, nici tipul datelor nu influenţează forma comenzilor SQL. Ca
urmare, toate sistemele actuale de gestiune de baze de date acceptă comenzi în limbajul SQL.
In sistemele Oracle de baze de date, pentru scrierea aplicaţiilor şi pentru manipularea datelor în afara bazei de date,
se foloseşte un limbaj procedural numit PL/SQL, o extensie procedurală a limbajului SQL, de fapt principalul
limbaj (procedural) pentru realizarea aplicaţiilor în sistemele Oracle . In particular, SQL-Plus este un produs
Oracle în care pot fi utilizate limbajele SQL şi PL/SQL.
Vom vedea că, în sistemul MySQL (de fapt în pachetul PHP, MySQL, Apache Web server, pe care-l vom studia
mai aprofundat) avem funcţii şi rutine speciale destinate scrierii unor programe cu comenzi SQL, adică înglobării
SQL într-un secvenţă procedurală structurată.
INTRODUCERE IN SQL
Este vorba de o introducere în limbajul de interogare utilizat pentru a accesa o bază de date.
La scurt timp după ce E. F. Codd a descris structura bazei de date relaţionale, în colectivul de la IBM s-a realizat
un prototip de sistem de management al bazelor de date relaţionale, numit System R, împreună cu un limbaj
dedicat (pentru a crea şi a opera cu bazele de date relaţionale), numit SEQUEL (Structured English QUEry
Language). Expresiile din SEQUEL seamănă cu propoziţiile din limba engleză, fiind desigur mai structurate. In
paralel firma IBM a scos pe piaţă produse cu baze de date relaţionale, bazate pe System R. Dar cu un limbaj puţin
diferit de SEQUEL. Astfel că l-a botezat SQL, eliminând vocalele din Sequel şi trecând la pronunţia "es-qu-el".
Chiar dacă sunt autori care consideră că SQL provine de la Structured Query Language, asta nu-i adevărat.Iar SQL
nu are nimic de a face cu limbajele de programare structurată, precum Pascal sau C++.
In scurt timp SQL devine un standard industrial pentru bazele de date relaţionale. Institutul National American
de Standarde (ANSI) l-a adoptat ca limbaj standard pentru gestiunea bazelor de date (RDBMS), încă în anul 1986.
Organizaţia Internaţională de Standarde (ISO) a adoptat deasemenea SQL ca limbaj standard pentru RDBMS.
Toate RDBMS-urile suportă unele forme de SQL şi toţi vânzătorii de astfel de sisteme s-au aliniat sau
intenţionează să se alinieze la standardele ANSI. Asta nu înseamnă că nu mai apar diferenţe. Chiar şi la produsele
aceleaşi firme, Microsoft Access şi SQL Server, pot fi semnalate diferenţe în implementarea limbajului SQL.
In concluzie: Un sistem de management al bazei de date necesită un limbaj de interogare pentru a permite
utilizatorului să acceseze datele. SQL (iniţial numit SEQUEL, ca limbaj de interogare structurată) este limbajul
standardizat ANSI şi ISO, utilizat de majoritatea sistemelor ce manevrează baze de date relaţionale.
SQL, ca şi majoritatea limbajelor de programare, foloseşte cuvinte din limba engleză. In mod special
cuvintele select, insert, delete ca elemente ale setului de comenzi.
SQL este un limbaj neprocedural: specifică care sunt informaţiile dorite, nu cum se obţin acestea. Cu alte
cuvinte, SQL nu cere să fie specificată metoda de acces la date.
Execuţia comenzilor SQL asupra înregistrărilor nu se poate face decât secvenţial, asupra câte unei
singure înregistrări. Setul de înregistrări fiind văzut ca set de linii ale unui tabel.
SQL poate fi folosit de un şir de utilizatori, incluzând administratorul bazei de date, programatorii de
aplicaţii, personalul de management şi multe alte tipuri de utilizatori.
SQL include comenzi pentru o varietate de sarcini, incluzând:
o selecţia unor date
o inserarea, extragerea şi ştergerea rândurilor dintr-un tabel
o crearea, modificarea şi ştergerea obiectelor de tip bază de date
o controlul accesului la baza de date şi la obiectele de tip bază de date
o verificarea - garantarea consistenţei bazei de date
61
La început, sistemele de management a bazelor de date au utilizat un limbaj separat pentru fiecare categorie de
sarcini în parte. SQL le-a unificat pe toate acestea într-un singur limbaj.
Primul pentru crearea structurii de bază de date, al doilea, după ce structura există, pentru a adăuga date în tabele şi
pentru a le manipula. A treia componentă oferă posibilitatea de a proteja (securiza) datele.
Sintaxa comenzilor diferă de la un grup la altul. Ne limităm acum doar la câte un exemplu:
Când scriem comenzi SQL, este important să ne reamintim câteva reguli simple pentru construirea unor declaraţii
valide care sunt şi uşor de citit şi de editat:
Comenzile SQL pot fi scrise pe una sau mai multe linii.
Clauzele sunt uzual plasate pe linii separate.
Poate fi folosită tabelarea.
Cuvintele de comandă nu pot fi separate pe mai multe linii.
Comenzile SQL pot fi scrise fie cu majuscule fie cu minuscule (nu sunt 'case sensitive').
O comandă SQL este introdusă la prompterul SQL, iar liniile subsecvenţelor sunt numerotate.
O singură declaraţie poate fi considerată curentă, cât timp ea este într-un buffer şi poate fi rulată într-un
anumit număr de moduri :
o plasând un punct şi virgulă(;) la sfârşitul ultimei clauze.
o plasând un punct şi virgulă urmat de semnul / (slash) pe ultima linie în buffer.
o plasând un slash (/) la prompterul SQL.
o scriind comanda SQL RUN la prompterul SQL.
62
Comenzile pot fi deci scrise în oricare din următoarele forme:
SELECT * FROM ANGAJAT;
SELECT
*
FROM
ANGAJAT
;
SELECT *
FROM ANGAJAT;
Declaraţia SELECT regăseşte informaţia din baza de date, putând îngloba şi unul sau mai mulţi operatori din
algebra relaţională.
1. O clauză SELECT, care listează coloanele pentru afişare astfel încât este esenţiala o Proiecţie.
2. O clauză FROM care specifică tabela implicată.
Pentru a lista toate numerele departamentelor, numele angajaţilor şi numărul şefilor (managerilor) introduceţi în
tabela ANGAJAT următoarele:
Este posibil să selectăm toate coloanele din tabelă prin specificarea unui asterix ( * ) după cuvântul SELECT .
SELECT *
FROM ANGAJAT;
63
7566 JONES MANAGER 7839 31-OCT-83 2, 975. 00 20
7654 MARTIN VANZATOR 7698 05-DEC-83 1, 250. 00 1.400. 00 30
7698 VIRGIL MANAGER 7839 11-JUN-84 2, 850. 00 30
7782 COSTEL MANAGER 7839 14-MAY-84 2, 450. 00 10
7788 STEFAN ANALYST 7566 05-MAR-84 3, 000. 00 20
7839 CRISTIAN PRESEDINTE 09-JUL-84 5, 000. 00 10
7844 TICA VANZATOR 7698 04-JUN-84 1, 500. 00 . 00 30
7876 ADAMS FUNCTIONAR 7788 04-JUN-84 1, 100. 00 20
7900 JAMES FUNCTIONAR 7698 23-JUL-84 950. 00 30
7902 FLORIN ANALYST 7566 05-DEC-83 3, 000. 00 20
Toate aceste opţiuni ajută utilizatorul să ceară date şi să le manipuleze în funcţie de scopurile interogării; de
exemplu, execuţia calculelor, legarea coloanelor impreună, sau afişarea şirurilor de litere din text.
Expresii aritmetice
O expresie este o combinaţie de una sau mai multe valori, operatori şi funcţii, care se evaluează la o valoare.
Expresiile aritmetice pot conţine nume de coloane, valori numerice constante şi operatori aritmetici:
Operatori Descriere
--------- ---------
+ adunare
- scădere
* înmulţire
/ împărţire
Daca expresia aritmetică conţine mai mult decât un operator, atunci priorităţile sunt *, /, la început, apoi +, - (de la
stânga la dreapta pentru operatorii cu aceeaşi prioritate).
In următorul exemplu, înmulţirea (250*12) este evaluată prima; apoi valoarea salariului este adunată la rezultatul
multiplicării(3000). Astfel pentru rândul lui ION avem :800+3000=3800.
Parantezele pot fi utilizate pentru specificarea ordinii de execuţie a operatorilor, dacă, de exemplu, adunarea e
dorită înainte de înmulţire:
Alias-uri de coloană
64
Când se afişează rezultatul unei interogări, în mod normal se utilizează numele coloanelor selectate ca titlu. In
multe cazuri acest nume poate fi criptic sau fără înţeles.
Specificaţi aliasul după coloană, în lista selectată. Din oficiu, titlurile de tip alias vor fi scrise forţat cu litere mari şi
nu pot conţine spaţii (blankuri), numai dacă aliasul este inclus între ghilimele(" ").
Pentru a afişa titlul de coloană ANNSAL. pentru salariul anual, însemnând SAL*12, utilizaţi un alias de coloană:
Odată definit, un alias poate fi utilizat de alte comenzi, precum cele din SQL-Plus.
Notă:
Intr-o declaraţie SQL, un alias de coloană poate fi utilizat numai în clauza SELECT.
Operatorul de concatenare
Operatorul de concatenare (||) permite coloanelor să fie legate cu alte coloane, iar expresiilor aritmetice sau
valorilor constante să creeze o expresie de caractere.
Coloanele din cealalta parte a operatorului sunt combinate pentru a obtine o singura coloana.
ANGAJATCUPLAT
-------------------------------------------------------
7369ION
7499ALLEN
7521GORE
7566JONES
7654MARTIN
7698VIRGIL
7782COSTEL
7788STEFAN
7839CRISTIAN
7844TICA
7876ADAMS
7900JAMES
7902FLORIN
7934MIHAI
Literali
Un literal este orice caracter, expresie, numar inclus în lista lui SELECT care nu este un nume de coloana sau un
alias de coloana.
Un literal în lista lui SELECT este reprezentat de fiecare rând returnat la iesire. Sirurile de literali dintr-un text cu
un format oarecare pot fi incluse in rezultatul interogarii şi sunt tratate ca o coloana lista selectata.
65
Literalii de tip dată calendaristica şi caracter pot fi închisi între ghilimele simple(');literlalii de tip numar nu au
nevoie de ghilimele simple(').
Urmatoarea declaraţie conţine literali selectaţi prin concatenare şi printr-un alias de coloana:
Dacă unui rând ii lipseste o valoare pentru o anumita coloana, despre acea valoare se spune ca este nula.
O valoare nula este o valoare care este sau incorecta, sau necunoscuta, sau inaplicabila. O valoare nula nu este la
fel ca 'zero'. Zero este un numar. Valoarea nula ocupa un octet în reprezentarea interna.
Dacă orice valoare de coloana într-o expresie este nula atunci rezultatul este nul. In urmatoarea declaraţie numai
Vanzator are un rezultat al salariului:
NUME ANNUAL_SAL
--------- ----------
ION
ALLEN 19500
GORE 15500
JONES
MARTIN 16400
VIRGIL
COSTEL
STEFAN
CRISTIAN
TICA 18000
ADAMS
JAMES
FLORIN
MIHAI
66
Dacă dorim să obtinem un rezultat pentru toţi angajaţii, este necesar sa convertim valoarea nula la un numar . Noi
folosim funcţia NVL pentru a converti o valoare nula la o valoare nenula.
Dacă nu se indică altfel, SQL*Plus afişează rezultatul unei interogări fără eliminarea intrărilor duplicate .
SELECT DEPTNO
FROM ANGAJAT;
DEPTNO
------
20
30
30
20
30
30
10
20
10
30
20
30
20
10
Clauza DISTINCT
Pentru eliminarea valorilor duplicate din rezultat, includeţi restricţia DISTINCT în comanda SELECT.
DEPTNO
------
10
20
30
Coloane multiple pot fi specificate după restricţia DISTINCT şi restricţia DISTINCt afectează toate coloanele
selectate.
DEPTNO MESERIA
------ ---------
67
10 FUNCTIONAR
10 MANAGER
10 PRESEDINTE
20 ANALYST
20 FUNCTIONAR
20 MANAGER
30 FUNCTIONAR
30 MANAGER
30 VANZATOR
De notat că restricţia DISTINCT poate să fie referită numai o singură dată şi trebuie să urmeze imediat după
cuvântul de comandă SELECT.
Clauza ORDER BY
In mod normal ordinea rândurilor întoarse în rezultatul unei cereri este nedefinită. Clauza ORDER BY poate fi
utilizată pentru a sorta rândurile.
Dacă o folosim, clauza ORDEY BY trebuie să fie întotdeauna ultima în declaraţia SELECT.
Pentru a inversa această ordine, cuvântul de comandă DESC este specificat după numele coloanei în clauza
ORDER BY.
68
Pentru a inversa ordinea coloanei DATAANG, deci datele cele mai târzii să fie afişate primele, introduceţi:
Este posibil să se ordoneze după mai multe coloane. Limita este numarul de coloane din tabela. In clauza ORDER
BY se specifica coloanele pentru ordonat separate prin virgula. Daca una sau toate coloanele trebuie să fie
inversate specificaţi DESC după fiecare coloana.
Pentru a ordona după doua coloane şi afişa în ordinea inversa a salariului, introduceţi:
In Oracle7, valorile nule sunt afişate ultimele pentru secventele ascendente si sunt raportate primele cind rindurile
sunt sortate în ordine descendenta.
69
Atenţie:
Clauza ORDER BY este utilizată într-o interogare cind se doreste să se afişeze rindurile într-o ordine specifica .
Fara clauza ORDER BY rândurile sunt returnate într-o ordine convenita de ORACLE şi va trebui să ne bazam pe
el- ordinea determinată fiind consistenta de la cerere la cerere. De notat ca ordinea de afişare a rindurilor nu
influenteaza ordinea interna a rindurilor asa cum sunt stocate în tabela.
Clauza WHERE
SELECT coloane
FROM tabela
WHERE anumite condiţii sunt întâlnite
Clauza WHERE poate compara valori în coloana, valori literale, expresii aritmetice sau funcţii.
1. Un nume de coloana
2. Un operator de comparaţie
3. Un nume de coloana, constanta sau lista de valori.
Operatorii de comparaţie sunt utilizaţi în clauza WHERE şi pot fi impartiti in doua categorii: logici şi SQL.
Operatorii logici
Operator Semnificaţie
-------- ------------
= egal cu
> mai mare decit
>= mai mare sau egal
< mai mic decit
<= mai mic sau egal
Coloanele din ORACLE pot avea urmatoarele tipuri:caracter, numar sau data calendaristica.
Sirurile de caractere şi datele calendaristice din clauza WHERE trebuie sa fie închise în ghilimele simple(').
Sirurile de caractere trebuie să se supra- puna cu valoarea coloanei daca nu, trebuie modificate de o funcţie.
Utilizati "Funcţii pe Caractere" din capitolul 4.
70
ADAMS 7876 FUNCTIONAR 20
JAMES 7900 FUNCTIONAR 30
MIHAI 7934 FUNCTIONAR 10
Pentru a găsi toate numele de departamente cu numerele de departament mai mare ca 20, introduceţi:
DNAME DEPTNO
---------- ------
SALES 30
OPERATIONS 40
Puteţi compara o coloana cu o alta coloana în acelaşi rând, la fel ca şi cu o valoare constanta.
De exemplu, presupunem ca dorim să obtinem acei angajaţi al caror comision estĺ mai mare decat salariul lor:
Operatori SQL
Operator Semnificaţie
-------- ------------
BETWEEN. . AND. . . între doua valori(inclusiv)
IN(list) compara cu o lista de valori
LIKE compara cu un model de tip caracter
IS NULL estĺ o valoare nula
Operatorul BETWEEN
Realizeaza teste pentru valori între, si inclusiv, o valoare minima şi o valoare maxima.
Presupunind ca dorim să vedem angajaţii ai caror salariu este între 1000 şi 2000:
NUME SAL
------- ----------
ALLEN 1, 600. 00
GORE 1, 250. 00
71
MARTIN 1, 250. 00
TICA 1, 500. 00
ADAMS 1, 100. 00
MIHAI 1, 300. 00
De notat ca valorile specificate sunt inclusive şi ca limita minima trebuie specificată prima.
Operatorul IN
Presupunem ca dorim să gasim angajaţii care au unul din cele trei numere de marca(CODSEF):
Daca, caracterele sau datele calendaristice sunt utilizate, ele trebuie introduse între ghilimele(' ').
Operatorul LIKE
Uneori nu se cunosc valorile exacte pe care le cautam. Utilizând operatorul LIKE este posibil să selectam rândurile
care se potrivesc cu un model specificat de caractere. Operatia de petter-matching a caracterelor poate fi asemanată
cu o cautare 'wild-card'. Doi simboli se pot utiliza la construirea şirului de cautare.
Simbol Reprezentare
------ ------------
% orice secventa de zero sau mai multe caractere
- un singur caracter oarecare
Pentru a lista toţi angajaţii al caror nume începe cu un S, introduceţi:
SELECT NUME
FROM ANGAJAT
WHERE NUME LIKE 'S%';
NUME
--------
ION
STEFAN
Caracterul '_' poate fi utilizat pentru cautarea unui anumit numar de carac- tere.
De exemplu pentru a lista toţi angajaţii care au un nume exact de patru caractere lungime:
SELECT NUME
FROM ANGAJAT
WHERE NUME LIKE '____';
NUME
-----
GORE
CRISTIAN
FLORIN
Semnele '%' şi '_'pot fi utilizate în orice combinaţie de caractere.
72
Operatorul IS NULL
Operatorul IS NULL face teste specifice pentru valorile care sunt NULL.
NUME CODSEF
------ ----
CRISTIAN
Negarea expresiilor
Operator Descriere
--------- ----------
!= diferit de(VAX, UNIX, PC)
^= diferit de(IBM)
<> diferit de(toate o/s)
NOT NUMECOL= diferit de
NOT NUMECOL> mai mic sau egal
Operatori SQL
Operator Descriere
-------- ---------
NOT BETWEEN nu se afla între doua valori date
NOT IN nu se afla într-o lista dată de valori
NOT LIKE diferit de şirul
IS NOT NULL nu este o valoare nula
Pentru a găsi angajaţii ai caror salariu nu este într-un interval, introdu- ceţi:
NUME SAL
--------- --------
ION 800. 00
JONES 2, 975. 00
VIRGIL 2, 850. 00
COSTEL 2, 450. 00
STEFAN 3, 000. 00
CRISTIAN 5, 000. 00
JAMES 950. 00
FLORIN 3, 000. 00
NUME MESERIA
-------- --------
ION FUNCTIONAR
ALLEN VANZATOR
GORE VANZATOR
MARTIN VANZATOR
STEFAN ANALYST
CRISTIAN PRESEDINTE
TICA VANZATOR
ADAMS FUNCTIONAR
73
JAMES FUNCTIONAR
FLORIN ANALYST
MIHAI FUNCTIONAR
NUME CODSEF
------- -----
ION 7902
ALLEN 7698
GORE 7698
JONES 7839
MARTIN 7698
VIRGIL 7839
COSTEL 7839
STEFAN 7566
TICA 7698
ADAMS 7788
JAMES 7698
FLORIN 7566
MIHAI 7782
Nota:
Daca o valoare NULL este utilizată într-o comparaţie, atunci operatorul de comparaţie trebuie să fie IS sau IS NOT
NULL. Daca acesti operatori nu sunt uti lizaţi şi valoarea NULL este comparata, atunci rezultatul este întotdeauna
FALSE
De exemplu, COMM!=NULL este întotdeauna falsa. Rezultatul este fals deoarece o valoare NULL poate să nu fie
egala sau diferita cu orice alta valoare alta decat NULL.
De notat ca o astfel de eroare nu este semnalata, rezultatul fiind întotdea- una fals.
Predicatul AND este adevărat numai daca ambele condiţii sunt 'adevărate'; predicatul OR este adevărat daca cel
putin una din condiţii este 'adevărata'.
In urmatoarele doua exANGAJATle, condiţiile sunt aceleasi, dar predicatele difera Priviti cum rezultatul este
dramatic modificat.
74
SELECT NRANG, NUME, MESERIA, SAL
FROM ANGAJAT
WHERE SAL BETWEEN 1000 AND 2000
OR MESERIA = 'FUNCTIONAR';
Puteţi combina AND sau OR în acceaşi expresie logica. când AND sau OR apar in aceeaşi clauza WHERE, toţi
operatorii AND sunt evaluaţi mai întai şi apoi toţi operatorii OR. Vom spune ca operatorii AND au o precedenta
mai mare decat OR.
Deoarece AND are o precedenta mai mare decat OR urmatoarea declaraţie SQL intoarce toţi managerii cu salarii
peste 1500$ şi toţi vânzătorii.
Parantezele specifica ordinea în care operatorii vor fi evaluati. In al doilea exemplu operatorul OR este evaluat
înaintea operatorului AND.
75
Tipurile de baza ale datelor stocate într-o tabela oracle sunt:caracter, valoare numerica sau dată calendaristica.
Vom discuta toate variantele în detaliu mai tarziu. De cate ori rezultatele unei condiţii implica date de tip caracter,
acestea pot varia în funcţie de tipul coloanei;ORACLE înzestreaza coloanela cu tipul CHAR pentru valori de
lungime fixa şi cu tipul VARCHAR2 pentru valori de lungime variabila.
Pentru coloanele cu tipul VARCHAR2, Oracle nu umple şirul de comparare şi de aceea va face o potrivire exacta.
In primul exemplu, doar un singur rând este intors pentru conditia:
când un alt rând stocat în coloana NUME are mai multe caractere decat şirul de comparat.
Pentru coloanele cu tipul CHAR, oricum, Oracle face umplere când valorile coloanelor sunt iniţial stocate,
facându-le pe toate de aceeaşi lungime.
Aceeaşi condiţie va întoarce ambele rânduri pentru STEFAN, indiferent de cate spaţii de sfârsit au fost adaugate
când valorile au fost stocate în tabela.
Oracle umple cu blancuri şirul de comparat în cel de al doilea caz şi de aceea spaţiile stocate sunt nesemnificative.
Precedenta operatorilor
Toţi operatorii sunt aranjaţi într-o ierarhie ceea ce le determina precedenta . Intr-o expresie operaţiile sunt
executate în ordinea precedentei lor de la mare la mica.
1. Toţi operatorii de comparaţie şi SQL au precedenta egala: =, !=, <, >, <=, >=, BETWEEN. . . AND, IN,
LIKE, IS NULL.
2. NOT(pentru a inversa rezultatul unei expresii logice. De ex: WHERE not(sal>2000))
3. AND
4. OR.
De fiecare dată când sunteţi în dubiu despre care dintre doua operaţii vor fi executate mai întai când o expresie este
evaluata, sunteţi liberi să utilizaţi parantezele pentru a clarifica semnificatia dorita şi pentru a va asigura ca
SQL*Plus face ceea ce doriti.
Să presupunem ca doriti să gasiti toţi managerii, din orice departament, si toţi funcţionarii din departamentul 10:
SELECT *
FROM ANGAJAT
WHERE MESERIA='MANAGER' OR (MESERIA = 'FUNCTIONAR' AND DEPTNO =
10);
Parantezele de deasupra sunt necesare, AND are o precedenta mai mare decat OR, dar ele clarifica semnificatia
expresiei.
SELECT-Sumar
SELECT
76
selecteaza cel putin o coloana
Alias
poate fi folosit pentru coloanele din lista selectata
*
desemneza toate coloanele
DISTINCT
poate fi utilizat pentru eliminarea duplicatelor
FROM Tabela
desemneaza tabela din care provin coloanele
WHERE
restricţioneaza cererea la rândurile care îndeplinesc o condiţie. Poate conţine valori de coloane, expresii
şi literali
AND/OR
poate fi utilizat într-o clauza WHERE pentru a construi condiţii mai complexe. AND are prioritate peste
OR.
()
pot fi utilizate pentru a forta prioritatea
ORDER BY
întotdeauna apare la sfarsit . Specifica ordinea de sortare. Una sau mai multe coloane pot fi specificate
aici.
ASC
ordinea ascendenta este ordinea de sortarĺ ( implicita) şi nu trebuie specificat.
DESC
inverseaza ordinea de sortare de default şi trebuie specificat după un nume de coloana.
Clauzele pot fi introduse pe linii separate în buffer şi tabelarea este utilizată pentru claritate şi în editare.
FUNCŢII MYSQL-APLICATII
Se da o tabela cu structura de mai jos :
id page_title user_agent date_accessed
int string blob date
(3) (50) (65535) (10)
not_null primary_key auto_increment blob
<?php
//sa dea informatii despre structura unei tabele
$db = mysql_connect("localhost","root")
or die ("nu m am conectat");
mysql_select_db("testdb", $db)
or die ("testez dar nu pot sa fac conectarea la tabela");
$db_name ="access_tracker ";
$query = "select * from $db_name";
$result = mysql_query($query);
$num_fields = mysql_num_fields($result);
//create table header
echo "<table border = 1>";
77
echo "<tr>";
for ($i=0; $i<$num_fields; $i++)
{
echo "<th>";
echo mysql_field_name ($result, $i);
echo "</th>";
}
echo "</tr>";
//end table header
//create table body
echo "<tr>";
for ($i=0; $i<$num_fields; $i++)
{
echo "<td valign = top>";
echo mysql_field_type ($result, $i) . "<br> \n";
echo "(" . mysql_field_len ($result, $i) . ")<br> \n";
echo mysql_field_flags ($result, $i) . "<br> \n";
echo "</td>";
}
echo "</tr>";
echo "</table>";
?>
Aceeiasi tabela dar vrem sa preluam date din ea :
<?php
//sa se prezinte preluarea datelor dintr o tabela
$link = mysql_connect("localhost", "root")
or die("nu m am conectat : " . mysql_error());
print "s a facut conexiunea la baza de date";
mysql_select_db("baza1") or die(" nu s a facut conexiunea la baza de date");
$query = "SELECT * FROM tabela1";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
print "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print "\t<tr>\n";
foreach ($line as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
print "\t</tr>\n";
}
print "</table>\n";
mysql_free_result($result);
mysql_close($link);
?>
Aceeisai tabela cu urmatoarele inregistrari:
nume salariu impozit
xx 2 2
xxx 3 3
kossu 0 0
Sa se stearga informatii care indeplinesc o conditie :
<?php
//sa se dea un exemplu prin care se sterg inregistrari dintr o tabela
mysql_pconnect("localhost", "root") or
die("nu m am conectat: " . mysql_error());
mysql_select_db("baza1");
mysql_query("DELETE FROM tabela1 WHERE impozit < 3");
printf ("inregistrarile afectate sunt: %d\n", mysql_affected_rows());
mysql_query("DELETE FROM tabela1");
78
printf ("s au sters urmatoarele inregistrari ca numar de orine: %d\n", mysql_affected_rows());
?>
Actualizarea unei tabele :
<?php
//sa se dea un exemplu prin care se actualizeaza inregistrari dintr o tabela cu conditie
mysql_pconnect("localhost", "root") or
die("nu m am conectat: " . mysql_error());
mysql_select_db("baza1");
79
include_once("a2.php");
require("a3.php");
require_once("a4.php");
$included_files = get_included_files();
foreach($included_files as $filename) {
echo "$filename\n";
}
?>
<?php
//sa se determine tipul fisierelor care exista in php
print_r (get_loaded_extensions());
?>
<?php
//sa se determine ce caractere curente sunt folosite in conexiune
$link = mysql_connect('localhost', 'root');
$charset = mysql_client_encoding($link);
printf ("caracterele curente sunt %s\n", $charset);
?>
<?php
//sa se realizeze conectarea la sever
$link = mysql_connect("localhost", "root")
or die("m am conectat: " . mysql_error());
print ("Conectarea s a facut");
mysql_close($link);
?>
<?php
//sa se afiseze continutul unei baze de date
$link = mysql_pconnect("localhost", "root")
or die("Could not connect: " . mysql_error());
mysql_select_db("baza1")
or die("Could not select database: " . mysql_error());
mysql_connect('localhost', 'root');
$db_list = mysql_list_dbs();
$i = 0;
$cnt = mysql_num_rows($db_list);
while ($i < $cnt) {
echo mysql_db_name($db_list, $i) . "\n";
$i++;
}
80
?>
<?php
//sa se afiseze foarte simplu bazele de date
$link = mysql_connect('localhost', 'root');
$db_list = mysql_list_dbs($link);
while ($row = mysql_fetch_object($db_list)) {
echo $row->Database . "\n";
}
?>
<?php
//sa se afiseze tabelele dintr o baza de date
mysql_connect("localhost", "root");
$result = mysql_list_tables("baza1");
for ($i = 0; $i < mysql_num_rows($result); $i++)
printf ("Tabelele: %s\n", mysql_tablename($result, $i));
mysql_free_result($result);
?>
<?php
//sa se determine tabele dintr o baza de date etapizat
$dbname = 'baza1';
if (!mysql_connect('localhost', 'root')) {
print 'nu m am conectat la mysql';
exit;
}
$result = mysql_list_tables($dbname);
if (!$result) {
print "nu are tabele\n";
print 'MySQL Error: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_row($result)) {
print "Tabelele: $row[0]\n";
}
mysql_free_result($result);
?>
<?php
//sa se determine starea serverului mysql
$link = mysql_connect('localhost', "root");
$status = explode(' ', mysql_stat($link));
print_r($status);
?>
Sa se insereze(adauge)date intr-o tabela creata
<?php
mysql_connect("localhost", "root") or
die("nu a am conectat: " . mysql_error());
mysql_select_db("baza1");
mysql_query("INSERT INTO tabela1 (nume) values ('kossu')");
printf ("Last inserted record has id %d\n", mysql_insert_id());
?>
<?php
//sa se detecteze ora curenta si sa se salute corespunzator
echo "salutari ";
$var = date("H");
if ($var <= 11)
{
echo "Bunã dimineata";
}
elseif ($var > 11 and $var < 18)
{
echo "Bunã ziua ";
81
}
else
{
echo "buna seara";
}
?>
<?
//sa se listeze tabelele dintr o baza de date
mysql_connect("localhost", "root", "");
$result = mysql_list_tables("test");
while($row = mysql_fetch_array($result))
{
echo $row[0] . "<br>\n";
}
?>
<?php
//sa se afiseze o tabela
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("selectare esuata");
$id_rez=mysql_query("select * from tabela1 ",$id);
while ($rand=mysql_fetch_array($id_rez,MYSQL_BOTH))
{
foreach($rand as $nume=>$col)
echo "$nume=>$col <br / >";
echo "<br />";
}
@mysql_close();
?>
<?php
// sa se sorteze un vector
//se va face conversia in string pentru tiparire
$str = "24,16,9,54,21,88,17";
//elimin virgulele
$array = explode(",", $str);
sort($array, SORT_NUMERIC);
$new_str = implode(",", $array);
echo $new_str;
?>
<?php
//conectare/deconectare de la o baza de date
$msqlconc = mssql_connect("localhost", "root");
mssql_close($msqlconc);
?>
<?php
// sa se dea exemlu de adaugare date in tabela
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
$interogare="insert into tabela1 values " . " ('ff',66,6)";
@mysql_query($interogare,$id);
if (mysql_errno());
if (mysql_affected_rows()!=1)
echo "adaugare ratata ";
else
echo "AM FACUT ADAUGAREA ";
@mysql_close();
?>
82
<?php
// sa se dea exemlu de adaugare date in tabela data
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
$interogare="insert into tabela1 values " . " ('ff',66,6)";
@mysql_query($interogare,$id);
if (mysql_errno());
if (mysql_affected_rows()!=1)
echo "adaugare ratata ";
else
echo "AM FACUT ADAUGAREA ";
@mysql_close();
?>
Structura tabelei de la problemele ce urmeaza si care vor fi si anume TABELA 1 este :
83
@mysql_query ($interogare) or die("eroare cu numarul ".mysql_errno());
@mysql_close($id);
?>
<?php
// sa se determine daca sunt conectat la o baza de date sau nu
$id=@mysql_pconnect("localhost","root") or die ("fara".$php_errormsg);
echo ("e bine ");
$interogare="select * from tabela1";
@mysql_query ($interogare) or die(" mesajul de eroare ".mysql_error());
@mysql_close($id);
?>
<?php
// sa se creeze o baza de date
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
$ok=@mysql_create_db("baza1",$id);
if ($ok) echo "baza de date a fost creata ";
else
echo "baza de date nu a fost creata "."eroare: ".mysql_error(); ($interogare) or die(" mesajul de eroare
".mysql_error());
@mysql_close($id);
?>
<?php
//sa se faca conectarea la o baza de date
mysql_connect("localhost", "root") or
die ("nu m am connectat");
mysql_select_db("guestbook") or
die ("nu am selectat bza de date");
?>
<?php
//sa se extraga date dintr-o tabela
$conn = mysql_connect("localhost", "root");
mysql_select_db("testDB",$conn);
$sql = "SELECT * FROM testTable";
$result=mysql_query($sql,$conn) or die (mysql_error());
while ($newArray=mysql_fetch_array($result))
{ $id=$newArray['id'];
$testField= $newArray['testField'];
echo "numarul de ordine $id si continutul $testField <br>";
}
?>
<?php
//extragere pe verticala a datelor de tip "change"
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("selectare esuata");
$id_rez=mysql_query("select * from tabela1 ",$id);
while ($rand=mysql_fetch_array($id_rez,MYSQL_NUM))
{
foreach($rand as $nume=>$col)
echo "$nume=>$col <br / >";
echo "<br />";
}
@mysql_close();
?>
<?php
//extragere date orizontal de tip "browse"
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
84
@mysql_select_db("baza1",$id) or die ("selectare esuata");
$id_rez=mysql_query("select * from tabela1 ",$id);
while ($rand=mysql_fetch_array($id_rez,MYSQL_BOTH))
{
foreach($rand as $nume=>$col)
echo "$nume=>$col <br / >";
echo "<br />";
}
@mysql_close();
?>
<?php
//sa se afiseze si eticheteze datele dintr-o tabela
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("selectare esuata");
$id_rez=mysql_query("select * from tabela1 ",$id);
while ($rand=mysql_fetch_array($id_rez,MYSQL_BOTH))
{
foreach($rand as $nume=>$col)
echo "$nume=>$col <br / >";
echo "<br />";
}
@mysql_close();
?>
<?php
//sa se gaseasca campurile care indeplinesc o anumita conditie
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
mysql_data_seek($id_rez,mysql_num_fields($id_rez)-1);
$ultimul=mysql_fetch_field($id_rez);
foreach($ultimul as $cheie=>$valoare)
echo "coloana : $cheie=>$valoare<br />";
@mysql_close($id);
?>
<?php
// sa se gestioneze si elibereze memoria
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
while ($rand=mysql_fetch_array($id_rez,MYSQL_ASSOC))
{
foreach($rand AS $nume=>$COL)
ECHO "$nume=>$col <br />";
echo "< br />";
}
@mysql_free_result($id_rez);
@mysql_close();
?>
<?php
// sa se determine indicatorii flags ai unei tabele
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
85
$nr_col=mysql_num_fields($id_rez);
?>
<center>
<table border="1" cellpadding="5">
<tr > <td>coloana</td>
<td>indicator de tip</td>
</tr>
<?php
for ($i=0;$i<$nr_col;$i++)
{
echo "<tr><td>".mysql_field_name($id_rez,$i)."</td>
<td>".mysql_field_flags($id_rez,$i)."</td></tr>";
}
@mysql_close($id);
?>
</table>
</center>
?>
<?php
// sa se creeze o interogare la baza de date
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
$interogare="select * from tabela1";
@mysql_query ($interogare) or die(" mesajul de eroare ".mysql_error());
@mysql_close($id);
?>
<center> baze de date>
<table border ="1" cellpading="5" ><tr>
<?php
// sa se determine lista bazelor de date
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
$id_rez=@mysql_list_dbs() or die ("interogare esuata ");
while ($rand=@mysql_fetch_row($id_rez))
echo "<td>".$rand[0]."</td>";
@mysql_close($id);
?>
</tr></table>
</center>
<center> baze de date>
<table border ="1" cellpading="5" ><tr>
<?php
//a se determine lista tabelelor de conexiune
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
$id_rez=@mysql_list_tables("baza1") or die ("interogare esuata ");
$n=mysql_num_rows($id_rez);
for ($i=0;$i<$n;$i++)
echo "<td>".mysql_tablename($id_rez,$i)."</td>";
@mysql_close($id);
?>
</tr></table>
</center>
<?php
//sa se determine lungimea unei coloane dupa valoare
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
86
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
$nr_col=mysql_num_fields($id_rez);
?>
<center>
<table border="1" cellpadding="5">
<tr > <td>coloana</td>
<td>lungimea</td>
</tr>
<?php
for ($i=0;$i<$nr_col;$i++)
{
echo "<tr><td>".mysql_field_name($id_rez,$i)."</td>
<td>".mysql_field_len($id_rez,$i)."</td></tr>";
}
@mysql_close($id);
?>
</table>
</center>
?>
<center> baze de date>
<table border ="1" cellpading="5" ><tr>
<?php
// sa se determine numarul de coloane la o tabela
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
$id_rez=@mysql_list_fields("baza1","tabela1",$id);
$nr_coloane=mysql_num_fields($id_rez);
for ($i=0;$i<$nr_coloane;$i++)
echo "<td>".mysql_field_name($id_rez,$i)."</td>";
@mysql_close($id);
?>
</tr></table>
</center>
<?php
// numarul de campuri la o tabela
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("fotografii",$id) or die ("selectare esuata");
$id_rez=mysql_query("select * from foto ",$id);
$numar=mysql_num_FIELDS($id_rez);
ECHO "numarul de coloane al tabelei este ".$numar;
@mysql_close();
?>
<?php
// sa se determine numarul de campuri si denumirea lor
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("fotografii",$id) or die ("selectare esuata");
$id_rez=mysql_query("select * from foto ",$id);
$numar=mysql_num_FIELDS($id_rez);
ECHO "numarul de coloane al tabelei este ".$numar;
for($i=0;$i<$numar;$i++)
echo mysql_field_name($id_rez,$i).", ";
@mysql_close();
?>
<?php
// sa se determine numarul de coloane al unui obiect
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
87
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
while($rand=mysql_fetch_object($id_rez))
{
echo $rand->nume.";".$rand->salariu."<br />";
}
@mysql_close($id);
?>
<?php
// sa se determihne numele tabelei care contine o anumita coloana dintr-o baza de date
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
$nr_col=mysql_num_fields($id_rez);
<center>
<table border="1" cellpadding="5">
<tr > <td>coloana</td>
<td>numeletabelei</td>
</tr>
<?php
for ($i=0;$i<$nr_col;$i++)
{
echo "<tr><td>".mysql_field_name($id_rez,$i)."</td>
<td>".mysql_field_table($id_rez,$i)."</td></tr>";
}
?>
<?php
for ($i=0;$i<$nr_col1;$i++)
{
echo "<tr><td>".mysql_field_name($id_rez1,$i)."</td>
<td>".mysql_field_table($id_rez1,$i)."</td></tr>";
}
@mysql_close($id);
?>
</table>
</center>
?>
<?php
//sa se adauge inregistrari intr-o tabela
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1");
mysql_query("lock tables tabela1 write") or die ((mysql_error));
$inregistrare="insert into tabela1 values " . " ('dd',44,4)";
$id_rez=mysql_query($inregistrare) or die (mysql_error());
mysql_query("unlock tables") or die (mysql_error());
@mysql_close($id);
?>
<?php
// sa se selecteze o baza de date
88
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
?>
<?php
// sa se pun aintr-o tabela imagini
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("fotografii",$id) or die ("selectare esuata");
$id_rez=mysql_query("select * from foto ",$id);
$nr_rand=mysql_num_rows($id_rez);
Srand((double)MICROTIME()*1000000);
$ALEATOR=RAND(1,$NR_RAND);
$NR=MYSQL_QUERY("SELECT * FROM FOTO WHERE ID=$ALEATOR");
WHILE($IMAGINE=MYSQL_FETCH_ARRAY($NR))
{
ECHO "<CENTER>
<IMG SRC='$IMAGINE[0]' />
</CENTER>";
}
?>
<?php
// sa se determine tipul coloanelor dintr-o tabela
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare : ".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
$nr_col=mysql_num_fields($id_rez);
<center>
<table border="1" cellpadding="5">
<tr > <td>coloana</td>
<td>tipul campului(datelor)</td>
</tr>
<?php
for ($i=0;$i<$nr_col;$i++)
{
echo "<tr><td>".mysql_field_name($id_rez,$i)."</td>
<td>".mysql_field_type($id_rez,$i)."</td></tr>";
}
?>
<?php
for ($i=0;$i<$nr_col1;$i++)
{
echo "<tr><td>".mysql_field_name($id_rez1,$i)."</td>
<td>".mysql_field_type($id_rez1,$i)."</td></tr>";
}
@mysql_close($id);
?>
</table>
</center>
?>
89
<?php
// sa se realizeze tranmiterea interogarilor
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
$id_rez=@mysql_list_fields("baza1","tabela1",$id);
$nr_coloane=mysql_num_fields($id_rez);
@mysql_select_db("baza1") or die ("selectare esuata ");
$interogare="select * from tabela1";
$id_rez=mysql_query($interogare);
?>
<center> baze de date>
<table border ="1" cellpading="5" ><tr>
<?php
for ($i=0;$i<$nr_coloane;$i++)
echo "<td>".mysql_field_name($id_rez,$i)."</td>";
?>
</tr>
<?php
while($rand=mysql_fetch_row($id_rez)) {
echo "<tr>";
for ($i=0;$i<$nr_coloane;$i++)
echo "<td>".$rand[$i]."</td>";
echo "</tr>";
}
?>
</table>
</center>
<?php
@mysql_close($id);
?>
<html>
<head>
<title>conversia tipurilor de date</title>
</head>
<body>
<?php
// sa se seteze tipurile de date
$undecided = 3.14;
print gettype($undecided); // double
print "este transformat in $undecided<br>"; // 3.14
settype($undecided, 'string');
print gettype($undecided); // string
print "este transformat in $undecided<br>"; // 3.14
settype($undecided, 'integer');
print gettype($undecided); // integer
print "este transformat in $undecided<br>"; // 3
settype($undecided, 'double');
print gettype($undecided); // double
print "este transformat in $undecided<br>"; // 3.0
settype($undecided, 'boolean');
print gettype($undecided); // boolean
print "este transformat in $undecided<br>"; // 1
?>
</body>
</html>
<html>
<head>
<title>testare tipuri de date</title>
90
</head>
<body>
<?php
$testing;
print gettype($testing); // null
print "<br>";
$testing = 5;
print gettype($testing); // integer
print "<br>";
$testing = "litere";
print gettype($testing); // string
print("<br>");
$testing = 5.0;
print gettype($testing); // double
print("<br>");
$testing = true;
print gettype($testing); // boolean
print "<br>";
?>
</body>
</html>
BIBLIOGRAFIE
SAMS TEACH YOURSELF php ,Mysql and Apache ALL in One,j.k.Meloni-Person Education 2004
91
MySQL- PHP Database Aplication,2005
92