PHP MySQL - INSERT INTO

Dupa ce o baza de date si tabelele ei au fost create, puteti sa adaugati informatii in ele.
Cateva reguli de sintaxa:

Introducere date in tabel MySQL

Pentru a adauga inregistrari noi intr-un tabel MySQL, se foloseste comanda INSERT INTO.
Exista doua metode prin care o interogare INSERT poate fi scrisa:
1) Prima metoda nu specifica numele coloanelor unde datele for fi introduse, ci doar valorile lor.
  - Sintaxa:
INSERT INTO nume_tabel
VALUES (valoare1, valoare2, valoare3, ...)
In aceasta metoda, trebuie sa specificati o valoare pentru fiecare coloana, chiar daca este NULL. Daca sunt cinci coloane in tabel, trebuie sa adaugati cinci valori, separate prin virgula.

2) Pentru a doua metoda se specifica atat numele coloanei /coloanelor cat si valorile care vor fi intoduse:
  - Sintaxa:
INSERT INTO nume_tabel (coloana1, coloana2, coloana3,...)
VALUES (valoare1, valoare2, valoare3,...)
Aceasta este in general metoda preferata, deoarece puteti adauga doar coloanele care vor primi valori. Orice coloana caruia nu ii este atribuita o valoare va fi tratata ca NULL (sau ii va fi data valoarea default, daca aceasta este definita).
Daca o coloana nu poate avea valoarea NULL (a fost definita ca NOT NULL) si nu are o valoare default, nespecificand o valoare va genera eroare.
Daca o coloana este AUTO_INCREMENT sau TIMESTAMP, nu este nevoie sa fie specificata in interogarea SQL, serverul MySQL va seta si adauga valoarea automat.
Pentru ca PHP sa execute comenzile SQL, trebuie sa folosesti metoda mysqli query() .

- Urmatorul exemplu adauga o noua inregistrare in tabelul "users" . Acest exemplu foloseste tabelul "users" creat in lectia anterioara, cu cinci coloane (id , name , pass , email si reg_date).
Campul "id" este AUTO_INCREMENT, deci nu trebuie specificat in interogarea SQL, serverul MySQL va adauga automat valoare pentru el. La fel si pentru "reg_date", care este setat TIMESTAMP.
<?php
// conectare la baza de date "tests" 
$conn = new mysqli('localhost', 'root', 'pass', 'tests');

// verifica conexiunea
if (mysqli_connect_errno()) {
  exit('Connect failed: '. mysqli_connect_error());
}

// interogare sql pentru users INSERT INTO 
$sql = "INSERT INTO `users` (`name`, `pass`, `email`)
VALUES ('Marius', 'faith', 'name@domain.net')"; 

// Trimite interogarea $sql la MySQL pentru a introduce valorile
if ($conn->query($sql) === TRUE) {
  echo 'Datele au fost adaugate';
}
else {
 echo 'Error: '. $conn->error;
}

$conn->close();
?>
- Mai intai se creaza instanta de obiect mysql cu identificatorul de variabila $conn. Apoi, se defineste sirul cu instructiunea SQL, salvat intr-o variabila numita $sql. Apoi se apeleaza metoda query() , si in acelasi timp se verifica valoarea returnata pentru a determina daca datele au fost adaugate.
Exemplul de mai sus adauga un rand in tabelul "users", cu valoarea "Marius" in coloana "name", valoarea "faith" in campul "pass", si "name@domain.net" pentru "email". Valorile pentru celelalte coloane ("id" si "reg_date") sunt adaugate automat de serverul MySQL.

MySQL permite INSERT cu mai multor randuri in acelasi timp, separate prin virgula.
  - Sintaxa:
INSERT INTO nume_tabel (coloana1, coloana2, coloana3,...)
VALUES (valoareA1, valoareA2, valoareA3,...),
(valoareB1, valoareB2, valoareB3,...),
(valoareC1, valoareC2, valoareC3,...)

Exemplu urmator adauga doua noi randuri in tabelul "users", cu o singura interogare.
<?php
// conectare la baza de date "tests" 
$conn = new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea
if (mysqli_connect_errno()) {
  exit('Connect failed: '. mysqli_connect_error());
}

// interogare sql pentru users, INSERT INTO (doua randuri)
$sql = "INSERT INTO `users` (`name`, `pass`, `email`)
 VALUES ('MarPlo', 'peace', 'user@domain.net'),
 ('I_AM', 'love', 'address@domain.net')"; 

// Trimite interogarea $sql la MySQL pentru a introduce valorile
if ($conn->query($sql) === TRUE) {
  echo 'Datele au fost adaugate';
}
else {
 echo 'Error: '. $conn->error;
}

$conn->close();
?>

Obtinere ID, auto generat de INSERT

Daca aveti un tabel cu o coloana AUTO_INCREMENT care stocheaza un id numeric, puteti folosi metoda insert_id() a obiectului mysqli pentru a prelua ID-ul generat in ultima operatiune INSERT.
  - Exemplu:
<?php
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', 'pass', 'tests');

// verifica conexiunea
if (mysqli_connect_errno()) {
  exit('Connect failed: '. mysqli_connect_error());
}

// interogare sql pentru users, INSERT INTO 
$sql = "INSERT INTO `users` (`name`, `pass`, `email`)
 VALUES ('PloMar ', 'love_light', 'a_name@domain.net')"; 

// Executa interogarea $sql pentru a prelua ID auto-generat
if ($conn->query($sql) === TRUE) {
  echo 'ID-ul este: '. $conn->insert_id;
}
else {
 echo 'Error: '. $conn->error;
}

$conn->close();
?>
Returneaza:
ID-ul este 4

Daca tabelul nu are o coloana cu atributul AUTO_INCREMENT sau daca interogarea nu este o comanda INSERT sau UPDATE, insert_id() va returna zero.

Adaugare date din formular in baza de date

Formularele HTML sunt de obicei folosite pentru a trimite date la un script pe server. Aceste date pot fi adaugate si intr-o baza de date.
Pentru a introduce date dintr-un formular intr-o baza de date MySQL, trebuie creat un formular HTML si un script PHP care receptioneaza date din formular.

Exemplu de formular HTML si un script PHP care poate fi folosit pentru a adauga valorile din formular in tabelul "users".

Formularul HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
 <title>Formular HTML pentru insert users</title>
</head>
<body>

<form action="insert.php" method="post">
 Name: <input type="text" name="name" /><br />
 Password: <input type="text" name="pass" /><br />
 E-mail: <input type="text" name="email" /><br />
 <input type="submit" valoare="Trimite" />
</form>

</body>
</html>
Cand un utilizator apasa pe butonul "Trimite", datele din formular sunt trimise la scriptul din fisierul "insert.php".
Fisierul "insert.php":
  - preia valorile din formular cu variabila $_POST,
  - filtreaza aceste valori cu functii strip_tags() si trim() (pentru a sterge posibile tag-uri si spatii goale de la inceput si sfarsit),
  - foloseste un tipar RegExp si functia preg_match() pentru a verifica daca valoarea de la "email" e o adresa de email corecta,
  - daca toate datele sunt corecte, se face conectarea la o baza de date (cu instanta mysqli), stocheaza valorile intr-un Array asociativ ($adds), si le filtreaza cu metoda mysqli_real_escape_string(),
  - seteaza comanda INSERT INTO , apoi, metoda query() trimite interogarea SQL la serverul MySQL si o noua inregistrare va fi adaugata in tabelul "users".

Cod PHP in pagina "insert.php"

<?php
$erors = array();                      // seteaza un array gol care va contine erorile
$regexp_mail = '/^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4})$/';         // RegExp pt adresa de e-mail 

// Verifica daca sunt primite date din formular
if (isset($_POST['name']) && isset($_POST['pass']) && isset($_POST['email'])) {
  // sterge tag-urile si spatiile goale de la inceputul si sfarsitul valorilor
  $_POST = array_map("strip_tags", $_POST);
  $_POST = array_map("trim", $_POST);

  // verifica daca toate campurile din formular sunt completate corect
  // (adresa de email si numarul minim de caractere din "name" si "pass")
  if (!preg_match($regexp_mail, $_POST['email'])) $erors[] = 'Adresa de e-mail incorecta';
  if (strlen($_POST['name'])<3) $erors[] = 'Numele trebuie sa contina minim 3 caracte';
  if (strlen($_POST['pass'])<6) $erors[] = 'Parola trebuie sa contina minim 6 caracte';

  // daca nu sunt erori ($error array gol)
  if(count($erors)<1) {
    // conecteaza la baza de date "tests"
    $conn = new mysqli('localhost', 'root', '', 'tests');

    // verifica conexiunea
    if (mysqli_connect_errno()) {
      exit('Connect failed: '. mysqli_connect_error());
    }

    // stocheaza valorile intr-un Array, filtrand caracterele speciale pt. a fi folosite in comanda SQL
    $adds['name'] = $conn->real_escape_string($_POST['name']);
    $adds['pass'] = $conn->real_escape_string($_POST['pass']);
    $adds['email'] = $conn->real_escape_string($_POST['email']);

    // interogarea SQL pentru userr, INSERT INTO
    $sql = "INSERT INTO `users` (`name`, `pass`, `email`) VALUES ('". $adds['name']. "', '". $adds['pass']. "', '". $adds['email']. "')"; 

    // Trimite interogarea $sql la MySQL pentru a introduce valorile
    if ($conn->query($sql) === TRUE) {
      echo 'Datele au fost adaugate';
    }
    else {
      echo 'Error: '. $conn->error;
    }

    $conn->close();
  }
  else {
    // altfel, daca au aparut erori erori, le adauga intr-un sir si le printeaza
    echo implode('<br />', $erors);
  }
}
else {
  echo 'Nu sunt date de la formular';
}
?>
PHP MySQL - utilizare ... <<-- Anterior ----------- Urmator -->> PHP MySQL - SELECT, ...

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag se foloseste in <table> pentru a crea celula de tip "header"?
<thead> <th> <td>
<table><tr>
  <th>Title 1</th>
  <th>Title 2</th>
</tr></table>
Ce proprietate CSS seteaza distanta dintre randuri?
line-height word-spacing margin
.some_class {
  line-height: 150%;
}
Care functie deschide o noua fereastra.
alert() confirm() open()
document.getElementById("id_button").onclick = function(){
  window.open("http://coursesweb.net/");
}
Indicati functia PHP care returneaza un array cu numele fisierelor si directoarelor dintr-un director.
mkdir() scandir() readdir()
$ar_dir = scandir("dir_name");
var_export($ar_dir);
Care din urmatoarele forme a verbului "sleep" (a dormi) se foloseste pentru viitor?
sleeping slept will sleep
He will sleep there.
- El va dormi acolo.
Care din urmatoarele forme a verbului "dormir" (a dormi) se foloseste pentru viitor?
dormido dormirá durmiendo
Él dormirá allí.
- El va dormi acolo.
PHP MySQL - INSERT INTO - Tutorial PHP