Tutorial SQL&PHP

Cum creezi o conexiune la o baza de date MySQL
Inainte de a putea accesa o baza de date, trebuie sa creem acea baza de date..

In limbajul PHP acest lucru il facem cu functia mysql_connect()

Sintaxa:
mysql_connect(servername,username,parola);

Parametrii:
servername Optional. Este serverul pe care se afla baza de date, valoarea default este "localhost"
username Optional. Este userul care are acces de admin pe serverul respectiv. (coincide cu userul de cPanel)
password Optional. Parola user-ului respectiv

_______________________

In exemplul urmator vom stoca conexiunea intr-o variabila ($con) pentru a putea fi folosita pe parcursul scriptului. Atentie: variabilel in php se definesc cu semnul "$" (ex: $variabila. $nume_variabila)

Functia "die" va fi executata daca conexiunea la baza de date/server nu va avea loc. Functia mysql_error() afiseaza motivul erorii.

serverul este: localhost; userul este: acidripp iar parola este: 1234567890

// ineputul scriptului php
$con = mysql_connect("localhost","acidripp","1234567890");
// in acest pas am definit variabila $con
if (!$con)
// daca !(eroare) la conexiune ($con) atunci:
{
die('Nu m-am putut conecta pentru ca: ' . mysql_error());
// die ("moare") si afiseaza mesajul "Nu m-am putut conecta pentru ca: eroare"
}
// codul scriptului
?>
// terminarea scriptului php

________________________

Inchiderea unei conexiuni
Conexiunea se inchide automat cand scriptul ajunge la capat (?>). Pentru a inchide mai devreme conexiunea folosim functia mysql_close():

$con = mysql_connect("localhost","acidrippr","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
// codul scriptului
mysql_close($con);
// inchide conexiunea definita prin variabila $con
?>

_________________________

Crearea unei baze de date noi
Functia CREATE DATABASE este folosita pentru a crea o baza de date noua MySQL.

Sintaxa:
CREATE DATABASE nume_baza_de_date
Pentru a executa comanda trebuie sa folosim functia mysql_query() . Aceasta este folosita pentru a trimite o comanda conexiunii MySQL

__________________________

In exemplul urmator vom crea o baza de date numita "datele_mele" :

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
if (mysql_query("CREATE DATABASE datele_mele",$con))
// creaza baza de date numita datele_mele folosind conexiunea $con
{
echo "Baza de date a fost creata cu succes";
// daca baza de date a fost creata cu succes, va va aparea mesajul "Baza de date a fost creata cu succes"
}
else
// daca nu
{
echo "Baza de date nu a putut fi creata deoarece : " . mysql_error();
// va aparea mesajul "Baza de date nu a putut fi creata deoarece : eroare"
}
mysql_close($con);
?>

Acesta este modul de creare a unei baze de date manual (scriem un script care creaza doar o singura baza de date) pentru a crea mai multe baze de date automat, folosim urmatorul script format dintr-o parte html si una php:

_________________________

Codul html va arata in felul urmator, sa-i zicem make_db.php:




// aici am definit actiunea form-ului ca fiind db_create.php unde db_create.php va fi numele scriptului nostru de mai jos
// deci datele din acest formular vor fi trimise prin metoda post catre un alt fisier numit db_create.php
Numele bazei de date:
// field-ul de introducere a datelor l-am denumit nume_db ca ulterior, in scriptul db_create.php sa definim o variabila ca avand valoarea intrdusa in acest camp.





___________________________

Formularul va arata in felul urmator:
Numele bazei de date:

Sa zicem de dragul tutorialului ca vom introduce valoarea "datele_mele" in acest camp.

____________________________

In momentul cand utilizatorul va da click pe butonul "Submit", datele vor pleca catre db_create.php care arata in felul urmator:

$conectare = mysql_connect("localhost","acidripp","1234567890");
$nume_db = $_POST['nume_db'];
// aici am definit variabila $nume_db care este egala cu valoarea introdusa in campul nume_db din formul html (mai multe despre cum sa folosim formulare/introducem date in php veti invata pe parcursul acestui tutorial)
if (!conectare)
{
die('Conexiunea la mysql nu a avut loc: ' . mysql_error());
}
if (mysql_query("CREATE DATABASE $nume_db";))
// in aceasta sintaxa, folosim modul automat (adica in loc sa scriem in scriptul php direct numele bazei de date) acesta este completat automat de catre variabila $nume_db
{
echo "Baza de date $nume_db a fost creata cu succes";
// daca baza de date a fost creata cu succes, vom primi mesajul "Baza de date datele_mele a fost creata cu succes" (unde datele_mele este string-ul introdus in formularul de creare a bazei html)
}
else
{
echo "Baza de date $nume_db nu a putut fi creata pentru ca: " . mysql_error();
// in cazul in care baza de date nu a putut fi creata, vom obtine un mesaj de genul "Baza de date datele_mele nu a putut fi creata pentru ca: eroare" (unde datele_mele este string-ul introdus in formularul de creare a bazei html)
}
mysql_close($conectare);
?>

___________________________

Crearea unui tabel
Functia CREATE TABLE este folosita pentru a crea un nou tabel intr-o baza de date MySQL.

Sintaxa:
CREATE TABLE nume_tabel
(
nume_coloana1 data_type,
nume_coloana2 data_type,
nume_coloana3 data_type,
....
)

__________________________

In exemplul urmator, vom crea un tabel numit "Useri_forum", care va avea 3 coloane.
Numele coloanelor vor fi "Nickname", "Email" and "Numar_posturi":

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
if (mysql_query("CREATE DATABASE datele_mele",$con))
{
echo "Baza de date a fost creata cu succes";
}
else
{
echo "Baza de date nu a putut fi creata deoarece : " . mysql_error();
}
mysql_select_db("datele_mele", $con);
// functia mysql_select_db() ne permite sa selectam baza de date cu care dorim sa lucram
$sql = "CREATE TABLE Useri_forum
// prin variabila $sql am definit intreaga functie de crearea a tabelului din baza de date
// in acest moment am creat tabelul numit Useri_forum in baza de date datele_mele
(
Nickname varchar(15),
// aceasta este prima coloana numita Nickname care este de tipul varchar cu o lungime maxima de 15 caractere
Email varchar(50),
// aceasta este cea de-a doua coloana numita Email, tot de tipul varchar insa cu o lungime de 50 de caractere
Numar_posturi int
// aceasta este cea de-a treia si ultima coloana numita Numar_posturi care este de tipul int (integer) adica contine numai numere intregi
)";
mysql_query($sql,$con);
// acum scriptul va executa $sql, adica va urma toti pasii de mai sus (executa $sql prin conexiunea $con)
mysql_close($con);
// inchidem conexiunea $con
?>

_________________________

Important: Inainte de a crea un tabel, trebuie sa selectam obligatoriu o baza de date!

Nota: Cand creem un camp de tipul varchar, trebuie OBLIGATORIU sa specificam lungimea acestuia , ex: varchar(15).

_________________________

Numarul curent si functia AUTO INCREMENT
Fiecare camp de date trebuie sa aiba alocat un numar curent (ca in Excel de exemplu)

Numarul curent (primary key) este folosit pentru a identifica fiecare rand dintr-un tabel. Fiecare numar curent trebuie sa fie UNIC intr-un tabel. De asemenea acesta nu are voie sa fie gol deoarece baza de date foloseste aceasta intrare pentru a identifica intrarile din campurile respective.

In exemplul urmator campul nr_crt va fi folosit pentru a numeroata intrarile din baza de date.
Numarul curent este intotdeauna folosit pentru a identifica intrarile din baza de date si este adesea folosit cu functia AUTO_INCREMENT.
AUTO_INCREMENT creste automat valoarea campului de fiecare data cand sunt introduse date noi in baza de date.
Pentru a ne asigura ca, campul numarului curent nu este gol (null) folosim functia NOT NULL pe care o alocam campului respectiv.

Sintaxa:

$sql = "CREATE TABLE Useri_forum
(
nr_crt int NOT NULL AUTO_INCREMENT,
// creem coloana nr_crt de tipul int (numere intregi) care nu este gol (null) iar valoarea acestuia creste cu fiecare intrare noua (AUTO_INCREMENT)
PRIMARY KEY(nr_crt),
// setam campul nr_crt ca fiind numarul curent al tabelului (primary key)
Nickname varchar(15),
Email varchar(15),
Numar_posturi int
)";
mysql_query($sql,$con);

__________________________

Introducerea de date intr-un tabel
Functia INSERT INTO este folosita pentru a introduce date noi intr-un tabel al unei baze de date.

Sintaxa:
Putem scrie functia Insert Into in doua forme:.

Prima metoda nu specifica numele coloanelor unde vor fi introduse datele ci le introduce pe rand in ordinea coloanelor :

INSERT INTO nume_tabel
VALUES (valoarea1, valoarea2, valoarea3,...)

Cea de-a doua forma, defineste atat valorile ce urmeaza a fi introduse cat si coloanele in care sunt introduse:

INSERT INTO nume_tabel (nume_coloana1, nume_coloana2, nume_coloana3,...)
VALUES (valoarea1, valoarea2, valoarea3,...)

Pentru a executa aceste functii, va trebui sa folosim comanda mysql_query().

__________________________

Mai devreme in acest tutorial, am creat un tabel numit "Useri_forum", cu trei coloane numite: "Nickname", "Email" si "Numar_posturi".
Acum vom folosi acelasi tabel in exemplul urmator unde vom adauga doi useri noi:

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
mysql_select_db("datele_mele", $con);
// selectam baza de date si ne conectam la ea
mysql_query("INSERT INTO Useri_forum (Nickname, Email, Numar_posturi)
// introducem in tabelul Useri_forum date in coloanele Nickname, Email si Numar posturi
VALUES ('Kenpachi', 'k3npaci@rstcenter.com', '35')");
// datele pe care le introducem vor fi Nickname=Kenpachi Email=k3npaci@rstcenter.com si Numar_posturi=35
mysql_query("INSERT INTO Useri_forum (Nickname, Email, Numar_posturi)
// repetam operatia de mai sus pentru a introduce date noi facem acest lucru de cate ori avem nevoie
VALUES ('Nytro', 'nytro@yahoo.co.uk', '33')");
// introducem datele in coloane
mysql_close($con);
?>

__________________________

Introducerea de date dintr-un formular intr-o baza de date
Vom crea un formular html prin intermediul caruia vom introduce useri noi in baza de date:

Sa-i spunem add_user.php :




// formularul va trimite datele introduse catre insert.php care le va procesa
Nickname:
Email:
Numar_posturi:





Formularul va arata in felul urmator:
Nickname: Email: Numar_posturi:
Cand veti da click pe butonul submit, datele vor fi trimise catre "insert.php".

Scriptul "insert.php" se va conecta la baza de date si va citi datele introduse in formular prin variabila definita cu functia $_POST:

Mai jos avem codul pentru "insert.php":

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
mysql_select_db("datele_mele", $con);
// se conecteaza la baza de date
$sql="INSERT INTO Useri_forum (Nickname, Email, Numar_posturi)
// definim unde vrem sa introducem datele
VALUES
('$_POST[Nickname]','$_POST[Email]','$_POST[Numar_posturi]')";
// atribuim coloanei Nickname textul introdus in formular in caseta Nickname, etc... folosind functia $_POST
if (!mysql_query($sql,$con))
// daca avem o eroare (!)
{
die('Comanda anulata deoarece: ' . mysql_error());
// scriptul "moare" afisand sursa erorii
}
echo "au fost adaugati 1 utilizatori ";
// in cazul in care nu avem erori, scriptul va afisa un mesaj spunand ca am introdus un user nou
mysql_close($con)
// inchidem conexiunea
?>

____________________________

Afisarea datelor selectate dintr-un tabel (notiune pe care se bazeaza atacul de tip SQLi sau SQL injection)
Functia SELECT este folosita pentru a extrage date dintr-un tabel

Sintaxa:
SELECT nume_coloana(e)
FROM nume_tabel

_____________________________

In exemplul de mai jos vom afisa toate datele din tabelul "Useri_forum" (caracterul * (asterix) extrage toate datele dintr-un tabel):

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
mysql_select_db("datele_mele", $con);
// alegem baza de date
$result = mysql_query("SELECT * FROM Useri_forum");
// alegem sa extragem toate datele din tabelul Useri_forum
while($row = mysql_fetch_array($result))
// atat timp cat avem date de extras...
{
echo $row['Nickname'] . " " . $row['Email'];
// ...scriptul va afisa datele...
echo "
";
// ...fiecare set de date din tabel fiind afisat pe cate un rand nou
}
mysql_close($con);
?>

_____________________________

Exemplul de mai sus stocheaza datele din tabel in variabila $result

Variabila care intra intr-o bucla de afisare atat timp cat nu este nula (nu a terminat de afisat datele din tabel)

Scriptul acesta va trebui sa returneze urmatoarele:

Kenpachi k3npaci@rstcenter.com
Nytro nytro@yahoo.co.uk

_____________________________

Afisarea rezultatelor intr-un tabel html
Exemplul urmator este identic cu cel de sus, doar ca in loc sa le afiseze rand cu rand, le va afisa intr-un tabel

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}

mysql_select_db("datele_mele", $con);

$result = mysql_query("SELECT * FROM Useri_forum");

echo "



";
while($row = mysql_fetch_array($result))
{
echo "";
echo "";
echo "";
echo "";
}
echo "
Nickname Email
" . $row['Nickname'] . "" . $row['Email'] . "
";mysql_close($con);
?>

______________________________

Clauza WHERE (la SQLi este folosita pentru a afla datele unui anumit user)
Clauza WHERE este folosita sa extraga datele din tabel strict dupa anumite criterii

Sintaxa:
SELECT nume_coloana(e)
FROM nume_tabel
WHERE nume_coloana operator valoare

_____________________________

In exemplul urmator, vom incerca sa extragem din tabel doar datele utilizatorului Kenpachi:

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
mysql_select_db("datele_mele", $con);
$result = mysql_query("SELECT * FROM Useri_forum
// alegem toate datele (*) din tabelul Useri forum
WHERE Nickname='Kenpachi'");
// care corespund coloanei Nickname cu datele Kenpachi
while($row = mysql_fetch_array($result))
{
echo $row['Nickname'] . " " . $row['Email'];
echo "
";
// afisam rezultatul
}
?>

Rezultatul ar trebui sa arate in felul urmator:

Kenpachi k3npaci@rstcenter.com 35

Daca de exemplu, in loc de coloana "Numar_posturi" am avea o coloana cu parole, in loc de "35" am avea afisat hash-ul perolei aferente contului respectiv.
Sau relativ la exemplul nostru, putem afla sa zicem datele tuturor userilor care au 35 de posturi (sa zicem ca vrem celor cu 35 de posturi sa le trimitem un e-mail de felicitare, etc.)

______________________________

Ordonarea datelor afisate
ORDER BY keyword

Functia ORDER BY este folosita pentru a afisa datele in mod ordonat. Afisarea datelor se face ascendent (ASC) by default, daca dorim sa le afisam descendent (DESC) trebuie sa specificam acest lucru.

Sintaxa:
SELECT nume_coloana(e)
FROM nume_tabel
ORDER BY nume_coloana(e) ASC|DESC

_______________________________

In exemplul urmator, vom sorta userii din tabel dupa numarul de posturi:

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
mysql_select_db("datele_mele", $con);
$result = mysql_query("SELECT * FROM Useri_forum ORDER BY Numar_posturi");
// alegem sa afisam toate datele userilor ordonate dupa numarul de posturi
while($row = mysql_fetch_array($result))
{
echo $row['Nickname'];
echo " " . $row['Email'];
echo " " . $row['Numar_posturi'];
echo "
";
}
mysql_close($con);
?>

Rezultatul ar trebui sa fie urmatorul:

Nytro nytro@yahoo.co.uk 33
Kenpachi k3npaci@rstcenter.com 35

______________________________

Ordonarea dupa doua coloane
Ordonarea se poate face si dupa mai multe coloane, aceasta functie fiind folosita atunci cand sa zicem ca valoarea primei coloane este identica la 2 sau mai multe dintre intrarile din baza de date.

SELECT nume_coloana(e)
FROM nume_tabel
ORDER BY coloana1, coloana2

______________________________

Modificarea datelor intr-o baza de date
Functia UPDATE este folosita pentru a modifica intrarile dintr-o baza de date.

Sintaxa:
UPDATE nume_tabel
SET coloana1=valoarea1, coloana2=valoarea2,...
WHERE coloana_oarecare=valoarea_oarecare

Atentie: Observati folosirea comenzii WHERE, aceasta are rolul de a modifica DOAR coloana care are valoarea X, daca nu vom volosi aceasta functie, TOATE coloanele din tabel vor fi modificate

_______________________________

Pana acum, tabelul nostru Useri_forum arata in felul urmator:

Nickname Email Numar_posturi
Kenpachi k3npaci@rstcenter.com 35
Nytro nytro@yahoo.co.uk 33

In exemplul urmator, vom incerca sa modificam anumite valori:

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
mysql_select_db("datele_mele", $con);
mysql_query("UPDATE Useri_forum SET Numar_posturi = '36'
// alegem sa mofificam valoarea coloanei "Numar_posturi" la 36
WHERE Nickname = 'Kenpachi' AND Email = 'k3npaci@rstcenter.com'");
// DOAR pentru utilizatorul Kenpachi care are adresa de mail k3npaci@rstcenter.com
mysql_close($con);
?>

Dupa ce vom rula acest script, tabelul nostru va arata in felul urmator:

Nickname Email Numar_posturi
Kenpachi k3npaci@rstcenter.com 36
Nytro nytro@yahoo.co.uk 33

______________________________

Stergerea datelor dintr-o baza de date
Functia DELETE FROM.

Sintaxa:
DELETE FROM nume_tabel
WHERE coloana_oarecare = valoarea_oarecare

Atentie: Observati folosirea comenzii WHERE, aceasta are rolul de a modifica DOAR coloana care are valoarea X, daca nu vom volosi aceasta functie, TOATE coloanele din tabel vor fi modificate

_____________________________

Tabelul nostru arata in felul urmator:

Nickname Email Numar_posturi
Kenpachi k3npaci@rstcenter.com 35
Nytro nytro@yahoo.co.uk 33

In exemplul urmator, vom sterge toate intrarile care corespund coloanei Email si au valoarea k3npaci@rstcenter.com

$con = mysql_connect("localhost","acidripp","1234567890");
if (!$con)
{
die('Nu m-am putut conecta pentru ca : ' . mysql_error());
}
mysql_select_db("datele_mele", $con);
mysql_query("DELETE FROM Useri_forum WHERE Email='k3npaci@rstcenter.com'");
// sterge din tabelul Useri_forum toate datele de pe randul in care coloana Email are valoarea k3npaci@blogspot.com
mysql_close($con);
?>

Dupa rularea scriptului, tabelul nostru va arata in felul urmator:

Niciun comentariu: