[Tutorial PHP]Adaugarea datelor in tabele MySQL
Scris: Mie Noi 27, 2013 10:07 am
Nume Tutorial:Adaugarea datelor in tabele MySQL
Descriere:Protectii la adaugarea datelor intr-o baza de date
Download:
Autor:
Sursa (Link-ul oficial): Propria parere:Nu l-am incercat.
Tutorialul:
Cand doriti sa adaugati date intr-un tabel MySQL (cu INSERT sau UPDATE) care sunt primite de exemplu dintr-un formular HTML sau prin adresa URL, pe care le preluati prin "$_POST" sau "$_GET", inainte de a le adauga in baza de date este indicat sa le "prelucrati", sa va asigurati ca nu vor fi introduse date care pot fi folosite pentru atacuri gen "SQL injection".
Pentru aceasta puteti folosi unele din urmatoarele filtre pentru a face datele sigure inainte de a ajunge la MySQL:
magic_quotes_gcp() - (poate fi setat ON din "php.ini") adauga caracterul "\" inaintea ghilimelelor simple sau duble
addslashes() - o functie PHP care adauga caracterul "\" inaintea ghilimelelor simple sau duble
mysql_real_escape_string() - adauga caracterul "\" inaintea caracterelor speciale: NULL, \n, \r, \, ', ", \x00 si \x1a
htmlentities() - transforma caractere HTML in entitati ale acestora (de ex.: > devine > , ghilimelele duble " devin ")
In continuare sunt prezentate trei exemple din care sa intelegeti cum se folosesc aceste functii.
Vom presupune ca folosim datele trimise dintr-un formular HTML, pentru "nume" si "e-mail".
- Cititi comentariile din coduri.
1. Exemplu cu addslashes()
2. Exemplu cu mysql_real_escape_string()
- Pentru a avea exemple variate, aici folosim o interogare pentru UPDATE
- Cand folositi addslashes() sau mysql_real_escape_string() la adaugarea datelor, pentru citirea lor folositi functia inversa stripslashes() - aceasta anuleaza caracterele "\" care au fost adaugate.
Iata un exemplu:
3. Exemplu cu htmlentities()
- Cand doriti sa adaugati cod HTML intr-un tabel MySQL, pentru siguranta puteti folosi "htmlentities()".
- In baza de date va fi adaugat urmatorul sir:
<a href="http://www.marplo.net/php-mysql" title="Curs PHP-MySQL">PHP-MySQL</a>'
- Pentru a citi si returna corect datele care a fost adaugate in tabelul MySQL folosind "htmlentities()", aplicati functia inversa acesteia, html_entity_decode().
Iata un exemplu:
[/b]
Descriere:Protectii la adaugarea datelor intr-o baza de date
Download:
Autor:
Sursa (Link-ul oficial): Propria parere:Nu l-am incercat.
Tutorialul:
Cand doriti sa adaugati date intr-un tabel MySQL (cu INSERT sau UPDATE) care sunt primite de exemplu dintr-un formular HTML sau prin adresa URL, pe care le preluati prin "$_POST" sau "$_GET", inainte de a le adauga in baza de date este indicat sa le "prelucrati", sa va asigurati ca nu vor fi introduse date care pot fi folosite pentru atacuri gen "SQL injection".
Pentru aceasta puteti folosi unele din urmatoarele filtre pentru a face datele sigure inainte de a ajunge la MySQL:
magic_quotes_gcp() - (poate fi setat ON din "php.ini") adauga caracterul "\" inaintea ghilimelelor simple sau duble
addslashes() - o functie PHP care adauga caracterul "\" inaintea ghilimelelor simple sau duble
mysql_real_escape_string() - adauga caracterul "\" inaintea caracterelor speciale: NULL, \n, \r, \, ', ", \x00 si \x1a
htmlentities() - transforma caractere HTML in entitati ale acestora (de ex.: > devine > , ghilimelele duble " devin ")
In continuare sunt prezentate trei exemple din care sa intelegeti cum se folosesc aceste functii.
Vom presupune ca folosim datele trimise dintr-un formular HTML, pentru "nume" si "e-mail".
- Cititi comentariile din coduri.
1. Exemplu cu addslashes()
Cod: Selectaţi tot
<?php
// Intai faceti conectarea la MySQL si selectarea bazei de date
// Daca sunt trimise datele pt. 'nume' si 'e-mail' din formular
if (isset($_POST['nume']) && isset($_POST['email'])) {
$nume = $_POST['nume'];
$email = $_POST['email'];
// Se verifica daca "magic_quotes_gpc()" nu este setat ON
// Daca nu e ON, se filtreaza variabilele cu addslashes()
if(!get_magic_quotes_gpc()) {
$nume = addslashes($nume);
$email = addslashes($email);
}
// Acum se adauga mai in siguranta aceste date in MySQL
$sql = "INSERT INTO `nume_tabel` (col_nume, col_email) VALUES ('$nume', '$email')";
// Se executa interogarea, daca returneaza FALSE afisaza cauza erorii, altfel, afiseaza confirmarea
if (!mysql_query($sql)) {
echo 'Eroare : '. mysql_errno(). ' - '. mysql_error();
}
else {
echo 'Datele au fost adaugate';
}
}
@mysql_close();
?>2. Exemplu cu mysql_real_escape_string()
- Pentru a avea exemple variate, aici folosim o interogare pentru UPDATE
Cod: Selectaţi tot
<?php
// Intai faceti conectarea la MySQL si selectarea bazei de date
// Daca sunt trimise datele pt. 'nume' si 'e-mail' din formular
if (isset($_POST['nume']) && isset($_POST['email'])) {
// Se verifica daca "magic_quotes_gpc()" este setat ON
// Daca e ON, se aplica stripslashes() pentru a nu se adauga de 2 ori "\"
if(get_magic_quotes_gpc()) {
$_POST['nume'] = stripslashes($_POST['nume']);
$_POST['email'] = stripslashes($_POST['email']);
}
// Se adauga valorile filtrate cu mysql_real_escape_string() in variabile
$nume = mysql_real_escape_string($_POST['nume']);
$email = mysql_real_escape_string($_POST['email']);
// Acum se adauga mai in siguranta aceste date in MySQL
// Conditia WHERE `id`=1 e foloseta pt. a face update exact in randul unde vrem, aici cel cu id=1
$sql = "UPDATE `nume_tabel` SET `col_nume`='$nume', `col_email`='$email' WHERE `id`=1";
// Se executa interogarea, daca returneaza FALSE afisaza cauza erorii, altfel, afiseaza confirmarea
if (!mysql_query($sql)) {
echo 'Eroare : '. mysql_errno(). ' - '. mysql_error();
}
else {
echo 'Datele au fost modificate';
}
}
@mysql_close();
?>- Cand folositi addslashes() sau mysql_real_escape_string() la adaugarea datelor, pentru citirea lor folositi functia inversa stripslashes() - aceasta anuleaza caracterele "\" care au fost adaugate.
Iata un exemplu:
Cod: Selectaţi tot
<?php
// Intai faceti conectarea la MySQL si selectarea bazei de date
$sql = "SELECT `col_nume`, `col_email` FROM `nume_tabel`";
$rezultat = mysql_query($sql) or trigger_error(E_USER_ERROR);
if (mysql_num_rows($rezultat) == 0) {
echo '0 rezultate';
}
else {
while ($rand = mysql_fetch_assoc($rezultat)) {
// Elimina caracterele "\" care au fost adaugate de "addslashes()" sau "mysql_real_escape_string()"
$nume = stripslashes($rand['col_nume']);
$email = stripslashes($rand['col_email']);
echo '<br />'. $nume. ' - '. $email;
}
}
@mysql_close();
?>3. Exemplu cu htmlentities()
- Cand doriti sa adaugati cod HTML intr-un tabel MySQL, pentru siguranta puteti folosi "htmlentities()".
Cod: Selectaţi tot
<?php
// Intai faceti conectarea la MySQL si selectarea bazei de date
// Variabila care contine codul HTML pe care dorim sa-l adaugam in tabelul MySQL
$sir = '<a href="http://www.marplo.net/php-mysql" title="Curs PHP-MySQL">PHP-MySQL</a>';
// Se convertesc cu htmlentities() caracterele specifice HTML
$sir = htmlentities($sir);
// Acum se pot adauga datele in MySQL
$sql = "INSERT INTO `nume_tabel` (col_html) VALUES ('$sir')";
// Se executa interogarea, daca returneaza FALSE afisaza cauza erorii, altfel, afiseaza confirmarea
if (!mysql_query($sql)) {
echo 'Eroare : '. mysql_errno(). ' - '. mysql_error();
}
else {
echo 'Datele au fost adaugate';
}
@mysql_close();
?><a href="http://www.marplo.net/php-mysql" title="Curs PHP-MySQL">PHP-MySQL</a>'
- Pentru a citi si returna corect datele care a fost adaugate in tabelul MySQL folosind "htmlentities()", aplicati functia inversa acesteia, html_entity_decode().
Iata un exemplu:
Cod: Selectaţi tot
<?php
// Intai faceti conectarea la MySQL si selectarea bazei de date
$sql = "SELECT `col_html` FROM `nume_tabel`";
$rezultat = mysql_query($sql) or trigger_error(E_USER_ERROR);
if (mysql_num_rows($rezultat) == 0) {
echo '0 rezultate';
}
else {
while ($rand = mysql_fetch_assoc($rezultat)) {
// Se transforma in caractere pt. HTML entitatile acestora, convertite de "htmlentities()"
$codhtml = html_entity_decode($rand['col_html']);
echo $codhtml;
}
@mysql_close();
?>