Introducem datele utilizatorului în baza de date MySql. Interogare SQL pentru adăugarea și ștergerea înregistrărilor Adăugarea de date printr-un formular în mysql

Acasă / Tehnologii

Și dat
. Acum vom vorbi despre cum adăugați imagini la baza de date MySQL prin formular folosind PHP.

Crearea unui câmp în baza de date MySQL pentru a adăuga o imagine

Pentru început, vreau să spun că pentru stocarea imaginilor într-o bază de date MySQL Este necesar să definiți unul dintre câmpurile tabelului ca derivat al tipului BLOB.

Abrevierea BLOB înseamnă obiect binar mare. Tipul de stocare a datelor BLOB are mai multe opțiuni:

  • TINYBLOB - Poate stoca până la 255 de octeți
  • BLOB poate stoca până la 64 de kiloocteți de informații
  • MEDIUMBLOB - până la 16 megaocteți
  • LONGBLOB până la 4 gigaocteți

Pentru stocarea unui fișier imagine într-o bază de date trebuie să citiți fișierul într-o variabilă și să creați o interogare pentru a adăuga date la tabel.

Pregătirea unui formular pe pagină pentru a adăuga o imagine la baza de date MySQL

În cazul meu, sarcina a fost adăugați două imagini la baza de date printr-un formular folosind PHP. Avem un formular cu două câmpuri și un buton de trimitere:

nume formular=”form1″ metoda=”post” acțiune=”add_image.php”
enctype="multipart/form-data"

Permiteți-mi să vă reamintesc că atributul acţiune specifică fișierul care va face încărcarea fișierelor de imagine. Atribut enctype indică modul în care este codificat conținutul formularului și informațiile despre încărcarea fișierelor. Vedeți cum să completați corect atributul enctype pentru a evita .

Nota: suportul pentru încărcarea mai multor fișiere a fost introdus în versiunea 3.0.10.

Scrierea codului PHP pentru a salva o imagine într-o bază de date MySQL

Deoarece trimitem două fișiere în atribut nume după cuvânt indicăm „userfile” cu paranteze pătrate, prin aceasta clarificăm că trimitem mai multe fișiere folosind o matrice care conține atributele fișierului:

$_FILES['userfile']['name']

Numele fișierului original de pe computerul client.

$_FILES['userfile']['type']

Tipul mime al fișierului, dacă browser-ul a furnizat aceste informații.
Exemplu: „imagine/gif” .

$_FILES['userfile']['size']

$_FILES['userfile']['tmp_name']

Numele fișierului temporar sub care fișierul descărcat a fost salvat pe server.

Cum să obțineți valorile fiecărui fișier?

De exemplu, să presupunem că sunt trimise fișierele numite /home/test/1.jpg și /home/test/2.jpg.

În acest caz, $_FILES[‘userfile’][‘nume’]
va conține valoarea 1.jpg,
și $_FILES[‘fișierul de utilizator’][‘nume’]
- valoarea 2.jpg

De asemenea, $_FILES[‘userfile’][‘size’] va conține valoarea de dimensiune a fișierului 1.jpg și așa mai departe. Acum să ne uităm la codul fișierului add_image.php, care a fost specificat în atributul form acţiune.

1024*1024||$image_size==0) ( $ErrorDescription="Fiecare imagine nu trebuie să depășească 1MB! Imaginea nu poate fi adăugată la baza de date."; returnează ""; ) // Dacă fișierul a sosit, verificați dacă graficul // it (din motive de securitate) if(substr($_FILES["userfile"]["type"][$num], 0, 5)=="image") ( //Citiți conținutul fișierului $image=file_get_contents($_FILES ["userfile"]["tmp_name"][$num] //Escape caractere speciale din conținutul fișierului $image=mysql_escape_string($image )else( ErrorDescription=; "Nu ați încărcat o imagine, deci nu poate fi adăugată." return "" ) )else( $ErrorDescription="Nu ați încărcat o imagine, câmpul este gol, deci fișierul nu poate fi adăugat în baza de date; ."; return ; ) return $imagine; ) ?>

Deci, în acest articol am vorbit despre cum să salvați o imagine într-o bază de date MySQL , folosind PHP.

Acest ghid vă va arăta cum să începeți să gestionați o bază de date de la dvs PHP scenariu. Vei studia adăugarea unei înregistrări la un tabel MySQL, folosind Cod PHP. Înainte de a începe, consultați celelalte tutoriale ale noastre care acoperă pașii de bază ai lucrului cu PHP și bazele de date - conectarea de la PHP la o bază de date MySQL.

Înainte de a începe, verificați următoarele:

  • Acces la panoul de control al găzduirii

Pasul 1 - Crearea unui tabel

În primul rând, trebuie să creăm un tabel pentru datele dvs. Aceasta este o procedură foarte simplă pe care o puteți face phpMyAdmin din panoul de control al găzduirii. Am acoperit deja procesul de creare a unei baze de date MySQL într-un tutorial anterior, așa că vom sări peste acea parte aici.

După ce vă conectați la pagina phpMyAdmin, veți vedea o imagine ca aceasta:

Să creăm un tabel cu numele Elevii pentru baza noastră de date u266072517_nume. Puteți crea un tabel nou folosind butonul Creați tabel. După asta vei vedea noua pagina unde puteți introduce toate datele necesare pentru tabelul dvs.:

Acesta este cel mai simplu mod de a crea un tabel, pentru mai multe informații despre structura tabelului/bazei de date și ce setări pot fi utilizate pentru fiecare câmp, vă rugăm să consultați documentația oficială phpMyAdmin.

Iată câteva explicații simple ale câmpurilor pe care le vom folosi:

  • Nume este numele câmpului dvs. Va apărea chiar în partea de sus a mesei dvs.
  • Tip– aici puteți seta tipul câmpului. De exemplu, alegem varchar pentru că aici trebuie să introducem un șir cu un nume (care are litere, nu cifre).
  • Lungime/Valori– folosit pentru a seta lungimea maximă a intrării dvs. în acest câmp.
  • Index– folosim indexul „Primar” pentru câmpul nostru „ID”. Când creați un tabel, se recomandă să aveți un câmp ID. Este folosit pentru a indexa înregistrările dintr-un tabel atunci când sunt configurate relații între tabele. Se mai poate remarca aici "A_I", ceea ce înseamnă Incrementare automată. Această setare va crește automat indicele (1,2,3,4...).

Clic Salvași tabelul tău va fi creat.

Pasul 2 - Creați cod PHP și adăugați o intrare la tabelul MySQL

Opțiunea 1 – Metoda MySQLi

În primul rând, trebuie să stabiliți o conexiune la baza de date, conform tutorialului nostru anterior. După aceasta, putem continua cu interogarea SQL pentru a adăuga o înregistrare la tabelul MySQL - INTRODUCE. Iată un exemplu de cod complet cu metoda de conectare și inserare:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Astfel, prima parte a codului (linii 3 – 18 ) se referă la partea de stabilire a conexiunii la baza de date. Nu vom trece prin această parte din nou, dacă doriți să știți ce înseamnă fiecare linie, consultați ghidul nostru anterior despre cum să vă conectați la o bază de date.

Să începem cu linia 19 :

$sql = "INSERT INTO Students (nume, prenume, e-mail) VALORI ("Thom", "Vial", " [email protected]")";

Aceasta este cea mai importantă linie de cod, face tot ce acoperim în acest tutorial - adăugarea unei înregistrări la un tabel MySQL din baza de date. INSERT INTO este o expresie care adaugă o înregistrare la tabelul de bază de date MySQL specificat. În exemplul nostru, adăugăm date la un tabel Elevii.

Mergând mai departe, în paranteze, definim câmpurile de tabel la care vom adăuga valori: (nume, prenume, e-mail). Datele vor fi adăugate într-o anumită ordine. Daca scriem (email, prenume, nume), valorile vor fi adăugate într-o ordine diferită.

Următoarea parte a sensului VALORI. Aici ne setăm valorile în câmpurile specificate anterior. Astfel, fiecare câmp va primi propria sa valoare. De exemplu, în cazul nostru ar fi ceva de genul: nume = Thom, prenume = Fiolă, e-mail = [email protected] .

Ceea ce este important de reținut este că aici ne formăm interogare SQL folosind cod PHP. Interogările SQL trebuie incluse între ghilimele. În exemplul nostru, totul dintre ghilimele și care vine după $sql = este o interogare SQL.

Următoarea parte a codului ( 20 – 22 linii) rulează cererea noastră și verifică succesul cererii:

Dacă (mysqli_query($conn, $sql)) ( echo „Înregistrare nouă creată cu succes”; )

Este afișat un mesaj de succes dacă interogarea a fost executată corect.

Și partea finală ( 22 – 24 linii) afișează un alt mesaj în cazul în care cererea noastră eșuează:

Altfel ( echo "Eroare: " . $sql . "
" . mysqli_error($conn); )

Acest cod ne arată un mesaj de eroare în cazul în care ceva nu a mers prost.

Opțiunea 2 – Metoda obiectului de date PHP (Object de date P HP)

Ca și în exemplul anterior, trebuie mai întâi să facem o conexiune la baza de date, care se face atunci când se creează un nou obiect PDO - tutorialul anterior vorbește despre cum se întâmplă acest lucru. Deoarece o conexiune la baza de date MySQL este un obiect PDO, trebuie să folosim diverse „metode” PDO (un fel de funcții care fac parte dintr-un obiect specific) pentru a pregăti și a rula interogarea. Metodele obiect sunt numite astfel:

$obiectul->Metoda();

PDO vă permite să „pregătiți” codul SQL înainte de a-l executa. Interogare SQL calculat și ajustat înainte de lansare. Aşa, atac simplu de injecție SQL se poate face prin completarea codului SQL într-un câmp de formular. De exemplu:

// Utilizatorul scrie acest lucru în câmpul nume de utilizator al unui formular de conectare thom"; DROP DATABASE user_table; // Interogarea finală devine aceasta „SELECT * FROM user_table WHERE username = thom"; DROP DATABASE user_table;

Deoarece codul SQL este corect din punct de vedere sintactic, punct și virgulă face DROP DATABASE user_table noua interogare SQL și tabelul de utilizatori este șters. Expresiile pregătite nu permit caractere Şi ; pentru a completa cererea inițială și instrucțiunea DROP BAZA DE DATE nu va fi niciodată executat.

Întotdeauna Utilizați interogări pregătite atunci când trimiteți sau primiți date dintr-o bază de date cu PDO.

Pentru a utiliza expresii pregătite, trebuie să creați o nouă variabilă care va apela metoda pregăti() pe obiectul bazei de date.

În forma corectă, codul arată astfel:

$servername = "mysql.hostinger.com"; $database = "u266072517_name"; $username = "u266072517_user"; $parolă = "buystuffpwd"; $sql = "mysql:host=$servername;dbname=$database;"; $dsn_Options = ; // Creați o nouă conexiune la baza de date MySQL folosind PDO, $my_Db_Connection este un obiect try ( $my_Db_Connection = new PDO($sql, $username, $parola, $dsn_Options); echo "Connected successfully"; ) catch (PDOException $ eroare) ( echo "Eroare de conexiune: " . $error->getMessage(); ) // Setați variabilele pentru persoana pe care dorim să o adăugăm în baza de date $first_Name = "Thom"; $last_Name = "Fila"; $email = " [email protected]"; // Aici creăm o variabilă care apelează metoda prepare() a obiectului bazei de date // Interogarea SQL pe care doriți să o rulați este introdusă ca parametru, iar substituenții sunt scrieți astfel: placeholder_name $my_Insert_Statement = $my_Db_Connection-> prepare("INSERT INTO Students (nume, prenume, email) VALUES (:first_name, :last_name, :email)" // Acum spunem scriptului la ce variabilă se referă de fapt fiecare substituent folosind metoda bindParam() // Mai întâi; parametrul este substituentul din instrucțiunea de mai sus - al doilea parametru este o variabilă la care ar trebui să se refere la $my_Insert_Statement->bindParam(:first_name, $first_Name $my_Insert_Statement->bindParam(:last_name, $last_Name); , $email // Executați interogarea folosind datele pe care tocmai le-am definit // Metoda execute() returnează TRUE dacă are succes și FALSE dacă nu este, permițându-vă să scrieți propriile mesaje aici dacă ( $my_Insert_Statement->); execute()) ( echo „Înregistrare nouă creată cu succes”; ) else ( echo „Nu se poate crea înregistrarea”; ) // În acest moment puteți modifica datele variabilelor și puteți executa din nou pentru a adăuga mai multe date în baza de date $first_Name = "John"; $last_Name = "Smith"; $email = " [email protected]"; $my_Insert_Statement->execute(); // Executați din nou acum că variabilele s-au schimbat if ($my_Insert_Statement->execute()) ( echo „Înregistrare nouă creată cu succes”; ) else ( echo „Nu se poate crea înregistrarea”; )

Pe liniile 28, 29 și 30 folosim metoda bindParam() obiect de bază de date. Există și o metodă bindValue(), diferit de cel precedent.

  • bindParam() – această metodă numără datele atunci când metoda executa() realizat. Prima dată când scriptul ajunge la metodă executa() el vede asta $first_Name face referire la „Thom”, leagă acea valoare și execută interogarea. Când scriptul ajunge la metodă a doua oară executa(), el arata asa $first_Name acum face referire la „John”, leagă acea valoare și rulează din nou interogarea cu noua valoare. Este important să înțelegem că creăm cererea o dată și apoi înlocuim date diferite în locuri diferite din script.
  • bindValue() – această metodă calculează datele imediat ce îi vine rândul. Din moment ce valoarea $first_Name a fost setat la „Thom” în momentul în care am ajuns la metodă bindValue(), va fi folosit la apelarea metodei executa() Pentru $my_Insert_Statement.

Vă rugăm să rețineți că reutilizam variabila $first_Nameși dă-i o nouă valoare a doua oară. Dacă vă verificați baza de date după rularea acestui script, ambele nume date vor fi acolo, contrar acestei valori variabile $first_Name va fi egal cu „John” la sfârșitul acestui scenariu. Amintiți-vă că PHP evaluează conținutul unui script înainte de a rula.

Dacă vă schimbați scriptul prin înlocuire bindParam pe bindValue, veți adăuga „Thom Vial” la baza de date MySQL de două ori și John Smith va fi ignorat.

Pasul 3 - Verificați succesul și rezolvați problemele generale

Dacă interogarea pe care am rulat-o în baza de date MySQL a avut succes, vom vedea următorul mesaj:

Rezolvarea erorilor comune

MySQLi

În orice alt caz, în locul mesajului de mai sus va fi afișat un mesaj de eroare. De exemplu, să facem o eroare de sintaxă în codul nostru și vom obține asta:

După cum putem vedea, prima parte a codului este în regulă, conexiunea a fost stabilită cu succes, dar interogarea noastră SQL a întâmpinat eșec atunci când a fost executată.

"Eroare: INSERT INTO Students (nume, prenume, e-mail) VALUES ("Thom", "Vial", " [email protected]") Aveți o eroare în sintaxa dvs. SQL; verificați manualul care corespunde versiunii serverului dvs. MySQL pentru sintaxa corectă de utilizat lângă "(nume, prenume, e-mail) VALORI ("Thom", "Vial", " [email protected]")" la rândul 1"

A apărut o eroare de sintaxă care a cauzat eșecul scriptului nostru. Eroarea a fost aici:

$sql = "INSERT INTO Students (nume, prenume, e-mail) VALORI ("Thom", "Vial", " [email protected]")";

După cum puteți vedea, folosim bretele în loc de paranteze. Acest lucru este incorect și are ca rezultat o eroare de sintaxă în scriptul nostru.

DOP

Pe linia 7 a conexiunii PDO, modul de tratare a erorilor este setat să „afișeze toate excepțiile”. Dacă eliminați acest lucru din script și solicitarea eșuează, nu veți primi niciun mesaj de eroare. Cu excepțiile activate, vor fi afișate problemele specifice întâlnite. Acesta este, în general, cel mai bine utilizat atunci când se dezvoltă un script, deoarece poate dezvălui numele bazelor de date și tabelelor pe care ați dori să le ascundeți de oricine ar putea obține acces neautorizat la datele dvs. În cazul de mai sus, când acoladele au fost folosite în loc de paranteze, eroarea arată ca mai jos:

Eroare fatală: Excepție neprinsă „PDOException” cu mesajul „SQLSTATE: Eroare de sintaxă sau încălcare de acces: 1064 Aveți o eroare în sintaxa SQL; verificați manualul care corespunde versiunii de server MySQL pentru sintaxa corectă de utilizat lângă „(nume, prenume, e-mail) VALORI („Thom”, „Vial”, „ [email protected]")" la rândul 1"

Alte probleme pe care le puteți întâlni:

  • Câmpurile sunt specificate incorect (câmpuri inexistente sau nume scrise greșit).
  • Tipul valorii nu se potrivește cu tipul câmpului. De exemplu, când dorim să atribuim valoarea unui număr 47 domeniu Nume, vom primi o eroare deoarece valoarea este de așteptat să fie un șir. Dar, dacă specificați un număr între ghilimele, de exemplu, “47” , nu va exista nicio eroare deoarece numărul nostru va fi scris ca șir în acest câmp.
  • O încercare de a introduce date într-un tabel care nu există sau o eroare de ortografie a numelui tabelului.

Toate aceste erori pot fi remediate urmând ghidurile de corectare a erorilor sau verificând jurnalul de erori.

După adăugarea cu succes a datelor, ar trebui să le vedem în baza noastră de date. Iată un exemplu de tabel la care am adăugat datele noastre, privind phpMyAdmin.

Concluzie

În acest tutorial ați învățat cum să utilizați Cod PHP pentru a adăuga o înregistrare la un tabel MySQL folosind MySQLiŞi DOP. Am analizat, de asemenea, erorile comune și soluțiile acestora. A ști cum să utilizați codul PHP pentru a adăuga la o bază de date MySQL vă va fi util, indiferent dacă învățați să programați sau deja creați propriul site web.

Toate modulele unui site sau aplicație web în care este necesară introducerea și înregistrarea unor date (de exemplu, nume, vârstă, adresă etc.) folosesc o funcție simplă în limbajul mysql INSERT INTO `name_base` (nume, valoare1, valoare2) ) VALORI ('Vasya ','1','2');

Toate variabilele sunt introduse în baza de date conform valorilor pe care le-am stabilit în primele paranteze. Este important să luați în considerare codificarea scriptului de gestionare, a bazei de date și a fișierului de configurare. Este recomandabil să utilizați cea mai comună codificare UTF-8.

Vă rugăm să rețineți că puteți scrie în baza de date în două moduri.

Prima cale dacă nu specificăm inițial numele de celule ale tabelelor bazei de date. Apoi trebuie să enumeram toate variabilele pentru fiecare celulă, și anume câte celule sunt în tabelul bazei de date, așa că multe variabile ar trebui să fie listate în paranteze după valoarea VALUE.

De exemplu:
Există patru celule într-un tabel de bază de date. Aceasta înseamnă că după elementul VALUE (..), toate cele patru variabile trebuie listate între paranteze. Și încă ceva: dacă variabila nu există, să zicem că este un parametru opțional. Apoi scriem doar o valoare goală între ghilimele „”,

„INSERT INTO `name_base` VALUES (NULL, `".$name."`,``,`2`)"; // a treia valoare goală este scrisă între ghilimele

Dar această solicitare are câteva dezavantaje minore. Dacă adăugați o celulă sau două celule la un tabel al bazei de date, atunci această cerere va returna o eroare. Deoarece în această metodă, listarea tuturor celulelor din interogare este obligatorie.

A doua cale dacă după o interogare INSERT INTO `name_base` (...), listați toate celulele după numele bazei de date. Un exemplu a fost deja discutat mai sus. Dacă ai uitat, hai să o scriem din nou:

„INSERT INTO `name_base`(`nume`,`valoare`,`valoare2`) VALORI (NULL, `".$nume."`,``,`2`)";

Aici am enumerat toate celulele (nume, valoare1, valoare2). Și dacă adăugați două celule suplimentare la tabelul bazei de date, atunci sintaxa interogării nu va trebui modificată. Dar dacă nu trebuie să adăugăm imediat într-o singură solicitare acele variabile suplimentare de care avem nevoie pentru acele celule foarte noi create.

Această eroare apare foarte des după o mică modificare a site-ului. Să presupunem că administratorul a adăugat o celulă suplimentară la baza de date, să spunem starea. Dar procesorul de script nu a avut timp să schimbe modulul sau pur și simplu a uitat. Dar unele site-uri au o structură foarte complexă, iar găsirea unei erori poate dura mult timp și efort. Prin urmare, este recomandabil să utilizați a doua metodă de scriere în baza de date. Deși acest tip de greșeală este mai des făcută de programatorii web începători.

Intrarea PHP în baza de date mysql. Exemple practice

Deci, acum ajungem la miezul problemei atunci când lucrăm cu interogări de baze de date. Vom face totul folosind exemple practice. Să creăm un script simplu pentru a înregistra comentariile pe care vizitatorii site-ului le vor lăsa.

Mai întâi, să creăm un mesaj de tabel în baza de date cu patru celule. În prima celulă scriem id-ul comentariului. Numărul de caractere dintr-o celulă este de până la zece caractere cu parametrul de auto-increment. Această setare automată se va schimba de fiecare dată când un comentariu este adăugat la +1.

Următoarea celulă este numele utilizatorului. Număr de caractere - până la două sute - trei sute de caractere la alegere, parametru char. Apoi celula de comentariu - în această celulă vom introduce textul comentariului în sine. Dacă doriți să înregistrați texte de comentarii mari, atunci puteți seta parametrul text - atunci puteți introduce pur și simplu texte uriașe, mai mult de cinci sute de mii de caractere sau puteți seta parametrul tinytext, atunci se vor potrivi puțin mai puține caractere, dar se va lucreaza putin mai repede.

Dar în cazul nostru, vom ține cont de faptul că vizitatorii nu vor scrie texte uriașe. Și, prin urmare, ne vom limita și ne vom înregistra două mii de caractere cu parametrul varchar pentru a înregistra valorile șirurilor.

În ultima celulă vom scrie data la care a fost înregistrat textul comentariului. Vom scrie în format numeric în secunde, folosind funcția datei și orei curente time(); Pentru simplitate, vom seta funcția la variabila $time=time(); Și să creăm o celulă în baza de date. Să-i spunem același nume cu time cu parametrul int (for valori numerice). Să notăm numărul de caractere - unsprezece este mai bine (cu o marjă mică pentru viitor :-).

Dump-ul bazei de date este după cum urmează:

Structura tabelului `msg` -- CREATE TABLE IF NOT EXISTS `msg` (`id` int(10) NOT NULL AUTO_INCREMENT, `name` char(250) NOT NULL, `coment` varchar(2000) NOT NULL, `time` int(11) NOT NULL, CHEIE PRIMARĂ (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Gata, a fost creat un tabel pentru comentarii. Acum scriem un formular pentru a scrie un comentariu și gestionarea scriptului în sine. Codul HTML pentru formularul de comentarii este următorul.

© 2024 ermake.ru -- Despre repararea PC-ului - Portal de informații