Curs PHP-MySQL

Preluare date din formular si adaugare in baza de date MySQL

Formularele HTML se folosesc in general pentru ca utilizatorii unui site sa poata transmite comentarii si diferite date personale la server, care de obicei sunt inregistrate si stocate intr-o baza de date.
In acest tutorial este prezentat modul de preluare a datelor dintr-un formular cu diferite campuri si adaugarea acestora intr-un tabel MySQL.
Etapele sunt urmatoarele:

  • 1. Trebuie sa fie creat tabelul MySQL cu, coloanele in care sa fie adaugate datele din formular.
  • 2. Se verifica daca sunt primite date de la formular.
  • 3. Daca sunt primite, se filtreaza de posibile spatii exterioare si tag-uri.
  • 4. Se verifica daca au fost completate toate campurile din formular, in caz contrar se defineste mesaj de eroare pt. fiecare.
  • 5. Daca sunt completate toate campurile, se preia valorile din ele si apoi se filtreaza cu "mysql_real_escape_string()".
  • 6. Ultimul pas, executarea unei comenzi SQL INSERT pt. adaugarea datelor in tabelul MySQL.
- Alte explicatii sunt in codul scriptului.

Sunt necesare 3 fisiere:
  • conn.php - Contine datele pt. conectare la MySQL si selectarea bazei de date
  • make_table.php - Contine codul pt. crearea tabelului MySQL
  • adauga.php - Codul PHP pt. formular, preia datele din el si le adauga in baza de date.
- Iata codul PHP pentru fiecare fisier:

Cod conn.php

<?php
// Datele pt. conectare la serverul si baza de date MySQL
$host = 'localhost';         // Serverul MySQL
$utilizator = 'user';         // Utilizator pt. server
$parola = 'pass';         // Parola utilizator
$numebd = 'nume_bd';         // Numele bazei de date

// Conectarea la server
$conn = mysql_connect($host, $utilizator, $parola);
if (!$conn) { echo '<h4>Conectare nereusita la MySQL</h4>'; }

// Selectarea bazei de date
if (!mysql_select_db($numebd, $conn)) { echo '<h4>Baza de date nu a putut fi selectata deoarece : '. mysql_errno(). ' : '. mysql_error().'</h4>'; }

mysql_set_charset('utf8', $conn);         // Setarea pt. lucru cu format UTF-8
?>

Cod make_table.php

<?php
include('conn.php');         // Include fisierul pt. conectare-selectare baza de date

// Creaza tabelul membri, avand coloanele id, nume, email, studii, stare_c
$sql = "CREATE TABLE `membri` (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, nume varchar(42), email varchar(55), studii varchar(20), stare_c varchar(11)) CHARACTER SET utf8 COLLATE utf8_general_ci";
if (mysql_query($sql, $conn)) echo '<h4>Tabelul <u>membri</u> a fost creat.</h4>';
else echo 'h4>Tabelul <u>membri</u> nu a putut fi creat deoarece - '. mysql_errno(). ' : '. mysql_error(). '</h4>';

mysql_close($conn);
?>

Cod adauga.php

<?php
// Se defineste un Header pt. a utiliza setul de caractere cu format UTF-8
header('Content-type: text/html; charset=utf-8');

$mesaj = '';          // Variabila folosita pt. mesajul ce va fi afisat pt. utilizator

// Se verifica daca sunt primite datele de la formular
if (isset($_POST['nume']) && isset($_POST['email']) && isset($_POST['studii'])) {
  // Se filtreaza datele pt. eliminare posibile spatii exterioare si tag-uri
  $_POST = array_map("trim", $_POST);
  $_POST = array_map("strip_tags", $_POST);

  // Se verifica daca "magic_quotes_gpc()" este setat ON
  // Daca e ON, se aplica stripslashes() pentru a nu se adauga de 2 ori '\' cand va fi aplicat "mysql_real_escape_string()"
  if(get_magic_quotes_gpc()) { $_POST = array_map("stripslashes", $_POST); }

  // Se verifica daca au fost completate corect toate campurile
  // Daca au fost completate le preia in variabile, in caz contrar seteaza o variabila tip Array cu mesaj de eroare

  // Verifica daca Numele are cel putin 3 caractere si maxim 40
  if(strlen($_POST['nume'])>2 && strlen($_POST['nume'])<41) $nume = $_POST['nume'];
  else $eroare[] = 'Caseta cu Nume si Prenume trebuie sa contina intre 3 si 40 caractere';

  // Verifica daca adresa de e-mail scrisa corespunde formatului unei adrese de e-mail
  if(preg_match('/^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4})$/', $_POST['email'])) $email = $_POST['email'];
  else $eroare[] = 'Completati corect adresa de e-mail';

  // Verifica daca a fost selectata o valoare pt. 'studii'
  if(strlen($_POST['studii'])>2) $studii = $_POST['studii'];
  else $eroare[] = 'Selectati "Ultimile Studii"';

  // Verifica daca a fost bifat buton pt. 'stare civila'
  if(isset($_POST['stare_c']) && strlen($_POST['stare_c'])>2) $stare_c = $_POST['stare_c'];
  else $eroare[] = 'Selectati butonul corespunzator pentru "Stare civila"';

  // Daca nu exista nici un mesaj de eroare, filreaza datele cu mysql_real_escape_string() si le adauga in baza de date
  // Altfel, in cazul vreunei erori, adauga in variabila $mesaj
  if (!isset($eroare)) {
    include('conn.php');         // Include fisierul pt. conectare-selectare baza de dat

    // Se aplica functia de filtrare mysql_real_escape_string()
    $nume = mysql_real_escape_string($nume);
    $email = mysql_real_escape_string($email);
    $studii = mysql_real_escape_string($studii);
    $stare_c = mysql_real_escape_string($stare_c);

	
    // Acum se adauga mai in siguranta aceste date in MySQL
    $sql = "INSERT INTO `membri` (`nume`, `email`, `studii`, `stare_c`) VALUES ('$nume', '$email', '$studii', '$stare_c')";
	if (mysql_query($sql, $conn)) {
	  $mesaj = '<font color="blue">Datele au fost adaugate</font>';
	  $nume = '';  $email = '';
	}
    else $mesaj = '<font color="red">Datele nu au putut fi adaugate '. mysql_error(). '</font>';

	mysql_close($conn);
  }
  else $mesaj = '<font color="red">'. implode('<br />', $eroare). '</font>';
}

echo $mesaj;
?>

<form action="" method="post">
 Nume si Prenume: <input type="text" name="nume" id="nume" value="<?php if(isset($nume)) echo $nume; ?>" /><br />
 Adresa E-mail: <input type="text" name="email" id="email" value="<?php if(isset($email)) echo $email; ?>" /><br />
 Ultimile studii: <select name="studii" id="studii">
  <option value="">---</option>
  <option value="scoala_generala">Scoala generala</option>
  <option value="liceu">Liceu</option>
  <option value="post_liceala">Post liceala</option>
  <option value="colegiu">Colegiu</option>
  <option value="facultate">Facultate</option>
 </select><br />
 Stare civila: <input type="radio" name="stare_c" id="stare_c1" value="necasatorit/a" /> Necasatorit/a
   <input type="radio" name="stare_c" id="stare_c2" value="casatorit/a" /> Casatorit/a<br />
   <input type="submit" name="submit" id="submit" value="Trimite" />
</form>
- Formularul folosit la acest script este cel de mai jos. Puteti testa sa vedeti cum functioneaza
Nume si Prenume:
Adresa E-mail:
Ultimile studii:
Stare civila: Necasatorit/a Casatorit/a

Acest tutorial arata doar modul de preluare, verificare si adaugare a datelor dintr-un formular HTML intr-un tabel MySQL. Pentru a nu fi adaugate date prea multe, una dupa alta, sau cu Refresh, se poate seta o Sesiune cu timpul UNIX dupa ce au fost adaugate datele in MySQL, iar acea sesiune sa fie verificata inainte de a prelua date din formular.
Sau, alta metoda, imediat dupa ce datele au fost adaugate in tabel se poate face un redirect catre alta pagina, cu formula:
                header('Location: url_adresa_pagina');

Lectii / Tutoriale

Diverse PHP

Preluare date din formular si adaugare in MySQL - Tutoriale PHP
2008 - 2012 Webmaster, Webdesigner : MarPlo