Heute möchte ich in diesem Tutorial euch erklären wie man die Daten von ein Formular entgegennimmt und anschließend in einer MySQL Datenbank speichert. Um die Daten in einer MySQL Datenbank zu speichern, müssen wir als erstes eine Tabelle erstellen. Für unser Beispiel erstellen wir eine Tabelle mit zwei Feldern. Die Felder haben die Namen "Vorname" und "Name". Den Felder weisen wir den Feldtyp Varchar zu. Bei den Feldtyp Varchar ist es erforderlich dass man eine Länge definiert. Die maximale Länge sind 255 Zeichen. In unserem Beispiel verwenden wir 100 Zeichen, da es eigentlich kein Vor - und Nachname gibt, der länger als 100 Zeichen ist.
Zusätzlich benötigen wir ein drittes Feld, wo wir eine automatisch hoch zählende ID Nummer hinterlegen. Aus fachspezifischer Sicht legen wir einen Primary Key mit den Wert Auto_Incremet an. Mit der ID Nummer, können wir in unser Tabelle eine Zuordnung des Datensatz gestalten. Da der Primary Key ausschließlich aus Zahlen besteht, verwenden wir den Feldtyp Int.
Also fangen wir an... Nachfolgend findet ihr den SQL Code um über das Datenbankverwaltungs Tool "PhpMyAdmin" eine Tabelle zu erzeugen. Wenn ihr eine Tabelle mit diesen SQL Code erstellen möchtet, wählt ihr als erstes im linken Bereich bei den Dropdown Menü eure MySQL Tabelle aus, wo ihr die entsprechende Tabelle speichern möchtet. Sobald Ihr eine Datenbank ausgewählt habt, könnt ihr im rechten Bereich unter den Menüpunkt "SQL" in einen Formularfeld den SQL Code einfügen. Wenn ihr nun anschließend auf den "OK" Button klickt, wird automatisch die Tabelle angelegt.
Der SQL Code um die Tabelle anzulegen:
CREATE TABLE `user` (
`id` INT(10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`vorname` VARCHAR(100 ) NOT NULL ,
`name` VARCHAR(100 ) NOT NULL
) ENGINE = MYISAM ;
Sobald die Tabelle angelegt wurde, ist es möglich mit dem nachfolgenden Script, die Daten zu speichern. Damit das Script auch ordnungsgemäß die Daten speichern kann, muss man die MySQL Verbindungsdaten anpassen. Nachfolgend findet ihr, das Script was die Eingaben von Formular in der MySQL Datenbank speichert.
Code für das Script:
<?php
/*
* Created on 14.01.2010 by Nico Schubert
*/
/**
* Der Host von der MySQL Datenbank, worauf ein
Zugriff gemacht werden soll.
*/
$datenbank_host = 'localhost';
/**
* Der MySQL User womit eine Verbindung zur MySQL
Datenbank hergestellt werden soll.
*/
$datenbank_user = 'Username';
/**
* Das entsprechende Datenbankpasswort, vom MySQL
User.
*/
$datenbank_passwort = 'Passwort';
/**
* Der Name von der MySQL Datenbank
*/
$datenbank_name = 'Datenbank_Name';
/**
* Definieren von den Variablen
*/
if (!isset($_POST['senden'])) $_POST['senden'] =
'';
if (!isset($_POST['vorname'])) $_POST['vorname'] =
'';
if (!isset($_POST['name'])) $_POST['name'] = '';
/**
* Prüfen, ob die Variablen einem Wert gespeichert
haben. Wenn dies der Fall ist speichern wir
den Eintrag in der MySQL Datenbank.
*/
if ($_POST['senden'] != '' AND $_POST['vorname']
!= '' AND $_POST['name'] != '') {
/**
* Aufbau der MySQL Verbindung anhand der MySQL
Verbindungsdaten, der Rückgabewert von
der PHP Funktion mysql_connect() ist die
Verbindungskennung. Die
Verbindungskennung wird in der Variable
$link gespeichert. Damit keine PHP
Fehlermeldung ausgegeben wird, stellen
die ein @ Zeichen vor die PHP Funktion.
*/
$link = @mysql_connect($datenbank_host,
$datenbank_user, $datenbank_passwort);
/**
* Prüfen ob eine Verbindungskennung in der
Variable $link enthalten ist, wenn keine
Verbindung aufgebaut werden konnte, steht
in der Variable ein false, wofür man
entsprechend eine Fehlermeldung ausgeben
kann und anschließend das Script
abbrechen kann.
*/
if (!$link) {
die('keine Verbindung möglich: ' .
mysql_error());
}
/**
* Die Datenbank auswählen anhand der der
Verbindungskennung, die PHP-Funktion
mysql_select_db() gibt in Fehlerfall ein
false zurück. Damit wir diesen Status
überprüfen können, speichern wir den
Rückgabewert in der Variable $db_selected.
*/
$db_selected =
@mysql_select_db($datenbank_name, $link);
/**
* Prüfen ob in der Variable $db_selected kein
false steht, wenn ein false hinterlegt
ist, wird automatisch mit der PHP
Funktion die() das Script abgebrochen und
entsprechend eine Fehlermeldung ausgegeben.
*/
if (!$db_selected) {
die ('Kann '.$datenbank_name.' nicht
benutzen : ' . mysql_error());
}
/**
* Nun speichern wir in der Variable
$sql_insert unserer SQL Abfrage, die wir
an die MySQL Datenbank stellen möchten.
Zum speichern von neun Datensätzen müssen
wir INSERT INTO angeben um einen neuen
Datensatz zu speichern, nach INSERT INTO
muss der Name der Tabelle folgen. In
unserem Beispiel lautet der Name `user`.
Anschließend geben wir in den ersten
Klammerbereich an, für welche Felder
entsprechende Daten im zweiten
Klammerbereich liefern. Wir möchten einen
Eintrag in den Feldern `vorname` und
`name` machen, daher müssen wir diese im
ersten Klammerbereich angeben.
*
* Im zweiten Klammerbereich übermitteln wir
unsere entsprechenden Daten. Die Daten
sind in den Variablen $_POST['vorname']
und $_POST['name'] gespeichert. Bevor wir
diese Daten in der Datenbank speichern
können, sollte man mit der PHP Funktion
mysql_escape_string() die Daten escapen,
damit kein Fehler bei falsch eingegebenen
Daten erfolgt.
*
* Hinweis: Bitte gewöhnen sie sich für die
Zukunft an, alle Daten von den speichern
oder updaten mit der PHP Funktion
mysql_escape_string() zu escapen.
Ansonsten ist es möglich ein so genannte
SQL Injection zu machen. Mehr zu diesem
Thema finden sie unter der Adresse:
https://de.wikipedia.org/wiki/SQL-Injection
*/
$sql_insert = "INSERT INTO `user`
(`vorname`,`name`)
VALUES('".mysql_escape_string($_POST['vorn
ame'])."',
'".mysql_escape_string($_POST['name'])."');";
/**
* Wenn wir nun unser SQL Statement
zusammengesetzt haben, können wir dieser
Anfrage mit der PHP Funktion
mysql_query() an die MySQL Datenbank
senden. Um die PHP-Funktion mysql_query()
zu verwenden, geben wir im ersten
Parameter die Variable $sql_insert an, wo
unser SQL Statement darin gespeichert
ist. Im zweiten Parameter geben wir
unsere Verbindungskennung mit an. Somit
wird unserer geöffnete Verbindung verwendet.
*
* Die PHP-Funktion mysql_query() liefert in
Fehlerfall ein false zurück. Um dieses
false abzufangen prüfen wir mit einer IF
Anweisung, ob kein false zurückgeliefert
wird. Zusätzlich stellen wir vor der
Funktion mysql_query() ein @ Zeichen,
damit keine PHP Fehlermeldung ausgegeben
wird. Wenn sie ein neues PHP-Script
entwickeln, sollten sie vorher das @
Zeichen entfernen. Denn mit dieser
Fehlermeldung kommt man sehr häufig den
Fehler auf die Schliche.
*/
if (@mysql_query($sql_insert, $link) != false) {
/**
* Wenn kein Fehler aufgetreten ist, geben
wir eine Meldung mit den Befehl echo
aus, dass die Daten erfolgreich
gespeichert wurden. Zusätzlich leeren
wir die Variable $_POST['vorname']
und $_POST['name'], damit das
Formular automatisch wieder leer ist.
*/
echo 'Der Eintrag wurde gespeichert!';
$_POST['vorname'] = '';
$_POST['name'] = '';
} else {
/**
* Sollte ein Fehler beim Speichern des
Eintrags aufgetreten sein, geben wir
eine entsprechende Fehlermeldung aus.
*/
echo 'Der Eintrag wurde nicht
gespeichert!';
}
/**
* Jetzt schließen wir die aktuelle Verbindung
zur MySQL Datenbank mit dem Befehl
mysql_close(), hierzu geben wir die
aktuelle Verbindungskennung, die wir in
der Variable $link gespeichert haben als
ersten Parameter an.
*/
@mysql_close($link);
}
/**
* So zu guter letzt benötigen wir noch das
Formular, was wir absenden möchten. Dies
erstellen wir und geben dies mit Echo aus. Da
dieses Formular dynamisch generiert wird und
mehrere Variablen hat, trennen wir das
Formular nicht von PHP Code.
*
* Als erstes benötigen wir bei unserem Formular,
die Angabe wohin das Formular gesendet werden
soll. Hierzu geben wir action="" die Adresse
über die globale Servervariable
$_SERVER['PHP_SELF'] an, dass die gleiche
Adresse verwendet werden soll, wie das
aktuelle Script aufgerufen wurde. Da man an
dieser Stelle zum Beispiel Variablen an die
Adresse hängen könnte, wandeln wir mit der
PHP Funktion htmlspecialchars() alles
Sonderzeichen in den entsprechenden HTML Code um.
*
* Nun müssen wir noch zusätzlich in form Tag die
Übertragungsmethode angeben, dies machen wir
mit method="post" und dadurch werden auch nur
Postdaten an unser Script übermittelt. Als
nächstes müssen wir noch zusätzlich die zwei
Formularfelder ausgeben und den
entsprechenden Absender Button, um das
Formular abzusenden.
*/
echo '<form
action="'.htmlspecialchars($_SERVER['PHP_SELF'
]).'" method="post">';
echo ' Vorname: <input type="text" name="vorname"
value="'.htmlspecialchars($_POST['vorname']).'
"/><br/>';
echo ' Name: <input type="text" name="name"
value="'.htmlspecialchars($_POST['name']).'"/>
<br/><br/>';
echo ' <input type="submit" name="senden"
value="absenden"/>';
echo '</form>';
?>
Wenn man nun dieses PHP-Script aufruft, bekommt man ein ganz einfaches Formular angezeigt, wo man den Namen und Vornamen eingeben kann. Zusätzlich wird darunter ein Absendebutton angezeigt. Natürlich ist dieses Formular nicht unbedingt das schönste, es soll einfach zu Demonstration und Verständlichkeit dienen. Sollte eine Frage aufkommen, so würde ich mich sehr freuen, wenn ihr euch in unserem Forum anmeldet.
So wie gewohnt, noch die verwendeten PHP Funktionen, wofür wir bereits eine Anleitung geschrieben haben.
Echo - Text ausgeben mit PHP.
IF Anweisung - Erklärung was einer IF Anweisung ist.
GET und POST - Weitreichende Erklärung, wie man Daten an ein Formular übergibt.
isset() - Die Erklärung zu der PHP Funktion isset().