Curs PHP Si Mysql
Curs PHP Si Mysql
Comentarii n scrispturi:
# - un tip de comentariu pentru un rnd // - un alt tip de comentariu pentru un rnd
Variabile predefinite
$_SERVER['REMOTE_ADDR'] afieaz adresa IP a vizitatorului $_SERVER['HTTP_USER_AGENT']- afieaz informatii despre browserul folosit $_SERVER['HTTP_REFERER'] afieaz pagina vizitata anterior $_SERVER['SERVER_NAME'] afieaz numele serverului $_SERVER['SCRIPT_NAME'] afieaz numele scriptului
Crearea constantelor
3
Constantele sunt create cu ajutorul funciei define. Expl: define (PI, 3.14);
2. Operatori de comparaie: Denumire operator Egalitate Identic Mai mare ca Mai mic ca Diferit de Diferit de Mai mic sau egal Mai mare sau egal Operator == === > < <> != <= >= Obs. TRUE dac a i b sunt egale TRUE dac a i b sunt egale i de acelai tip TRUE dac a este mai mare dect b TRUE dac a este mai mic dect b TRUE dac a diferit de b TRUE dac a diferit de b TRUE dac a este mai mic sau egal cu b TRUE dac a este mai mare sau egal cu b Expl. $a= =$b $a= = =$b $a>$b $a<$b $a<>$b $a!=$b $a<=$b $a>=$b
3. Operatori logici: Denumire Operator operator NOT ! AND && AND and OR || OR or XOR xor Obs. TRUE daca $a nu este TRUE TRUE daca si $a si $b sunt TRUE TRUE daca si $a si $b sunt TRUE TRUE daca ori $a ori $b sunt TRUE TRUE daca ori $a ori $b sunt TRUE TRUE daca ori $a ori $b sunt TRUE dar 4 Expl. $a!$b $a&&$b $a and $b $a || $b $a or $b $a xor $b
nu amandoua
Observaii: Numerele aleatoare sunt returnate de funcia rand() Expl: echo rand(); // se genereaz un numr aleator echo rand(1,50) // se genereaz un numr aleator de la 1 la 50
STRUCTURI DE CONTROL
1. ATRIBUIREA Sintaxa este: $<nume_variabila>=<valoare> unde valoare poate fi o constanta, o variabila sau o expresie 2. DECIZIA Sintaxa IF este: if <conditie_logica> <instructiune1> else <instructiune2> Mod de lucru: - se testeaza conditia logica. Daca este adevarata se executa instructiunea 1 dacaeste falsa se executa instructiunea 2 Sintaxa SWITCH este: $variabila=<valoare> switch($variabila) { case <val1>: <instructiune1>; break; case <val2>: 5
<instructiune2>; break; ............. case <valn>: <instructiunen>; break; default: <alta_instructiune> Mod de lucru: - se citeste valoarea unei variabile - se va executa instructiunea corespunzatoae cazului cand <vali>=<valoare> - daca nu este corespunde nici un ca se va executa instructiunea din default 3. REPETITIA Sintaxa WHILE este: while (<conditie_logica>) <instructiuni>
Mod de lucru: / se testeaza conditia logica. Cit timp este adevarata se executa instructiunile din cadrul structurii Sintaxa DO .WHILE este: do //repeta <instructiune1> <instructiune2> .............. <instructiunen> while <conditie_logica>
Mod de lucru: Se executa instructiunile cat timp conditia este adevarata Sintaxa FOR este: for (<contor=valoare_initiala>; <contor=valoare_finala>; <incrementeaza_contor>) <instructiuni> Mod de lucru: - cit timp contorul nu a ajuns la valoarea finala se executa instructiunile si se incrementeaza contorul
<?php $a=test; echo strlen($a); ?> Afisare: 4 b) strstr caut un subsir intr-un sir Exemplu: .. if( strstr( $sir, PHP ) = = true ) echo gasit; else echo nu am gasit;
c) stristr identic cu strstr doar c nu tine cont de litere mari sau mici d) substr afieaz un subir ntr-un ir dat Exemplu: <?php $s="invat php"; echo substr( $s, 1, 2); ?> Afisare: nv d) str_replace inlocuieste un subsir cu un sir dat Exemplu: <?php $s="invat php"; echo str_replace( "invat", "stiu", $s); ?> Afisare: stiu php e) strtoupper schimb tipul literelor (din mici in mari) f) strtolower - schimb tipul literelor (din mari in mici) 7
g) trim terge spaiile dintr-un ir h) nl2br transforma caracterele enter in <br> Exemplu: <?php echo nl2br( "text afisat pe 3 linii" ); ?> Afisare: text afisat pe 3 linii e) explode extrage subiruri dintr-un sir, fiecare subir extras punndu-l ntr-un array(matrice)
Forma general: array explode ( string $delimiter , string $string [, int $limit ] $delimiter caracterul dup care se face delimitarea Exemplu: <?php $propozitie = "Exemplu de folosire a functiei explode"; $cuvinte = explode(" ", $propozitie); echo $cuvinte[0] ." ". $cuvinte[5]; ?> Afiare: Exemplu explode e)
Forma general: string implode ( string $delimiter , array $components) Exemplu: <?php $array = array('lastname', 'email', 'phone'); $a= implode(",", $array); echo $a; ?> Afiare: lastname,email,phone
f) header - este functia prin care utilizatorul este redirectionat de pe pagina de procesare, pe pagina initiala (adresa poate fi orice pagina. Exemplu: 8
header('location: http://agricolfalticeni.ro');
Funcii matematice
a) abs(x) - Returneaza valoarea absoluta a lui 'x' Exemplu: echo abs(-5); // va returna 5 b) ceil(x) - Returneaza valoarea 'x', rotunjita la ntregul imediat superior Exemplu: echo ceil(5.3);// va returna 6 c) floor(x) - Returneaza valoarea 'x', rotunjita la ntregul imediat inferior Exemplu: echo floor(5.6);// va returna 5 d) max(x,y,...) - Returneaza valoarea maxima a unui set de valori Exemplu: echo max(3,5,7,3,8,4,2);// va returna 8 e) min(x,y,...) - Returneaza valoarea minima a unui set de valori f) pow(x,n) - Returneaza numarul 'x', ridicat la puterea specificata 'n' g) strftime(f) - Returneaza data curenta, formatata conform continutului parametrului 'f' Exemplu: echo strftime("%A");//va returna Monday h) sqrt(x) - Returneaza radacina patrata a lui 'x' i) rand([int_min],int_max) este functia din PHP care genereaza automat numere aleatoare. Exemplu: echo rand(2,9);// va afia un numr aleatoriu
Funcii data/or
a) time() - ntoarce timpul curent msurat n numrul de secunde de la 1 ianuarie 1970 00:00:00 GMT). Exemplu: echo time(); // returneaza ceva de genul 1268668902 b) date() returneaza data serverului
$a = date("j, n, Y"); echo $a; // 10, 3, 2001
FORMULARE
Formularele reprezint un element principal al site-urilor WEB. Sunt puine site-uri care nu folosesc formulare. 9
Folosim formulare pentru a transmite si recepiona date. Ele reprezint elementul de interactivitate cu pagina web. Pentru a folosi un vom folosi tag-urile <FORM> i </FORM>. ntre aceste tag-uri vor fi introduse toate elementele formularului. Tag-ul <FORM> are doua atribute importante: ACTION si METHOD. Prin ACTION transmitem browser-ului ce se va nampla cu datele introduse in formular. Valoarea atributului ACTION poate fi o adresa URL sau poate fi o adresa de email, caz n care datele din formular vor fi trimise prin email la adresa respectiva. Prin METHOD, se precizeaz metoda de trimitere a datelor. Valoarea implicita a acestui atribut este GET, cu ajutorul acestei metode putand fi trimise cantitati mici de date, cea mai folosita metoda fiind POST. Elementele unui formular Elementele unui formular vor fi introduse cu ajutorul tag-ului <INPUT>. Atributele cele mai importante ale acestui tag sunt urmatoarele: - TYPE - tipul elementului - NAME - numele elementului - VALUE - valoarea elementului Elementele ale unui formular pot fi: - campurile de editare - butoanele radio - casetele de validare - casetele pentru upload-ul de fisiere - listele de selectie - butoanele submit si reset
Cod scris n fisierul formular.php <html> <Body> <center> <br><br><br> <?php $a=$_REQUEST[unu]; $b=$_REQUEST[doi]; 10
Cod scris n fisierul formular.php <html> <Body> <center> <br><br><br> <?php $a=$_REQUEST[text]; echo "Ati ales culoarea ", $a; ?> </center> </Body> </html>
3.
value="copil">SUB 18 ANI <br /> <INPUT TYPE=radio NAME=virsta value="tinar">INTRE 18-50 <br /> <INPUT TYPE=radio NAME=virsta value="batrin">PESTE 50 <br /> <INPUT TYPE=SUBMIT VALUE=Afiseaza> <INPUT TYPE=RESET VALUE=Reset> </FORM>
4.
Cod scris n fisierul formular.php <html> <Body> <center> <br><br><br> <?php $a=$_REQUEST[produs1]; $b=$_REQUEST[produs2]; $c=$_REQUEST[produs3]; echo "Produsul selectat este: ", $a,",",$b,",",$c;
12
Cod scris n fisierul formular.php <html> <Body> <center> <br><br><br> <?php $a=$_REQUEST[comentariu]; echo "Comentariul introdus este: ", $a;
Module COOKIE
Modulele cookie conin text pe care il putem stoca pe calculatorul utilizatorului i s-l citim ulterior. Spre deosebire de variabilele obinuite care i pierd valoarea n momentul nchiderii unui program php, variabilele cookie i pstreaz valoarea un timp indefinit sau definit de cel care le creeaz. Pentru a se
putea pstra, browserul utilizatorului stocheaz variabilele cookie n unitatea de hard-disc a utilizatorului.
Modulele cookie sunt transmise att de pe server ctre browser ct i de la browser ctre server (astfel prin instalarea unui modul cookie nelegem transmiterea unui modul ctre utilizator iar prin citirea unui modul cokie nelegem transmiterea unui modul cookie ctre server).
13
Fiierul inst_cookie.php: <?php setcookie('functie', "inginer", time()+7200); ?> Variabila cookie va fi disponibil 2 ore (7200 secunde) de la crearea sa
SESIUNI
Cu ajutorul sesiunilor PHP retine informaii de la o pagina la alta. Dup crearea unei sesiuni informaia se pstreaz pana la nchiderea browser-ului, sau pn cand utilizatorul distruge sesiunea curenta. Sesiunile au urmtoarele avantaje: - permit stocarea unui volum mai mare de informaii comparativ cu cookie-urile - pot fi folosite chiar daca browserul utilizatorului nu suporta cookie-uri sau daca acestea sunt dezactivate.
Initializarea unei sesiuni se face cu funcia session_start() care trebuie s fie printre primele linii de cod dintr-un script PHP, deoarece apelul acestei ei trebuie fcut nainte de trimitea ctre browser-ul Web a unui cod HTML.
Exemplul 1: Parolarea unei pagini php utiliznd sesiuni
Fisierul de start index.php conine codul:
14
<?php include "sesiune.php"; ?> restul codului fiierul index.php Fierul sesiune.php conine codul: <?php session_start(); if(!isset($_SESSION['SESS_LOG'])) { header("location: logare.php"); exit(); } ?> Fisierul parola.php conine codul: <?php session_start(); $login =$_POST['login']; if($login=="parola") { session_regenerate_id(); $_SESSION['SESS_LOG'] = "1"; session_write_close(); header("location: index.php"); exit(); } else { header("location: logare.php"); exit(); } ?> Fiierul logare.php conine codul: <form action="parola.php" method="post"> <b>Parola :</b> <input type="password" name="login" /> <input type="submit" value="Login" id="loginbutton" name="Submit"/> </form> Fiierul logout.php conine codul: <?php session_start(); unset($_SESSION['SESS_LOG']); ?> 15
Exemplul 2: Contor de vizitare afiseaza de cte ori s-a vizitat o pagin <?php session_start(); if(!isset($_SESSION['count'])) { $_SESSION['count']=1; } else { $_SESSION['count']++; } echo $_SESSION['count']; ?>
?>
- Adaugarea sau modificarea datelor; n general, o baz de date este alctuit din una sau mai multe tabele, ntre acestea putndu-se stabili diferite relaii. Acest lucru ofera bazei de date proprietatea de baz de date relaional. Un tabel este alctuit din coloane (numite cmpuri) i rnduri (numite nregistrri). Pentru implementarea unei baze de date este nevoie de un sistem de gestiune a bazelor de date(SGBD). Exemple de astfel de SGBD-uri: - Microsoft Access; - Visual Foxpro; - MySQL; - Oracle; - etc. Vom studia SGBD MySQL. Dei este folosit foarte des mpreun cu limbajul de programare PHP, cu MySQL se pot construi aplicaii n orice limbaj major. Exist multe scheme API disponibile pentru MySQL ce permit scrierea aplicaiilor n numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Borland Delphi, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip spefic API. O interfa de tip ODBC denumit MyODBC permite altor limbaje de programare ce folosesc aceast interfa, s interacioneze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. n sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul crora respetivele limbaje s poat folosi acest SGBD mult mai uor dect prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale (http://ro.wikipedia.org/wiki/MySQL). Administrarea sistemului MySQL se poate face fie din linia de comand fie folosind aplicaia PHPMyAdmin.
19
Cel mai important mod de administrare a unei baze de date n MySQL este ns cel dat de PHP, folosind formulare. Comenzile uzuale folosite n general att n MySQL ct si n celelalte SGBD-uri sunt: CREATE creaz o baz de date i/sau un tabel DROP - terge o baz de date i/sau un tabel INSERT adaug nregistrri(linii) ntr-un tabel DELETE - terge nregistrri(linii) ntr-un tabel UPDATE modific nregistrrile dintr-un tabel SELECT selecteaz nregistrrile dintr-un tabel ALTER - modific proiectul unui tabel dup ce acesta a fost creat cu instruciunea CREATE TABLE
Tipuri de date folosite n MySQL(o parte din ele): - Int numr ntreg - Char seciune cu lungime fix de max. 255 caracter - Varchar seciune variabil de max 255 caractere - Float numr real mic - Double numr real mare - Text i de maxim 65535 caractere - Date data im format an-luna-zi - Time ora in format or-minut-secund 20
n continuare va trebui selectat baza de date (exist posibilitatea s avem mai multe baze de date). Acest lucru se face cu comanda USE numele_bazei_de_date;
Expl: use elevi;
O baz de date poate conine una sau mai multe tabele. Pentru crearea unei tabele vom folosi comanda:
CREATE TABLE nume tabela (nume_camp1 tip_camp1, nume_camp2 tip_camp2,.nume_campn tip_camp_n); Expl: Create table t1 (nume text, nota int);
Pentru crearea unei tabele cu ajutorul scriptului PHP va trebui mai inti sa ne conectm la baza de date (vom folosi fisierul conexiune.php). Pentru exemplificare vom crea urmatorul tabel: nume nota Ionescu Popescu Vasilescu Georgescu 8 7 8 9
21
<?php include conexiune.php $table=create table t1 (nume varchar(20), nota float) type MyISAM; if(mysql_query($table)) { echo Tabelul a fost creat; } else { echo Tabelul nu a fost creat; } mysql_close($conexiune); ?> Observaii: Asupra coloanelor se pot aplica unele restrictii ca: UNSIGNED-nu vor mai fi valori negative ci vor incepe de la 0. AUTO_INCREMENT functioneaza cu orice tip intreg. La fiecare rand nou adaugat in baza de date numarul asociat va fi incrementat. NULL- fara valoare (diferit de spatiu sau zero). NOT NULL - orice inregistrare va fi considerata ceva. Expl: ........................ $table="CREATE TABLE t1(id int(3) NOT NULL AUTO_INCREMENT, nume varchar(20) NOT NULL , nota float NOT NULL) ...........................................
22
- mysql_connect() - este functia prin care ne conectam la serverul MySQL - $conexiune - va avea o valoarea TRUE sau FALSE functie de rezultatul conectarii la serverul MySQL folosind functia mysql_connect() - mysql_select_db - este functia care stabileste baza de date la care ne vom conecta
Puteti modifica variabilele din fisierul conexiune.php in functie de configurarile propriei baze de date: $hostname=adresa serverului, de cele mai multe ori este localhost $username=username-ul de conectare la baza de date $password= parola de conectare la baza de date $database=numele bazei de date mysql_close($conexiune); - inchide baza de date
Aceast instruciune va introduce in tabelul cu numele 'tabel', in 'camp1' 'valoarea1', in 'camp2' 'valoarea2' si in 'camp3' 'valoarea3'. Tabelul arat astfel: camp1 camp2 camp3 valoarea1 valoarea2 valoarea3 Observaie: Se poate omite una din coloane la inserare.
INSERT INTO nume_tabel (camp1, camp2) VALUES (valoarea1, valoarea2); sau: INSERT INTO tabel VALUES (valoarea1, valoarea2, valoarea3); daca introducem valori in toate campurile tabelului
Exemplu de introducere a datelor in tabela t1 din baza de date elevi folosind un formular (tabela t1 are cmpurile nume i nota):
23
<html> <head><title>Exemplu de fomular</title> </head> <body> <b>Adaugare date</b> <form method="POST" action="inserare.php"> Nume: <input type="text" name="nume"><br> Nota: <input type="text" name="nota"><br> <input type="submit" value="Trimite"> </form> </body> </html>
Rezultatul este:
/* fisierul inserare.php */ <?php include "conexiune.php"; $id=$_POST['id']; $nume=$_POST['nume']; $nota=$_POST['nota']; $query="INSERT INTO t1 (nume, nota) VALUES ('$nume','$nota')"; if (!mysql_query($query)) { die(mysql_error()); } else { echo "datele au fost introduse"; } 24
Observaie: Comanda SELECT este una din cele mai folosite comenzi n MySQL 25
Pentru afisarea datelor dintr-o tabela din MySQL utiliznd PHP vom utiliza sintaxa: $afisare=mysql_query("SELECT * FROM nume_tabel");
Pentru afisarea fiecrui rand din tabel vom folosi o bucla while si comanda mysql_fetch_row. Exemplu de afiare a datelor dintr-o tabela (vom lua drept exemplu tabela t1 pe care am folosit-o i n capitolul anterior): <?php include "conexiune.php"; $afisare=mysql_query("SELECT * FROM t1"); echo "<table border=2>"; echo "<tr><td>Nume</td><td>Nota</td></tr>"; while ($row=mysql_fetch_row($afisare)) { echo "<tr><<td>$row[1]</td><td>$row[2]</td></tr>"; } echo "</table>"; mysql_close($conexiune); ?> Observaie1: Comanda SELECT permite i anumite restricii date prin clauza WHERE. Exemplu dac dorim s afism toatele numele care au nota 9: <?php include "conexiune.php"; $sql=mysql_query("SELECT * FROM t1 WHERE nota=9"); echo "<table border=2>"; echo "<tr><td>ID</td><td>Nume</td><td>Nota</td></tr>"; while ($row=mysql_fetch_row($sql)) { echo "<tr><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td></tr>"; } echo "</table>"; mysql_close($conexiune); ?> Observaia2: Funcia mysql_num_rows($afisare) returneaz numarul de linii continute de baza de date.
Se vor modifica nregistrrile care respect condiia dat n WHERE. Exemplu: Fie tabela t1 care are urmatoarea structura: nume nota ionel 9 ionela 5 Ionescu 7 Daca dorim sa modificam nota persoanei cu numele Ionescu vom scrie(n linia de comand): UPDATE t1 SET nota=10 where nume=Ionescu; Rezultatul este: nume ionel ionela Ionescu ionel nota 9 5 10 10
Modificarea nregistrrilor folosind un formular i un fiier php: Expl.: n tabela t1 de mai sus, dorim s modificam numele unei personae folosind un formular sub forma:
Dac modificarea se face vom afia: Modificare efectuat, altfel Modificare neefectuat rezultatul fiind:
nume vasilica ionela Ionescu vasilica nota 9 5 10 10
Update.php
<?php include "conexiune.php"; $numev=$_REQUEST['numev']; $numen=$_REQUEST['numen'];
27
$query="UPDATE t1 SET nume='$numen' WHERE nume='$numev'"; $checkresult = mysql_query($query); if ($checkresult) { echo "Modificare efectuata"; } else { echo "Modificare neefectuata"; } mysql_close(); ?>
tergerea nregistrrilor folosind un formular i un fiier php: Expl.: n tabela t1(iniial) de mai sus, dorim s tergem nregistrarea care are nota 10 folosind un formular sub forma:
Dac modificarea se face vom afia: tergere efectuat, altfel tergere neefectuat rezultatul fiind:
nume ionel Ionela nota 9 5
28
delete.php
<?php include "conexiune.php"; $nota=$_REQUEST['nota']; $query="DELETE FROM t1 WHERE nota='$nota'"; $checkresult = mysql_query($query); if ($checkresult) { echo "Stergere efectuata"; } else { echo "Stergere neefectuata"; } mysql_close(); ?>
EXEMPLU DE APLICAIE IN CARE SE LUCREAZ CU BAZE DE DATE I TABELE DIN MYSQL UTILIZND PHP Cerine:
meniu.htm
sterge.html
sterge.php
update.html
$conexiune=mysql_connect($host,$user) or die("nu s-a contectat"); $bazadate=mysql_select_db($database,$conexiune) or die("nu s-a conectat la baza de date"); ?> 2. creare.html
creare.php
<html> <body> <?php include "conexiune.php"; $a=$_POST['unu']; $query="create table $a (Id int, Nume text, Nota int) "; if(mysql_query($query)) { echo "Tabelul a fost creat"; } else { echo "Tabelul nu a fost creat "; } mysql_close(); ?> <br> </body> </html>
inserare.html
inserare.php
<html> <body> <?php include "conexiune.php"; $a=$_POST['unu']; $id=$_POST['id']; $nume=$_POST['nume']; $nota=$_POST['nota']; $noi="insert into $a (id , Nume , Nota) VALUES ('$id', '$nume' , '$nota')" ; if(!mysql_query($noi)) { die(mysql_error()); } else { echo "datele au fost introduse pt: ", $a; }
30
afisare.html
afisare.php
<?php include "conexiune.php"; $a=$_POST['nume']; $afisare=mysql_query("SELECT * FROM $a"); echo "<table border=3>"; echo "<tr><td>Id</td><td>Nume</td><td>Nota</td></tr>"; while($row=mysql_fetch_row($afisare)) { echo "<tr> <td>$row[0]</td> <td>$row[1]</td> <td>$row[2]</td> </tr>"; } echo"</table>"; mysql_close($conexiune); ?>
modificare.html
modificare.php
<?php include "conexiune.php"; $a=$_POST[doi]; $nume1=$_POST[nume1]; $nume2=$_POST[nume2]; $query="update $a set nume='$nume2' where nume='$nume1'"; $checkresult=mysql_query($query); if($checkresult) { echo "modificare efectuata"; } else { echo "Modificare neefectuata"; } mysql_close(); ?>
31
stergere.html
stergere.php
<?php include "conexiune.php"; $a=$_POST[unu]; $nota=$_POST['nota']; $query="DELETE FROM $a WHERE nota='$nota'"; $checkresult=mysql_query($query); if($checkresult) { echo "Stergere efectuata"; }else { echo "stergere neefecuata"; } mysql_close(); ?>
32