Gegevens uit een formulier toevoegen aan mysql. Afbeeldingen toevoegen aan een MySQL-database via PHP. PHP-invoer in MySQL-database. Praktische voorbeelden

In dit bericht wil ik je vertellen, hoe u de ingevoerde gegevens in het formulier naar de database kunt overbrengen. En dus maken we een eenvoudig formulier waarin we twee velden hebben: de naam van de gebruiker en zijn e-mailadres:

Jouw naam:
Uw e-mail:


Dit formulier kan gebruikt worden om een ​​nieuwe gebruiker te registreren, om nieuws te versturen, om statistieken te verzamelen, of wat dan ook... Over het algemeen voert de gebruiker zijn gegevens in dit formulier in: naam en e-mailadres, klikt op de knop en vervolgens de gegevens gaat in het PHP-script:

$naam = $_POST["naam"]; $e-mail = $_POST["e-mail"]; $result = mysqli_query("INSERT INTO gebruiker (naam, e-mailadres) VALUES ("$name", "$email")"); if ($result) ( echo "Gegevens succesvol opgeslagen!"; ) else ( echo "Er is een fout opgetreden, probeer het opnieuw."; )


Wat gebeurt er in dit script? Laten we het nu uitzoeken!
De gegevens die in het formulier zijn ingevoerd, worden met behulp van de POST-methode overgebracht naar het php-script (dat hierboven is geschreven), en met behulp van de globale array $_POST worden de gegevens gevormd in de variabelen $name en $email:

$naam = $_POST["naam"]; $e-mail = $_POST["e-mail"];


Nadat de variabelen gereed zijn om in de database te worden ingevoerd, maken we een verzoek aan. Maar eerst moeten je scripts al verbonden zijn met de database. Ik schreef in deze thread hoe je verbinding kunt maken met de database: . Het verzoek zelf ziet er als volgt uit:

$result = mysqli_query("INSERT INTO gebruiker (naam, e-mailadres) VALUES ("$name", "$email")");


In deze code hebben we aangegeven dat de volgende variabelen worden toegevoegd aan de naam- en e-mailcellen in de gebruikerstabel: $name en $email.
Vervolgens ontvangen wij, als alles goed is gegaan, bericht van de aandoening:

Gegevens succesvol opgeslagen!


Mochten er zich problemen voordoen en zijn de gegevens niet ingevuld, dan krijgen wij een foutmelding:

Er is een fout opgetreden. Probeer het opnieuw.


Dat is het!

*** *** *** *** ***

Indien gewenst kunt u meer velden toevoegen voor het invoeren van informatie. We moeten bijvoorbeeld een veld toevoegen voor het invoeren van de stad van de gebruiker. We hebben al een kant-en-klaar script (hierboven geschreven), nu voegen we gewoon een veld toe Jouw stad, laten we de variabele noemen: $city . En zo verder in het gegevensinvoerformulier, na:

Uw e-mail:


toevoegen:

Jouw stad:


In het php-script, na:

$e-mail = $_POST["e-mail"];


toevoegen:

$stad = $_POST["stad"];


En natuurlijk voegen we het ook toe aan het verzoek, zoals dit:

$result = mysqli_query("INSERT INTO gebruiker (naam, e-mailadres, stad) VALUES ("$name", "$email", "$city")");


Dit is waar je op moet eindigen:
Invoerformulier:

Jouw naam:
Uw e-mail:
Jouw stad:


Script:

$naam = $_POST["naam"]; $e-mail = $_POST["e-mail"]; $stad = $_POST["stad"]; $result = mysqli_query("INSERT INTO gebruiker (naam, e-mailadres, stad) VALUES ("$name", "$email", "$city")"); if ($result == true) ( ​​​​echo "Gegevens succesvol opgeslagen!"; ) else ( echo "Er is een fout opgetreden, probeer het opnieuw."; )


Zoals je kunt zien, niets ingewikkelds! Indien nodig kunt u nog een veld toevoegen, en nog een, en nog een...

Deze handleiding laat u zien hoe u een database kunt beheren vanuit uw PHP script. Jij gaat studeren een record toevoegen aan een MySQL-tabel, gebruiken PHP-code. Bekijk voordat u begint onze andere tutorials waarin de basisstappen van het werken met PHP en databases worden behandeld: verbinding maken vanuit PHP met een MySQL-database.

Controleer het volgende voordat u begint:

  • Toegang tot uw hostingcontrolepaneel

Stap 1 - Een tabel maken

Allereerst moeten we een tabel voor uw gegevens maken. Dit is een heel eenvoudige procedure die u kunt uitvoeren phpMijnAdmin vanuit uw hostingcontrolepaneel. We hebben het proces van het maken van een MySQL-database al besproken in een eerdere zelfstudie, dus dat gedeelte slaan we hier over.

Nadat u bent ingelogd op de phpMyAdmin-pagina, ziet u een afbeelding als deze:

Laten we een tabel maken met de naam Studenten voor onze databank u266072517_naam. Via de knop kunt u een nieuwe tabel aanmaken Tabel maken. Hierna ziet u een nieuwe pagina waar u alle benodigde gegevens voor uw tabel kunt invoeren:

Dit is de eenvoudigste manier om een ​​tabel te maken. Voor meer informatie over de tabel-/databasestructuur en welke instellingen voor elk veld kunnen worden gebruikt, raadpleegt u de officiële phpMyAdmin-documentatie.

Hier volgen enkele eenvoudige uitleg van de velden die we zullen gebruiken:

  • Naam is de naam van uw veld. Verschijnt helemaal bovenaan uw tabel.
  • Type– hier kunt u het veldtype instellen. Wij kiezen bijvoorbeeld Varchar omdat we hier een string met een naam moeten invoeren (die letters bevat, geen cijfers).
  • Lengte/waarden– wordt gebruikt om de maximale lengte van uw invoer in dit veld in te stellen.
  • Index– we gebruiken de index “Primair” voor ons veld “ID”. Bij het maken van een tabel wordt aanbevolen om één ID-veld te hebben. Het wordt gebruikt om records in een tabel te indexeren wanneer relaties tussen tabellen zijn geconfigureerd. Hier kan het ook opgemerkt worden "A_I", wat betekent Automatische verhoging. Deze instelling verhoogt automatisch de index (1,2,3,4...).

Klik Redden en uw tabel wordt gemaakt.

Stap 2 - Maak PHP-code en voeg een item toe aan de MySQL-tabel

Optie 1 – MySQLi-methode

Allereerst moet u een verbinding met de database tot stand brengen, volgens onze vorige tutorial. Hierna kunnen we doorgaan met de SQL-query om een ​​record aan de MySQL-tabel toe te voegen − INVOEGEN. Hier is een compleet codevoorbeeld met verbindings- en invoegmethode:

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

Dus het eerste deel van de code (lines 3 – 18 ) verwijzen naar het gedeelte over het tot stand brengen van de databaseverbinding. We zullen dit deel niet nog een keer doornemen. Als je wilt weten wat elke regel betekent, raadpleeg dan onze vorige handleiding over hoe je verbinding maakt met een database.

Laten we beginnen met de lijn 19 :

$sql = "INSERT INTO Students (naam, achternaam, e-mailadres) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]")";

Dit is de belangrijkste coderegel en doet alles wat we in deze tutorial behandelen: een record toevoegen aan een MySQL-tabel in de database. INVOEREN is een expressie die een record toevoegt aan de opgegeven MySQL-databasetabel. In ons voorbeeld voegen we gegevens toe aan een tabel Studenten.

Verderop definiëren we tussen haakjes de tabelvelden waaraan we waarden zullen toevoegen: (naam, achternaam, e-mailadres). De gegevens worden in een specifieke volgorde toegevoegd. Als we schrijven (e-mailadres, achternaam, naam), worden de waarden in een andere volgorde toegevoegd.

Volgende deel van de betekenis WAARDEN. Hier stellen we onze waarden in de eerder opgegeven velden in. Elk veld krijgt dus zijn eigen waarde. In ons geval zou het bijvoorbeeld zoiets zijn als: naam = Thom, achternaam = Flacon, e-mail = [e-mailadres beveiligd] .

Wat belangrijk is om op te merken is dat we ons hier aan het vormen zijn SQL-query met behulp van PHP-code. SQL-query's moeten tussen aanhalingstekens staan. In ons voorbeeld is alles tussen de aanhalingstekens en na $sql = een SQL-query.

Het volgende deel van de code ( 20 – 22 lines) voert ons verzoek uit en controleert het succes van het verzoek:

If (mysqli_query($conn, $sql)) ( echo "Nieuw record succesvol aangemaakt"; )

Er wordt een succesbericht weergegeven als de query correct is uitgevoerd.

En het laatste deel ( 22 – 24 regels) tonen een ander bericht voor het geval ons verzoek mislukt:

Anders ( echo "Fout: " . $sql . "
". mysqli_error($conn); )

Deze code toont ons een foutmelding voor het geval er iets mis is gegaan.

Optie 2 – PHP Data Object-methode (P HP D ata O bject)

Net als in het vorige voorbeeld moeten we eerst een verbinding maken met de database, wat gebeurt bij het maken van een nieuw PDO-object - in de vorige tutorial wordt uitgelegd hoe dit gebeurt. Omdat een MySQL-databaseverbinding een PDO-object is, moeten we verschillende PDO-'methoden' (een soort functies die deel uitmaken van een specifiek object) gebruiken om de query voor te bereiden en uit te voeren. Objectmethoden worden als volgt genoemd:

$het_Object->de_Methode();

Met PDO kunt u SQL-code 'voorbereiden' voordat u deze uitvoert. De SQL-query wordt geëvalueerd en aangepast voordat deze wordt uitgevoerd. Zo kan een eenvoudige SQL-injectieaanval worden uitgevoerd door SQL-code in een formulierveld in te vullen. Bijvoorbeeld:

// De gebruiker schrijft dit in het gebruikersnaamveld van een inlogformulier thom"; DROP DATABASE user_table; // De laatste zoekopdracht wordt deze "SELECT * FROM user_table WHERE gebruikersnaam = thom"; DROP DATABASE user_table;

Omdat de SQL-code syntactisch correct is, wordt de puntkomma gemaakt DROP DATABASE user_table nieuwe SQL-query en uw gebruikerstabel wordt verwijderd. Voorbereide expressies staan ​​geen tekens toe En ; om het oorspronkelijke verzoek en de instructie te voltooien DATABANK DROP zal nooit worden geëxecuteerd.

Altijd Gebruik voorbereide queries bij het verzenden of ontvangen van gegevens uit een database met PDO.

Om voorbereide expressies te gebruiken, moet u een nieuwe variabele maken die de methode aanroept voorbereiden() op het databaseobject.

In de juiste vorm ziet de code er als volgt uit:

$servernaam = "mysql.hostinger.com"; $database = "u266072517_naam"; $gebruikersnaam = "u266072517_user"; $wachtwoord = "koopstuffpwd"; $sql = "mysql:host=$servernaam;dbnaam=$database;"; $dsn_Options = ; // Maak een nieuwe verbinding met de MySQL-database met behulp van PDO, $my_Db_Connection is een object try ( $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "Succesvol verbonden"; ) catch (PDOException $ error) ( echo "Verbindingsfout: " . $error->getMessage(); ) // Stel de variabelen in voor de persoon die we aan de database willen toevoegen $first_Name = "Thom"; $last_Name = "Flacon"; $e-mail = " [e-mailadres beveiligd]"; // Hier maken we een variabele die de methode prepare() van het databaseobject aanroept // De SQL-query die u wilt uitvoeren wordt ingevoerd als de parameter, en tijdelijke aanduidingen worden als volgt geschreven: placeholder_name $my_Insert_Statement = $my_Db_Connection-> prepare("INSERT INTO Students (naam, achternaam, e-mail) VALUES (:first_name, :last_name, :email)"); Nu vertellen we het script naar welke variabele elke tijdelijke aanduiding feitelijk verwijst met behulp van de bindParam() methode // First parameter is de tijdelijke aanduiding in de bovenstaande instructie - de tweede parameter is een variabele waarnaar moet worden verwezen $my_Insert_Statement->bindParam(:first_name, $first_Name $my_Insert_Statement->bindParam(:last_name, $last_Name); , $email); // Voer de query uit met behulp van de gegevens die we zojuist hebben gedefinieerd // De methode execute() retourneert TRUE als deze succesvol is en FALSE als dit niet het geval is, zodat u hier uw eigen berichten kunt schrijven als ( $my_Insert_Statement-> execute()) ( echo "Nieuw record succesvol aangemaakt"; ) else ( echo "Kan record niet aanmaken"; ) // Op dit punt kunt u de gegevens van de variabelen wijzigen en opnieuw uitvoeren om meer gegevens aan de database toe te voegen $first_Name = "John"; $last_Name = "Smid"; $e-mail = " [e-mailadres beveiligd]"; $my_Insert_Statement->execute(); // Voer opnieuw uit nu de variabelen zijn gewijzigd if ($my_Insert_Statement->execute()) ( echo "Nieuw record succesvol aangemaakt"; ) else ( echo "Kan record niet aanmaken"; )

Op de regels 28, 29 en 30 gebruiken we de methode bindParam() database-object. Er is ook een methode bindWaarde(), anders dan de vorige.

  • bindParam() – deze methode telt de gegevens wanneer de methode uitvoeren() bereikt. De eerste keer dat het script de methode bereikt uitvoeren() hij ziet dat $eerste_naam referenties “Thom”, bindt die waarde en voert de query uit. Wanneer het script de methode een tweede keer bereikt uitvoeren(), zo ziet hij eruit $eerste_naam verwijst nu naar “John”, bindt die waarde en voert de query opnieuw uit met de nieuwe waarde. Het is belangrijk om te begrijpen dat we het verzoek één keer maken en vervolgens verschillende gegevens op verschillende plaatsen in het script vervangen.
  • bindWaarde() – deze methode berekent de gegevens zodra ze aan de beurt zijn. Sinds de waarde $eerste_naam was ingesteld op "Thom" op het moment dat we de methode bereikten bindWaarde(), zal deze worden gebruikt bij het aanroepen van de methode uitvoeren() Voor $mijn_Insert_Statement.

Houd er rekening mee dat we de variabele hergebruiken $eerste_naam en geef het een tweede keer een nieuwe waarde. Als u uw database controleert nadat u dit script hebt uitgevoerd, zullen beide voornamen aanwezig zijn, in tegenstelling tot deze variabelewaarde $eerste_naam zal aan het einde van dit script gelijk zijn aan “John”. Houd er rekening mee dat PHP de inhoud van een script evalueert voordat het wordt uitgevoerd.

Als u uw script wijzigt door te vervangen bindParam op bindwaarde, voegt u “Thom Vial” twee keer toe aan de MySQL-database en wordt John Smith genegeerd.

Stap 3 - Controleer het succes en los algemene problemen op

Als de query die we in de MySQL-database hebben uitgevoerd succesvol was, zien we het volgende bericht:

Veelvoorkomende fouten oplossen

MySQLi

In elk ander geval wordt er een foutmelding weergegeven in plaats van het bovenstaande bericht. Laten we bijvoorbeeld één syntaxisfout in onze code maken en we krijgen dit:

Zoals we kunnen zien, is het eerste deel van de code in orde, de verbinding is succesvol tot stand gebracht, maar onze SQL-query is mislukt tijdens de uitvoering.

"Fout: INSERT INTO Students (naam, achternaam, e-mailadres) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]") U heeft een fout in uw SQL-syntaxis; controleer de handleiding die overeenkomt met uw MySQL-serverversie voor de juiste syntaxis die u moet gebruiken in de buurt van "(naam, achternaam, e-mail) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]")" op regel 1"

Er is een syntaxisfout opgetreden waardoor ons script mislukt. De fout zat hier:

$sql = "INSERT INTO Students (naam, achternaam, e-mailadres) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]")";

Zoals je kunt zien, gebruiken we accolades in plaats van haakjes. Dit is onjuist en resulteert in een syntaxisfout in ons script.

BOB

Op regel 7 van de PDO-verbinding staat de foutafhandelingsmodus op ‘alle uitzonderingen weergeven’. Als u dit uit het script verwijdert en de aanvraag mislukt, krijgt u geen foutmelding. Als uitzonderingen zijn ingeschakeld, worden de specifieke problemen die u tegenkomt weergegeven. Dit kunt u over het algemeen het beste gebruiken bij het ontwikkelen van een script, omdat hierdoor database- en tabelnamen kunnen worden onthuld die u wilt verbergen voor iedereen die ongeautoriseerde toegang tot uw gegevens zou kunnen krijgen. In het bovenstaande geval, wanneer accolades werden gebruikt in plaats van haakjes, ziet de fout er als volgt uit:

Fatale fout: niet-afgevangen uitzondering "PDOException" met bericht "SQLSTATE: syntaxisfout of toegangsfout: 1064 Er is een fout in uw SQL-syntaxis; controleer de handleiding die overeenkomt met uw MySQL-serverversie voor de juiste syntaxis die u moet gebruiken in de buurt van "(naam, achternaam, e-mail) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]")" op regel 1"

Andere problemen die u kunt tegenkomen:

  • De velden zijn onjuist opgegeven (niet-bestaande velden of verkeerd gespelde namen).
  • Het waardetype komt niet overeen met het veldtype. Bijvoorbeeld wanneer we de waarde van een getal willen toekennen 47 veld Naam, krijgen we een foutmelding omdat de waarde naar verwachting een string is. Maar als u bijvoorbeeld een getal tussen aanhalingstekens opgeeft, “47” , zal er geen fout optreden omdat ons nummer als een string in dit veld wordt geschreven.
  • Een poging om gegevens in te voeren in een tabel die niet bestaat of een fout bij het spellen van de tabelnaam.

Al deze fouten kunnen worden verholpen door de foutcorrectiehandleidingen te volgen of door het foutenlogboek te controleren.

Nadat de gegevens succesvol zijn toegevoegd, zouden we deze in onze database moeten zien. Hier is een voorbeeld van de tabel waaraan we onze gegevens hebben toegevoegd phpMijnAdmin.

Conclusie

In deze tutorial heb je geleerd hoe je het moet gebruiken PHP-code om een ​​record toe te voegen aan een MySQL-tabel gebruiken MySQLi En BOB. We hebben ook gekeken naar veelvoorkomende fouten en hun oplossingen. Weten hoe u PHP-code kunt gebruiken om toe te voegen aan een MySQL-database zal van pas komen, of u nu leert programmeren of al uw eigen website maakt.

In dit artikel bekijken we hoe u PHP kunt gebruiken om rijen in een MySQL-database in te voegen.

Stap 1 - Een tabel maken

Eerst moet u een tabel voor de gegevens maken. Dit is een eenvoudige procedure die u kunt uitvoeren met phpMyAdmin in uw hostingcontrolepaneel.

Na het inloggen op phpMyAdmin ziet u deze interface:

Laten we een tabel maken met de naam Studenten in de database u266072517_name door op de knop "Tabel maken" te klikken. Hierna zien we een nieuwe pagina waarop we alle noodzakelijke tabelparameters instellen:

Dit is de eenvoudigste instelling die voor een tabel kan worden gebruikt en waarmee u meer informatie kunt krijgen over de tabel-/databasestructuur.

Kolomopties:

  • Naam is de kolomnaam die bovenaan de tabel wordt weergegeven.
  • Type — kolomtype. We hebben bijvoorbeeld varchar gekozen omdat we tekenreekswaarden gaan invoeren.
  • Lengte/waarden - Wordt gebruikt om de maximale lengte op te geven die een item in deze kolom kan hebben.
  • Index - We hebben de index 'Primair' gebruikt voor het veld 'ID'. Bij het maken van een tabel wordt aanbevolen om slechts één kolom als primaire sleutel te gebruiken. Het wordt gebruikt om de records in de tabel weer te geven en is vereist bij het opzetten van de tabel. Ik heb ook "A_I" opgemerkt, wat "Auto Increment" betekent - de parameter voor het automatisch toewijzen van recordnummers (1,2,3,4...).
    Klik op de knop "Opslaan" en de tabel wordt aangemaakt.

Stap 2: Schrijf PHP-code om gegevens in MySQL in te voegen.

Optie 1 - MySQLi-methode

Eerst moet u een verbinding met de database tot stand brengen. Hierna gebruiken we de SQL INSERT-query. Volledig codevoorbeeld:

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

Het eerste deel van de code (regel 3 - 18) is bedoeld om verbinding te maken met de database.

Laten we beginnen met regel nummer 19:

$sql = "INSERT INTO Students (naam, achternaam, e-mailadres) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]")";

Het voegt gegevens in een MySQL-database in. INSERT INTO is een instructie die gegevens aan een opgegeven tabel toevoegt. In ons voorbeeld worden gegevens toegevoegd aan de tabel Studenten.

Hierna volgt een lijst met kolommen waarin de waarden worden ingevoegd: naam, achternaam, e-mailadres. De gegevens worden in de aangegeven volgorde toegevoegd. Als we (e-mailadres, achternaam, naam) hadden geschreven, zouden de waarden in een andere volgorde zijn toegevoegd.

Het volgende deel is de VALUES-instructie. Hier specificeren we de waarden voor de kolommen: naam = Thom, achternaam = Flacon, e-mail = [e-mailadres beveiligd].

We hebben het verzoek uitgevoerd met behulp van PHP-code. In programmacode moeten SQL-query's worden voorzien van aanhalingstekens. Het volgende stukje code (regel 20-22) controleert of ons verzoek succesvol was:

if (mysqli_query($conn, $sql)) ( echo "Nieuw record succesvol gemaakt"; )

Deze code geeft een bericht weer dat aangeeft dat het verzoek succesvol was.

En het laatste deel (regel 22 - 24) geeft een melding weer als het verzoek niet succesvol was:

else ( echo "Fout: " . $sql . "
". mysqli_error($conn); )

Optie 2 - PHP Data Object (PDO) -methode

Eerst moeten we verbinding maken met de database door een nieuw PDO-object te maken. Wanneer we ermee werken, zullen we verschillende PDO-methoden gebruiken. Objectmethoden worden als volgt aangeroepen:

$het_Object->de_Methode();

Met PDO kunt u SQL-code "voorbereiden" voordat deze wordt uitgevoerd. De SQL-query wordt geëvalueerd en "gecorrigeerd" voordat deze wordt uitgevoerd. Een eenvoudige SQL-injectieaanval kan bijvoorbeeld worden uitgevoerd door simpelweg SQL-code in een formulierveld in te voeren. Bijvoorbeeld:

Omdat dit syntactisch correcte SQL is, maakt de puntkomma van DROP DATABASE user_table een nieuwe SQL-query en wordt de gebruikerstabel verwijderd. Met voorbereide expressies (gebonden variabelen) kunnen puntkomma's en aanhalingstekens de oorspronkelijke query niet beëindigen. Daarom wordt de opdracht DROP DATABASE nooit uitgevoerd.

Om voorbereide expressies te gebruiken, moet u een nieuwe variabele schrijven die de methode prepare() van het databaseobject aanroept.

Juiste code:

getMessage(); ) // Stel variabelen in voor de persoon die we aan de database willen toevoegen $first_Name = "Thom"; $last_Name = "Flacon"; $e-mail = " [e-mailadres beveiligd]"; // Maak een variabele die de methode prepare() van het databaseobject aanroept // De SQL-query die u wilt uitvoeren wordt ingevoerd als een parameter en de tijdelijke aanduidingen worden als volgt geschreven: placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare(" INSERT INTO Students ( naam, achternaam, e-mail) VALUES (:voornaam, :achternaam, :email)"); // We vertellen het script nu welke variabele naar elke tijdelijke aanduiding verwijst om de methode bindParam() te gebruiken // De eerste parameter is de tijdelijke aanduiding in de bovenstaande instructie, de tweede is de variabele waarnaar moet verwijzen $my_Insert_Statement->bindParam(:first_name, $first_Name); $email); // Voer de query uit met behulp van de gegevens die we zojuist hebben gedefinieerd // De methode execute() retourneert TRUE als deze slaagt en FALSE als deze mislukt, waardoor u de mogelijkheid krijgt om uw eigen if-bericht af te drukken ($my_Insert_Statement->execute() )) ( echo "Nieuw record succesvol aangemaakt"; ) else ( echo "Kan geen record aanmaken"; ) // Op dit punt kunt u de variabele gegevens wijzigen en een query uitvoeren om meer gegevens aan de database toe te voegen gegevens aan de database $first_Name = "John"; $last_Name = "Smid"; $e-mail = " [e-mailadres beveiligd]"; $my_Insert_Statement->execute(); // Voer opnieuw uit wanneer de variabele wordt gewijzigd if ($my_Insert_Statement->execute()) ( echo "Nieuw record succesvol gemaakt"; ) else ( echo "Kan geen record maken";

Op regels 28, 29 en 30 gebruiken we de methode bindParam() van het databaseobject. Er is ook een bindValue()-methode, die heel anders is dan de vorige.

  • bindParam() - Deze methode evalueert de gegevens wanneer de methode execute() wordt bereikt. De eerste keer dat het script de methode execute() bereikt, ziet het dat $first_Name overeenkomt met "Thom". Bindt vervolgens deze waarde en voert de aanvraag uit. Wanneer het script de tweede methode execute() bereikt, ziet het dat $first_Name nu overeenkomt met "John". Vervolgens wordt deze waarde gebonden en wordt de query opnieuw uitgevoerd met nieuwe waarden. Het is belangrijk om te onthouden dat we een query één keer hebben gedefinieerd en deze opnieuw gebruiken met andere gegevens op verschillende punten in het script.
  • bindValue() - Deze methode evalueert de gegevens zodra bindValue() is bereikt. Omdat $first_Name was ingesteld op "Thom", zal bindValue() elke keer worden gebruikt wanneer de methode execute() wordt aangeroepen op $my_Insert_Statement wanneer bindValue() wordt bereikt.
    Merk op dat we de variabele $first_Name hergebruiken en er een tweede keer een nieuwe waarde aan toekennen. Na het uitvoeren van het script worden beide namen in de database vermeld, ondanks het feit dat de variabele $first_Name aan het einde van het script de waarde “John” heeft. Houd er rekening mee dat PHP het hele script controleert voordat het wordt uitgevoerd.

Als u het script bijwerkt om bindParam te vervangen door bindValue, voegt u "Thom Vial" tweemaal in de database in en wordt John Smith genegeerd.

Stap 3 - Bevestig succes en los problemen op

Als het verzoek om rijen in de database in te voegen succesvol was, zien we het volgende bericht:

Veelvoorkomende fouten oplossen

MySQLi

In elk ander geval wordt een foutmelding weergegeven. Laten we bijvoorbeeld één syntaxisfout in de code maken en we krijgen het volgende:

Het eerste deel van de code is in orde, de verbinding is succesvol tot stand gebracht, maar de SQL-query is mislukt.

"Fout: INSERT INTO Students (naam, achternaam, e-mailadres) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]") U heeft een fout in uw SQL-syntaxis; controleer de handleiding die overeenkomt met uw MySQL-serverversie voor de rechtensyntaxis die u moet gebruiken in de buurt van "(naam, achternaam, e-mail) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]")" op regel 1"

Er is een syntaxisfout opgetreden waardoor het script crashte. De fout zat hier:

$sql = "INSERT INTO Students (naam, achternaam, e-mailadres) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]")";

We gebruikten accolades in plaats van gewone accolades. Dit is onjuist en het script heeft een syntaxisfout gegenereerd.

BOB

Regel 7 van de PDO-verbinding stelt de foutmodus in op "alle uitzonderingen weergeven". Als het op een andere waarde is ingesteld en het verzoek is mislukt, ontvangen we geen foutmeldingen.

Deze instelling mag alleen worden gebruikt bij het ontwikkelen van een script. Indien geactiveerd kunnen database- en tabelnamen worden weergegeven die om veiligheidsredenen het beste verborgen kunnen worden. In het hierboven beschreven geval, waarbij accolades werden gebruikt in plaats van gewone accolades, ziet de foutmelding er als volgt uit:

Fatale fout: Uncaughtexception "PDOException" met bericht "SQLSTATE: Syntaxisfout of toegangsschending: 1064 Er is een fout opgetreden in uw SQL-syntaxis; controleer de handleiding die overeenkomt met uw MySQL-serverversie voor de juiste syntaxis die u moet gebruiken in de buurt van "(naam, achternaam, e-mail) VALUES ("Thom", "Vial", " [e-mailadres beveiligd]")" op regel 1"

Andere mogelijke problemen:

  • Kolommen zijn onjuist opgegeven (niet-bestaande kolommen of verkeerd gespelde kolomnamen).
  • Eén waardetype wordt toegewezen aan een kolom van een ander type. Als u bijvoorbeeld het getal 47 in de kolom Naam probeert in te voegen, krijgt u een foutmelding. Deze kolom moet een tekenreekswaarde gebruiken. Maar als we een getal tussen aanhalingstekens specificeren (bijvoorbeeld "47") zou het werken, omdat het een string is.
  • Er is geprobeerd gegevens in te voeren in een tabel die niet bestaat. Er zat ook een spelfout in de tabelnaam.

Nadat de gegevens succesvol zijn ingevoerd, zullen we zien dat deze aan de database zijn toegevoegd. Hieronder ziet u een voorbeeld van een tabel waaraan gegevens zijn toegevoegd.

Laatste update: 1/11/2015

Gebruik de expressie "INSERT" om gegevens toe te voegen:

$query="INSERT INTO products VALUES(NULL, "Samsung Galaxy III", "Samsumg"");

De instructie "INSERT" voegt een enkele rij in een tabel in. Na het INTO-trefwoord wordt de tabelnaam aangegeven en na VALUES wordt de reeks waarden voor alle kolommen tussen haakjes aangegeven. Omdat we drie kolommen in de tabel hebben, geven we drie waarden aan.

Omdat we in het vorige onderwerp bij het maken van een tabel de volgende volgorde van kolommen hebben opgegeven: id, naam, bedrijf, in dit geval wordt de waarde NULL doorgegeven voor de id-kolom, "Samsung Galaxy III" voor naam en "Samsumg" voor gezelschap.

Omdat de id-kolom is gedefinieerd als AUTO_INCREMENT, hoeven we deze geen specifieke numerieke waarde te geven en kunnen we een NULL-waarde doorgeven, waarna MySQL de volgende beschikbare waarde aan de kolom zal toewijzen.

Laten we nu eens kijken naar het toevoegen van gegevens aan de hand van een voorbeeld. Laten we een bestand maken maak.php met de volgende inhoud:

Gegevens toegevoegd"; ) // sluit de verbinding mysqli_close($link); ) ?>

Nieuw model toevoegen

Model invoeren:

Fabrikant:



Hier wordt de code voor interactie met de database gecombineerd met de functionaliteit van de formulieren: met behulp van het formulier voeren we gegevens in die aan de database moeten worden toegevoegd.

Beveiliging en MySQL

Hier hebben we de functie mysqli_real_escape_string() gebruikt. Het wordt gebruikt om tekens in een tekenreeks te escapen, die vervolgens wordt gebruikt in een SQL-query. Er zijn als parameters een verbindingsobject en een string nodig die moet worden geëscaped.

We gebruiken dus eigenlijk tweemaal karakter-escape: eerst voor de sql-expressie met behulp van de mysqli_real_escape_string() functie, en vervolgens voor de html met behulp van de htmlentities() functie. Hierdoor kunnen we onszelf tegen twee soorten aanvallen tegelijk beschermen: XSS-aanvallen en SQL-injecties.

En gegeven
. Nu zullen we praten over hoe voeg afbeeldingen toe aan de MySQL-database via een formulier met behulp van PHP.

Een veld aanmaken in de MySQL-database om een ​​afbeelding toe te voegen

Om te beginnen wil ik dat zeggen afbeeldingen opslaan in een MySQL-database Het is noodzakelijk om een ​​van de tabelvelden te definiëren als een afgeleide van het BLOB-type.

De afkorting BLOB staat voor binair groot object. Het type BLOB-gegevensopslag heeft verschillende opties:

  • TINYBLOB - Kan maximaal 255 bytes opslaan
  • BLOB kan maximaal 64 kilobytes aan informatie opslaan
  • MEDIUMBLOB - maximaal 16 megabytes
  • LONGBLOB tot 4 gigabyte

Voor het opslaan van een afbeeldingsbestand in een database u moet het bestand in een variabele lezen en een query maken om gegevens aan de tabel toe te voegen.

Een formulier op de pagina voorbereiden om een ​​afbeelding aan de MySQL-database toe te voegen

In mijn geval was de taak voeg twee afbeeldingen toe aan de database via een formulier met behulp van PHP. We hebben een formulier met twee velden en een verzendknop:

formuliernaam=”formulier1″ methode=”post” actie=”add_image.php”
enctype = "multipart/form-data"

Ik wil u eraan herinneren dat het attribuut actie specificeert het bestand dat het laden van afbeeldingsbestanden zal doen. Attribuut enctype geeft aan hoe de formulierinhoud is gecodeerd en informatie over het uploaden van bestanden. Bekijk hoe u het attribuut correct invult enctype om te vermijden.

Opmerking: ondersteuning voor het uploaden van meerdere bestanden is geïntroduceerd in versie 3.0.10.

PHP-code schrijven om een ​​afbeelding op te slaan in een MySQL-database

Omdat we twee bestanden in het attribuut verzenden naam na het woord geven we “userfile” aan met vierkante haakjes, hiermee maken we duidelijk dat we verschillende bestanden verzenden met behulp van een array met de bestandskenmerken:

$_FILES['gebruikersbestand']['naam']

De originele bestandsnaam op de clientcomputer.

$_FILES['gebruikersbestand']['type']

Het MIME-type van het bestand, als de browser deze informatie heeft verstrekt.
Voorbeeld: "afbeelding/gif" .

$_FILES['gebruikersbestand']['grootte']

$_FILES['gebruikersbestand']['tmp_naam']

Tijdelijke bestandsnaam waaronder het gedownloade bestand op de server is opgeslagen.

Hoe krijg ik de waarden van elk bestand?

Stel dat er bijvoorbeeld bestanden met de namen /home/test/1.jpg en /home/test/2.jpg worden verzonden.

In dit geval $_FILES[‘gebruikersbestand’][‘naam’]
zal de waarde 1.jpg bevatten,
en $_FILES[‘gebruikersbestand’][‘naam’]
- waarde 2.jpg

Op dezelfde manier zal $_FILES[‘userfile’][‘size’] de bestandsgroottewaarde 1.jpg bevatten, enzovoort. Laten we nu eens kijken naar de code van het bestand add_image.php, die is opgegeven in het formulierattribuut actie.

1024*1024||$image_size==0) ( $ErrorDescription="Elke afbeelding mag niet groter zijn dan 1MB! De afbeelding kan niet worden toegevoegd aan de database."; return ""; ) // Als het bestand is aangekomen, controleer dan of de afbeelding // it (om veiligheidsredenen) if(substr($_FILES["userfile"]["type"][$num], 0, 5)=="image") ( //Lees de inhoud van het bestand $image=file_get_contents($_FILES ["userfile"]["tmp_name"][$num] //Escape speciale tekens in de bestandsinhoud $image=mysql_escape_string($image)else( ErrorDescription= "Je hebt geen afbeelding geladen, dus deze kan niet worden toegevoegd."; return ""; )else( $ErrorDescription="Je hebt geen afbeelding geüpload, het veld is leeg, dus het bestand kan niet worden toegevoegd aan de database ."; return ; ) return $image; ) ?>

In dit artikel hebben we het gehad over het opslaan van een afbeelding in een MySQL-database , met behulp van PHP.