Hattet ihr euch schon längere Zeit vorgenommen PHP zu lernen, hattet aber keine Möglichkeit richtig ins Thema zu kommen?
Für alle PHP-Anfäger werde ich nun ein kleines Tutorial schreiben, welches das Erstellen von Datenbanken (bzw Tabellen) und das Benutzen selbiger mit PHP erklärt. Vorwissen hierzu ist nicht benötigt, könnte sich jedoch positiv auf die Arbeitsschritte auswirken.
.: Voraussetzungen :.
- Webspace mit einer vorinstallierten Datenbank (für dieses Tut werde ich funpic.de benutzen)
- aktuelle PHP-Version (bisher hatte ich noch keine Probleme bei den Versionen)
- min. 20 Minuten Bearbeitungszeit
.: Vorbereitungen :.
Ich möchte hier noch einmal kurz anmerken, dass dieses Tutorial nur den Einstieg in die PHP-Programmierung erklärt und auch keine näheren Informationen für selbiges bietet.
Für dieses Tutorial nehmen wir mal an, dass wir eine Seite erstellen möchten, welche die IP's und Browsereigenschaften der User loggt und in unsere Datenbank speichert, damit wir uns diese später z.B. für Statistiken anschauen können.
Hierfür müssen wir erstmal unsere Datenbank besichtigen, da wir funpic.de als Freehoster für dieses Beispiel nehmen, werde ich an diesem Punkt keine weiteren Informationen zur Registrierung und Einrichtung bei genanntem Hoster geben. Wichtig ist nur, dass ihr den FTP- und MySQL-Zugang aktiviert habt damit wir damit arbeiten können.
Als nächstes müssen wir uns die Datenbank ansehen, am besten geht dies mit "phpmyadmin", welch Zufall das funpic schon solch eine Oberfläche bereitstellt unter:
http:/ /www.phpmyadmin.username.prefix.funpic.de
Erklärung:
- username: dein funpic-Account-Name
- prefix: die ersten beiden Buchstaben von deinem funpic-Account-Name
Beispiel: phpmyadmin.christian.ch.funpic.de
Hier müsst ihr euch mit euren Datenbank-Daten einloggen und könnt danach die phpmyadmin-GUI erblicken. Hier werden wir zunächst etwas Vorarbeit leisten, bevor wir uns an das PHP-Schreiben begeben.
.: MySQL-Datenbank :.
Bevor wir anfangen Tabellen zu erstellen, hier eine kleine Übersicht über die GUI;
- im linken Menü kann man die Tabellen sehen, die bisher in dieser Datenbank erstellt wurden. Rechts im Frame werden die kontext-bezogenen Informationen angezeigt.
Kommen wir wieder zurück zu unserem Beispiel; wenn wir die IP's und die Browsereigenschaften unserer User in die Datenbank speichern möchten, brauchen wir zuerst eine Tabelle, in jener wir unsere Daten speichern möchten.
Klicke hierzu in der Liste links auf den Datenbanknamen, nun sollte rechts im Frame sämtliche Tabellen angezeigt werden, die bisher in der Datenbank existieren.
Mithilfe dieses Formulars können wir schnell und bequem eine neue Tabelle anlegen, hierfür müssen wir überlegen wie viele Felder die Tabelle haben muss; da wir die IP und Browsereigenschaften speichern möchten, sollten es eigentlich 2 Felder sein, da wir jedoch eine fortlaufende Nummerierung unter einem ID mit einbauen möchten, nehmen wir 3 Felder. Im Feld "Name:" tragen wir "userlogs" ein.
Nach dem klick auf "OK" erscheint nun im rechten Frame ein weiteres Formular, welches es ausgefüllt werden möchte.
Dieses enthält 3 Zeilen, also unsere 3 Felder, die wir nun gemäß den Daten, die wir speichern möchten, modifizieren müssen.
Die Erste Zeile werden wir verwenden um den Feldern dieser Tabelle eine ID hinzuzufügen, mit der man später viel bequemer arbeiten kann, da die ID nur einmal pro Feld vergeben wird. Außerdem muss die ID forlaufend sein, also bei jedem Tabellen-Eintrag um 1 erhöht werden. Dies erledigt das Extra-Attribut "auto_increment". Außerdem stellen wir die ID als Primärschlüssel ein und stellen bei "Attribute" auch "unsigned" ein.
Da die ID ein reiner Zahlenwert ist, nehmen wir bei "Typ" den Wert "INT" für Integer; dies beschreibt einen Zahlenwert.
Das nächste Feld wird die IP's speichern, also nennen wir es "IP", geben den Typ "varchar" da wir genau wissen, welche Länge dieser String hätte; wir tragen bei "Länge/Set" 15 ein, weil eine IP-Adresse maximal 15 Zeichen enthalten kann. Die restlichen Einstellungen lassen wir so.
Das dritte Feld verwenden wir für die Browserinformationen und nennen es "Browser", da wir jedoch nicht immer genau wissen was wir zurückgegeben bekommen, nehmen wir als Typ "text", hierfür braucht man keine bestimmte "Länge/Set" eingeben und lassen auch die weiteren Einstellungen wie gewohnt.
Hier könnt ihr euch noch mal vergewissern das ihr alles richtig eingegeben habt:
Nun auf "Speichern" klicken und ihr habt soeben eure eigene Tabelle erstellt, glückwunsch
Somit sind die Vorbereitungen abgeschlossen und wir können uns den PHP-Part anschauen.
.: PHP-Seiten :.
Eine .php-Seite wird vom Server geparst und dann zum Clienten übertragen. Der PHP-Quelltext kann nicht eingesehen werden, somit ist man auf der sicheren Seite da man nicht befürchten muss das der Quelltext geklaut wird (natürlich nützt auch das nichts wenn jemand euer FTP-Passwort herausfindet und sich die php-datei runterlädt...)
Da wir alle wissen, das funpic.de auch PHP-Scripte unterstützt, werden wir nun unsere erste PHP-Datei erstellen. Hierfür kann ein normales Textprogramm ausreichen, da eine PHP-Seite nur Text/Plain enthält. Natürlich könnt ihr euren favorisierten Editor verwenden, für dieses Tutorial greife ich auf das windows-eigene Notepad zurück.
Eine PHP-Seite kann ganz normalen HTML-Code enthalten, also fangen wir wie gewohnt an das HTML-Grundgerüst aufzubauen und werden ganz kurz einen kleinen Test ausführen, um zu sehen ob alles richtig läuft.
Code:
<html> <body> <b>Willkommen zu meiner ersten PHP-Seite!</b> </body> </html>
Ihr werdet nicht viel sehen außer den dick-gedruckten Text. Nun werden wir mal einen weiteren Text einfügen, jedoch mit PHP:
PHP Code:
<html>
<body>
<b>Willkommen zu meiner ersten PHP-Seite!</b>
<?php
echo "<br>";
echo "<b>Ich hoffe euch gefällt es in meiner bescheidenen Seite</b><br><br>";
?>
</body>
</html>
Nun möchten wir jedoch mit unserer Datenbank arbeiten. Hierfür müssen wir im PHP-Teil unsere Datenbank deklarieren.
Hierfür erstellen wir im Header ein PHP-Teil wo wir zur Datenbank connecten.
PHP Code:
<?php
mysql_connect("localhost","Username","Password");
mysql_select_db("Datenbankname");
?>
<html>
<body>
<b>Willkommen zu meiner ersten PHP-Seite!</b>
<?php
echo "<br>";
echo "<b>Ich hoffe euch gefällt es in meiner bescheidenen Seite</b><br><br>";
?>
</body>
</html>
1. Den speicherort der Datenbank (in den meisten fällen "localhost" wie bei funpic.de der Fall ist)
2. Der funpic.de Benutzername (die gleiche die ihr oben verwendet habt, um phpmyadmin zu öffnen)
3. Das Datenbank-Passwort (das gleiche die ihr oben verwendet habt, um euch im phpmyadmin einzuloggen)
Der Befehl mysql_select_db wählt die Datenbank aus, mit der wir arbeiten. Da funpic nur das erstellen einer einzigen Datenbank erlaubt, und diese den gleichen Namen wie euer Login-Name trägt, gebt ihr hier als Parameter einfach selbiges ein.
Wenn ihr nun die Seite speichert und hochladet, werdet ihr an der Seite keine Änderung feststellen, da die Befehle im Hintergrund laufen, solltet ihr keine Fehlermeldungen angezeigt bekommen habt ihr alles richtig eingestellt und die Seite ist mit der Datenbank verbunden.
Nun kümmern wir uns um die User-Daten.
.: Daten in die Datenbank speichern :.
Bevor wir uns an das Speichern von Daten machen, müssen wir uns Überlegen welche Daten von welchem User gespeichert werden soll. Um unnötigen Speicherverbrauch vorzubeugen, werden wir es so einrichten, dass nur die IP von jenen Usern geloggt werden, die noch nicht in der Datenbank registriert sind. Hierfür werden wir mit einer simplen IF-Anweisung die aktuelle IP mit jener vergleichen, die schon in der Datenbank vorhanden ist.
Darüber hinaus müssen wir kontrollieren ob schon Felder in der Tabelle angelegt sind, da wir sonst mit der IF-Anweisung verfälschte Ergebnisse bekommen würden. Hier ist der der Quelltext zum Einspeisen der Daten, die Erklärung der Zeilen folgt darunter:
PHP Code:
<?php
mysql_connect("localhost","phptutorial","password");
mysql_select_db("phptutorial");
?>
<html>
<body>
<b>Willkommen zu meiner ersten PHP-Seite!</b>
<?php
echo "<br>";
echo "<b>Ich hoffe euch gefällt es in meiner bescheidenen Seite</b><br><br>";
$current_ip = $_SERVER['REMOTE_ADDR'];
$vergleich = mysql_query("SELECT IP FROM userlogs");
$status = 1;
if (mysql_num_rows($vergleich))
{
while($felder = mysql_fetch_object($vergleich))
{
if( $felder->IP == $current_ip ) $status = 0;
}
}
if ($status == 1)
{
echo "User-Daten konnten in der Datenbank nicht gefunden werden<br>Speichere Daten...<br>";
mysql_query("INSERT INTO userlogs (IP,Browser) VALUES ('$current_ip','$_SERVER[HTTP_USER_AGENT]')");
echo "Daten wurden gespeichert<br>";
}
else
{
echo "User-Daten wurden in der Datenbank gefunden, Daten werden nicht gespeichert.<br>";
}
?>
</body>
</html>
$current_ip = $_SERVER['REMOTE_ADDR'];
Diese Variable beinhaltet die aktuelle IP des Besuchers.
$vergleich = mysql_query("SELECT IP FROM userlogs");
Um Daten aus der Datenbank auszulesen, wird der MySQL-Befehl "SELECT" angewendet. Hierfür müssen mehrere Parameter angegeben werden, hier wurde nach dem SELECT der Feldname angegeben, welches wir auslesen möchten. "FROM" beschreibt die Tabelle, aus der das Feld ausgelesen werden soll, in unserem Fall heißt die Tabelle "userlogs".
Der Befehl "mysql_query" bearbeitet nun diesen Befehl und übergibt die Werte der Variable "$vergleich".
$status = 1
Diese Variable hat im Grundzustand den Wert "1" und wird später bei Abfragen verwendet.
if (mysql_num_rows($vergleich))
Diese IF-Abfrage erwartet als Anweisung irgendeinen Vergleich. Mittels "mysql_num_rows" wird ermittelt, ob in der Tabelle überhaupt Felder angelegt wurden. Wenn dies der Fall ist, wird der Code in dem ersten Block ausgeführt, der mit den Klammern { und } eingeschlossen werden. Sollte jedoch in der Tabelle kein Feld existieren (was im Anfangszustand dieses Tutorials ja der Fall ist) wird die IF-Abfrage verlassen ohne das der Code ausgeführt wurde. Dies hat zur Folge, das die Variable $status immer noch den Wert "1" behält.
while($felder = mysql_fetch_object($vergleich))
Diese Zeile hat viele Informationen die wir erst zerlegen müssen. Hier befindet sich eine while-Schleife, welche solange den Code wiederholt den man zwischen die { und } eingibt, solange das Argument in den runden Klammern wahr ist.
Hierfür wird die Variable $felder deklariert und mit dem Befehl mysql_fetch_object die jeweiligen Objekte zugeordnet, die bei der Anfrage weiter oben zurückgeliefert wurde. Somit enthält nur $felder bei jedem Schleifendruchgang die Felder in unserer Tabelle.
Die While-Schleife wird solange wiederholt, bis keine Felder mehr der Variable $felder zugewiesen werden können und somit dieses Argument unwahr wird.
if( $felder->IP == $current_ip ) $status = 0;
Die Variable $felder beinhaltet alle IP-Felder, die in unserer Tabelle (userlogs) enthalten sind. Somit kann man die Variable $felder nicht direkt mit der aktuellen IP vergleichen. Deswegen muss man im nächsten If-Strang jedes einzelne IP-Feld mit der jetzigen IP des Besuchers vergleichen. Hierfür schreibt man hinter $felder ein Pfeil "->" und gibt den Feldnamen an, den man verwenden möchte. Da die Variable $felder in jedem Schleifendurchgang immer ein neuen IP-Feld zugewiesen bekommt, kann man mit der IF-Abfrage ziemlich bequem abfragen, ob sich eine dieser IP's aus der Datenbank mit der jetzigen Besucher-IP gleicht. Wenn dies der Fall sein sollte, wird der Variable $status der Wert "0" zugewiesen.
if ($status == 1)
Eine simple Abfrage ob die Variable $status den Wert "1" hat. Wenn dies der Fall sein sollte, wird der erste Code-Block ausgeführt, wenn jedoch die Variable den Wert "0" (oder einen belieb anderen Wert) haben sollte, wird der Code-Block bei "else" ausgeführt.
mysql_query("INSERT INTO userlogs (IP,Browser) VALUES ('$current_ip','$_SERVER[HTTP_USER_AGENT]')");
Sollte der Wert für $status gleich "1" sein, wird dieser Code ausgeführt. Dieser enthält ziemlich viele Informationen die wir uns aufteilen müssen.
Auch hier befindet sich wieder ein mysql_query, welcher eine Anfrage zum Server schickt um den Code zu bearbeiten.
Um nun was in die Datenbank speichern zu können, wird der MySQL-Befehl "INSERT INTO" verwendet. Auch dieser erwartet einige Parameter; nach dem "INSERT INTO"-Befehl folgt der Name der Tabelle in die wir die Daten einspeisen möchten. In runden Klammern geben wir dann an, welche Felder beschrieben werden sollen; in dem obigen Beispiel sollen die Felder "IP" und "Browser" beschrieben werden.
Hinter diesem Klammer-Ausdruck folgt der Befehl "VALUES", wo wir nun die Werte für die zuvor bestimmten Felder eingeben müssen. Auch hier werden runde Klammern verwendet und nach der zuvorigen Reihenfolge die Werte bestimmt. Der erste Parameter ist $current_ip, welche die jetzige IP des Benutzers übergibt. Der zweite Paremeter ist ein PHP-Befehl, welcher die Browserinformationen des aktuellen Benutzers übergibt.
Damit wäre auch dieser relativ kurze Quelltext erklärt.
Speichert die Datei und ladet diese wieder hoch um die Funktion zu testen. Bei eurem ersten Besuch sollten nun eure Daten gespeichert werden, sollte hierfür die jeweilige Nachricht ausgegeben werden, hat alles funktioniert.
Sehen wir uns doch mal das Ergebnis in unserer Datenbank an, dazu wechseln wir wieder zurück zur phpmyadmin-Oberfläche und wählen unsere Tabelle "userlogs" aus.
Oben bei den Karteireitern sollte "Anzeigen" anklickbar sein, da nun Informationen in die Tabelle gespeichert wurden. Wenn dies nicht der Fall ist, aktualisiert die Seite, falls ihr seit dem Verlassen von phpmyadmin bei der Vorbereitung diesen so belassen habt.
Wenn ihr alles richtig gemacht habt, könnt ihr nun die einzelnen Felder erkennen, die mit der ID fortlaufend Nummeriert werden, gefolgt von der IP und den Browserinformationen. Probiert etwas mit der PHP-Seite herum, bittet eure Freunde die Seite zu besuchen um die Funktion zu testen.
Christian






