Was kann man mit PHP machen?

Werbung
Was kann man mit PHP machen?
Artikel: Was ist PHP?
Möchte man dynamische Seiten erstellen, so braucht man PHP. PHP steht für "PHP: Hypertext
Preprocessor".
PHP Befehle kann man direkt bei den HTML-Befehlen hinschreiben, allerdings muss die Dateiendung
.php (oder .php3 / .php4) sein, sonst kann der Befehl nicht ausgeführt werden.
PHP ist eine serverseitige Programmiersprache. Sie wird am Server "geparsed", das heißt, der Code
wird vom Server direkt in z.B. einen HTML-Code umgewandelt und nur der HTML-Code wird dann an
den Browser des Besuchers geschickt. Der Besucher kann also den PHP-Code niemals einsehen. Er
kann ihn auch nicht runterladen (per Downloadmanager), außer wenn er ein FTP-Programm benutzt
(dann braucht er aber das Passwort vom Server).
Deswegen ist PHP ideal geeignet, Passwörter zu verstecken, weil diese Passwörter dann keiner
Einsehen kann.
Weil PHP eine serverseitige Programmiersprache ist, kann man sie auch nicht so einfach mit dem
Browser aufrufen. Um einen PHP-Script aufzurufen, muss man sich erst auf dem eigenem PC einen
virtuellen Server installieren. Dieser virtuelle Server muss den sogenannten PHP Intepreter enthalten,
dieser führt die PHP Scripts aus und das Ergebnis, z.B. eine HTML-Seite, wird dann an den Besucher
gesendet.
PHP-Triad
Um einen Virtuellen Server auf die eigene Festplatte zu kommen, muss man eigentlich einige Sachen
Installieren und diese auch noch Konfigurieren. Dies ist sehr schwer, und zum Glück gibt es da noch
PHP-Triad. PHP-Triad installiert einen Apache Server mit PHP und MySQL Unterstützung. Leider kostet
die neuste Version davon Geld, aber die älteren Version findet man dennoch im Netz, und die einzelnen
Sachen kann man leicht updaten.
Siehe: Anfang
Auch ein Vorteil ist, das PHP nicht Browser abhänig ist, also wenn der Script mit ihrem Browser
funktioniert, dann funktioniert er auch bei allen anderen Browsern. Dadurch muss man seinen Code
nicht mehr aufwendig testen.
Dies bedeutet aber nicht, dass das Ergebnis des Codes bei allen gleich Aussieht, denn jeder Browser
wandelt die HTML-Befehle anders um.
PHP ist ein sogenannter Interpreter, dies bedeutet, das PHP den Code von oben nach unten liest.
Deswegen muss man beim Schreiben des Codes immer auf die zeitliche Abfolge achten.
PHP ist frei verfügbar und lizenzfrei benutzbar. Entwickelt werden Sprache und Interpreter von der so
genannten PHP Group, einem Projektzusammenschluss von Programmierern.
Was kann man mit PHP machen?
Mit PHP kann man viel machen, auch wenn man die Sprache kaum beherrscht, kann man sie dennoch
sinnvoll in eine Seite einbauen.
Fast jedem ist bekannt, das man für ein Forum oder ein Gästebuch PHP braucht, aber mit PHP kann
man auch News-Scripts, Links-Verwaltungen, Userbereiche, Chat-Systeme, Suchmaschinen,
Statistiken, Rechnungen und vieles mehr machen.
Es ist sogar möglich, dass eine super große Homepage aus 1 PHP-Seite besteht, aber dennoch aus
unendlich Seiten besitzt.
So etwas kann man per Datenbank (z.B MySQL) machen. Der User ruft dann nur bestimmte Einträge
aus der Datenbank auf.
Auch wenn man keine Datenbank besitzt, ist dies dennoch möglich, allerdings verliert man dann leicht
den Überblick.
Seite: 1
Was kann man mit PHP machen?
PHP installieren
PHP ist eine serverseitige Scriptsprache, das heißt, damit man PHP Programme bzw. die PHP Scripts
ausführen kann, benötigt man einen Webserver. Zum Glück geht das installieren leichter als es sich
anhört.
Mit XAMPP installieren wir einen Apache Server auf den eigenen Rechner, dazu noch PHP, MySQL und
vieles mehr.
Lad dir auf der angegeben Seite die Installer-Version für Windows (sofern dies dein Betriebssystem
sein sollte) runter.
Solltest du keinen Breitbandanschluss besitzen, reicht auf die Lite-Version von XAMPP. Diese bietet
allerdings keinen Installer an, deswegen musst du nach dem Entpacken der Archives (entweder Zip
oder Exe-Archiv) die setup_xampp.bat aufrufen.
Der Installer von XAMPP fragt, wohin man das Packet installiert haben möchte. Ich habe z.B.
c:\xampp\ angegeben, andere Pfade sind auch möglich.
Möchten wir jetzt unsere PHP-Scripts anschauen, so kopieren/speichern wir sie in den htdocs Ordner,
z.B. liegt er so: c:\xampp\xampp\htdocs.
Anschließend starten wir Xampp, das geht, indem wir die xampp_start.exe aufrufen und rufen unsere
Scripts dann mit dem Internet Browser auf.
Wenn wir den normalen Dateipfad (c:\xampp\...) benutzen wird der enthaltene PHP-Code nicht
ausgeführt, deshalb müssen wir die Scripts über den Webserver abrufen.
Dort wählen wir dann die PHP Datei aus und schon wird der Script ausgeführt.
Tipp: Lösche die enthaltenen Dateien im Ordner htdocs, die Ordner können erhalten bleiben. So
werden die PHP Dateien in einer Liste angezeigt.
Wenn eine Fehlermeldung erscheint, dann versuche mal die komplette URL zur Seite anzugeben. Wenn
ihr Unterordner im htdocs Ordner habt, dann muss der Name auch in der URL angegeben werden.
Das war schon das ganze Geheimnis der Server Installation.
Wenn man jetzt Xampp installiert hat, und den Apache Server startet, so ist dort normalerweise die
aktuellste PHP Version installiert.
Erste Schritte
Um zu sehen, ob auf einem Server überhaupt PHP installiert ist, benötigt man eine PHP-Datei (z.B.
phpinfo.php) mit folgendem Inhalt:
<?php
phpinfo();
?>
Diesen Code kannst du einfach in einem Texteditor, z.B. Notepad einfügen. Danach klickst du auf
speichern, und gibst als Dateinamen phpinfo.php an.
Bitte achte darauf, dass Notepade diese Datei nicht als Textdatei speichert.
Dann kopierst du die Datei in den Ordner htdocs.
Ruft man diese Seite jetzt auf (http://localhost/phpinfo.php), wird angezeigt, ob auf diesem Server
PHP installiert ist oder nicht. Ist PHP installiert, werden mehrere Tabellen angezeigt, in welchen
Seite: 2
Was kann man mit PHP machen?
aufgelistet wird, was installiert ist und was nicht, unter anderem welche PHP-Version auf dem Server
installiert ist (steht ganz oben).
Ist kein PHP Installiert, wird entweder nichts angezeigt oder eine Fehlermeldung wird ausgegeben, evt.
wird uns die Datei auch zum Download angeboten.
PHP-Einbinden
In einer PHP-Datei können sowohl HTML-Befehle, als auch PHP-Befehle enthalten sein. Die HTMLBefehle schreiben wir wie gewohnt in die PHP-Datei, so wie wir es aus den HTML-Dateien kennen.
Möchte man jetzt in die PHP-Datei PHP-Befehle einbinden, so muss man erst mit einer Einleitung
bestimmen, dass jetzt ein PHP-Script folgt.
Dafür gibt es 3 Möglichkeiten.
Die kürzeste Möglichkeit ist <?. Dazu muss allerdings eine bestimmte Einstellung gesetzt sein
(short_open_tag).
Ist die Einstellung off, benötigt man <?php.
Danach folgen die PHP-Befehle.
Als Abschluss des PHP-Scripts (bei <? und <?php) benötigen wir noch ein ?>.
Es gibt auch eine längere Version, diese sieht so aus:
<script language="php"> PHP-Anweisungen </script>
Diese Variante würde ich nicht empfehlen, da sie keine Vorteile bringt und einfach nur länger ist.
Text ausgeben
Als erstes lernen wir, wie man einen normalen Text mit PHP ausgibt.
Dies geht mit Hilfe von echo bzw. print. Bei unseren Scripts wird immer echo benutzt.
Wir legen eine neue Datei an (z.B. hallo.php) und geben in diese folgenden Inhalt ein:
<?php
echo "Hello World";
?>
Wird nun diese Datei mit dem Browser aufgerufen, so erscheint als Ausgabe: Hello World.
Dies steht auch genauso im Browser-Quelltext (Quelltext anzeigen), aber ohne die PHP-Anweisungen.
(die spitzen Klammern und was so dazugehört).
Dies bedeutet, der eigentliche PHP-Code ist nicht sichtbar und kann somit auch nicht kopiert und
geklaut werden.
Wie schon oben erklärt, rufen wir ein PHP-Script immer in der ersten Zeile mit <?php auf.
In der nächsten Zeile folgt dann die PHP-Anweisung
echo "Hello World";
echo ist die Anweisung, einen bestimmten Text auszugeben.
Dieser Text steht zwischen den beiden Anführungszeichen. Das Semikolon (;) beendet die Funktion
echo. Fast jeder Befehl (bis auf wenige Ausnahmen) enden mit einem Semikolon (;).
Mit ?> beenden wir das PHP-Script.
Seite: 3
Was kann man mit PHP machen?
Alles zwischen den Anführungszeichen gilt als Text und kann frei definiert werden, auch HTML-Befehle
sind möglich z.B.
echo "<b>Hello World</b>";
Damit würde das Hello World als Fett ausgegeben werden.
Möchte man jetzt Hello "World" ausgeben lassen, dann denkt man zuerst an folgende Schreibweise:
<?php
echo "Hello "World"";
?>
Allerdings erhalten wir dann die folgende Fehlermeldung:
Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in
C:\xampp\xampp\htdocs\hallo.php on line 2
Diese Fehlermeldung ist sehr brauchbar, denn daran ist erkennbar, wo der Fehler begangen wurde und
meistens auch welcher.
on line 2 zeigt an, dass der Fehler in Zeile 2 liegt.
In dieser Zeile steht diese Anweisung:
echo "Hello "World"";
Also muss hier irgendetwas falsch sein!
Eigentlich ist es ganz logisch.
Der Befehl echo startet die Ausgabe immer ab dem 1. Anführungszeichen und gibt alles bis zum 2.
Anführungszeichen aus.
Da aber in dieser Befehlszeile insgesamt 4 Anführungszeichen zur Textausweisung benutzt werden, ist
keine klare Definition gegeben. Deshalb erfolgt diese Fehlermeldung und nicht die gewünschte
Ausgabe.
Also müssen wir die Anführungszeichen bei "World" mit einem Maskierungszeichen versehen.
Dazu benutzen wir den Backslash (\).
Das Script sieht dann so aus:
<?php
echo "Hello \"World\"";
?>
Dieses Maskierungszeichen muss vor jedem Anführungszeichen stehen, das als Text ausgegeben
werden soll.
Aber was ist wenn wir jetzt einen Backslash ausgeben möchten ? Auch dies geht, allerdings
wird dafür wieder ein Maskierungszeichen benötigt. Dazu nehmen wir einfach ein zweiten Backslash.
Dies sieht dann so aus:
<?php
echo "c:\\xampp";
?>
Seite: 4
Was kann man mit PHP machen?
Die Ausgabe ist dann: c:\xampp
PHP Seiten können aus PHP Scripts und HTML Befehlen bestehen, z.B. so:
<h2>Herzlich Willkommen</h2>
<?php
echo "Auf meiner Internetseite";
?>
Dies war auch schon alles, was man über den Befehl echo wissen muss.
Wozu brauche ich denn diesen echo Befehl?
Man kann doch einen Text ja auch einfach mit HTML ausgeben.
Der Nachteil von HTML ist, dass keine dynamischen Texte ausgegeben werden können.
Anders bei PHP.
Auch wenn man PHP perfekt beherrscht, alle Texte werden mit echo (o.ä.) ausgegeben.
Das Besondere daran ist, dass diese Texte dann meistens dynamisch, z.B. aus einer Datenbank,
erzeugt werden.
Allerdings steuert man dann die Ausgabe, mit Hilfe von bestimmten Variablen. Der Besucher
bestimmt dann meistens selbst, welchen Text er erhält.
So ist das auch bei einem Forum. In der Titelzeile stehen bei Foren fast immer Werte (z.B.
?id=131&seite=2). Diese Werte bestimmen, welche Ausgabe der Besucher erhält.
Kommentare
Um in einem PHP-Script einen Kommentar einzufügen, oder um einen Befehl zu deaktivieren, benutzt
man # (Raute) oder // (2 Shlashs)
Alles was nach diesen Zeichen steht, wird nicht ausgeführt und ist in der Ausgabe auch nicht sichtbar.
Durch einen Zeilenumbruch beenden wir den Kommentar.
Kommentare sollten öfters benutzt werden, da man dadurch die Möglichkeit hat, den Überblick zu
bewahren. Auch wenn man z.B. nach zwei Monaten an dem Script etwas ändern möchte, helfen diese.
<?php
//Dies ist ein Kommentar
#Ausgabe des Text
echo "Hallo Welt";
?>
Manchmal ist es auch sinnvoll ein Kommentar über mehrere Zeilen zu haben, wenn man z.B. einen
Programmabschnitt auskommentieren möchte.
Solch ein Kommentar startet mit /* und endet mit */:
<?php
/* Kommentar startet
Ausgabe des Textes
Ende des Kommentares */
echo "Hallo Welt";
?>
Seite: 5
Was kann man mit PHP machen?
PHP Variablen
In PHP werden Texte oder auch Zahlen in sogenannten PHP Variablen bzw. einfach nur Variablen
gespeichert, um diese dann später mit Hilfe von echo wieder auszugeben.
Variablen in PHP beginnen immer mit einem Dollarzeichen ($),
direkt gefolgt vom Variablen-Namen, danach ein "Gleichheitszeichen" (=) und anschließend der Text in
Anführungszeichen (") eingebunden. Am Ende das Semikolon als Befehlsabschluss(;).
Den Variablen kann man einen beliebig passenden Namen geben, allerdings muss auf Groß- und
Kleinschreibung geachtet werden.
Ich würde die Variablen immer klein schreiben, damit kein Durcheinander und damit auch keine
Fehlerquellen entstehen können.
Eine Variable in PHP kann z.B. so aussehen:
<?php
$name = "Nils Reimers";
?>
In diesem Beispiel wird die Variable $name mit dem Inhalt Nils Reimers definiert.
Zu beachten dabei ist, dass Variablennamen mit einem Buchstaben oder einem Unterstrich beginnen.
Zahlen dürfen als Anfangszeichen nicht benutzt werden.
Wenn wir eine Variable doppelt "definieren", so überschreiben wir den Inhalt der Variable. Per Echo wird
dann nur der aktuelle Inhalt ausgegeben.
Natürlich muss der echo-Befehl nach der Variable-Definition stehen, da PHP eine Interpreter-Sprache ist
und den Code zeilenweise von oben nach unten abarbeitet.
Wenn echo vor der Variable steht, so versuchen wir eine nicht definierte Variable auszugeben und
erhalten eine leere Ausgabe.
Sofern bestimmte Einstellungen gesetzt sind, kann es sogar passieren, dass ein Angreifer beliebigen Text
einschleusen kann.
Zur Ausgabe benötigt man natürlich wieder den Befehl echo.
Das Script für dieses Beispiel sieht dann so aus:
<?php
$name = "Nils Reimers";
echo "Mein Name ist $name";
?>
Als Ausgabe erhalten wir:
Mein Name ist Nils Reimers
Wir können den Inhalt von einer Variable natürlich auch wieder überschreiben, dazu weisen wir der
Variable einfach den neuen Wert zu:
<?php
$name = "Paul Meier";
echo "Zuerst heiße ich $name <br>";
$name = "Stefan Müller";
echo "Dann ist mein Name $name";
?>
Die Ausgabe wäre dann:
Zuerst heiße ich Paul Meier
Dann ist mein Name Stefan Müller
Seite: 6
Was kann man mit PHP machen?
Bisher wäre diese Funktion nur bei sehr langen Texten interessant, möchte man z.B. eine Person an 10
verschiedenen Stellen ansprechen.
Wenn wir jedoch mit echo nur eine Variable abrufen (keinen weiteren Text), dann können (müssen
aber nicht) wir die Anführungszeichen weglassen.
Der Code:
<?php
$name = "Nils Reimers";
echo $name;
?>
Man kann auch an eine bereits vorhandene Variable eine weitere Variable, oder einen Text anhängen.
<?php
$name = "Nils ";
$name .= "Reimers";
echo $name;
?>
Ausgabe: Nils Reimers
Soll eine Variable oder ein Text an eine bereits bestehende Variable "angehängt" werden, geschieht
dies mit einem Punkt vor dem Gleichheitszeichen. Dadurch erkennt PHP, dass der nach dem
Gleichheitszeichen folgende Text oder die folgende Variable an die bestehende Variable angehängt
werden soll.
Eine Variable kann theoretisch unendlich oft verlängert werden.
Dies können wir auch direkt in dem echo benutzen:
<?php
$name = "Nils";
echo "Mein Name ist ".$name." Reimers";
?>
Hier haben wir eine zusammengesetzte Ausgabe. Zuerst geben wir Mein Name ist aus, nach den
Anführungszeichen setzen wir einen Punkt und dann die Variable.
Nach der Variable können wir entweder mit Semikolon die Ausgabe beenden, aber hier haben wir noch
den Text Reimers angehängt.
Dies geht selbstverständlich auch mit Variablen:
<?php
$farbe = "rotes";
$text = "Wir haben ein ".$farbe." Haus";
echo $text;
?>
Diese Methode wird später noch des öfteren benutzt.
Rechnen mit Variablen
Natürlich kann man mit PHP auch rechnen.
Weist man einer Variable eine Zahl zu, so dürfen im Gegensatz zum Text hier keine
Anführungszeichen benutzt werden, da PHP dieses sonst als Text behandeln würde.
Seite: 7
Was kann man mit PHP machen?
<?php
$zahl1 = 10;
$zahl2 = 5;
?>
In diesen Variablen sind jetzt die Zahlen 10 und 5 gespeichert.
Jetzt lassen wir mal rechnen:
<?php
echo $zahl1 + $zahl2;
?>
Als Ergebnis erhalten wir die Summe der beiden Zahlen. Natürlich könnten wir dies einfach auch so
schreiben:
<?php
echo 10 + 5;
?>
Falls aber diese Zahlen zu einem späteren Zeitpunkt nochmals benutzt werden sollen, speichert man
diese am besten in Variablen.
<?php
$zahl = 1;
$ergebnis = $zahl + 5;
echo $ergebnis;
?>
Hier einige weitere Beispiele:
<?php
echo $zahl1 + $zahl2; //addieren
echo $zahl1 - $zahl2; //subtrahieren
echo $zahl1 * $zahl2; //multiplizieren
echo $zahl1 / $zahl2; //teilen/dividiern
echo pow($zahl1,$zahl2); //Zahl1 hoch Zahl2 (102)
echo sqrt(64); // Wurzel von 64
?>
Natürlich können auch diese Ergebnisse wieder in extra Variablen gespeichert werden.
Decrementieren und incrementieren
Um den Wert einer Variable um 1 zu erhöhen bzw. um 1 zu verkleinern, gibt es einen einfachen Trick:
<?php
$erhoehen = 1;
$erhoehen++;
echo $erhoehen;
?>
Ausgabe ist 2
<?php
$senken = 2;
$senken--;
echo $senken;
?>
Ausgabe ist 1
Wird an den Variablen-Namen (einer Zahlenvariable) ein doppeltes Pluszeichen in Form von ++
angehängt, so wird der Inhalt dieser Variable, also die Zahl incrementiert, das heißt um 1 erhöht.
Seite: 8
Was kann man mit PHP machen?
Wird dagegen ein -- verwendet, wird der Wert decrementiert, also um 1 gesenkt.
Variablentypen
Da PHP den Typ von Variablen selber festlegt, brauchen wir diesen Aspekt beim Programmieren nicht
zu betrachten. Aber in Foren (o.ä.), werden immer bestimmte Fachausdrücke benutzt, um
Variablentypen zu beschreiben.
Ein Variablentyp legt fest, welchen Inhalt eine Variable haben soll.
Da aber wie gesagt, PHP den Typen selber festlegt, kann sich der Typ der Variable auch ändern.
Es gibt dabei folgende Typen:
Integer: Eine Integer-Variable enthält nur Ganzzahlen, d.h. Zahlen ohne Komma.
String: Dies ist eine Variable, die einen Text/Satz/Wort enthält.
Float: Eine Dezimalzahl, d.h. eine Zahl mit Komma. Man verwendet aber einen Punkt als Komma.
Double: Das gleiche wie float, nur mit mehr Nachkommastellen.
bool: Dies sind die Werte true und false
Bsp:
<?php
$integer = 15; //Eine Integer Variable
$string = "Ganz viel Text"; //Ein String
$float = 15.5; //Eine Zahl mit einem Komma
$bool = true;
?>
Variablen übergeben
Diese Möglichkeit ist ein sehr wichtiges Detail von PHP, denn damit ist es möglich, z.B. vom Besucher
eingegebene Texte oder berechnete Daten auf die nächste Seite zu übertragen.
Es gibt zwei Methoden um Variablen zu übergeben,
POST und GET.
Als erstes schauen wir uns POST an.
Als Beginn erstellen wir eine Seite mit einem ganz normalen Formular.
Dieses könnte zum Beispiel so aussehen:
<form action="seite2.php" method="post">
Ihr Vorname:<br>
<input type="Text" name="vorname">
<input type="Submit" value="Absenden">
</form>
Für dieses Formular benötigen wir kein PHP, also können wir das Formular auch in einem normalen
HTML-Dokument speichern (z.B. seite1.html).
Es ist auch wichtig, dass wir allen Eingabefeldern einen einzigartigen Namen zuweisen, damit wir sie
nach dem Absenden auf der zweiten Seite auch korrekt abfragen können.
Haben zwei Felder den selben Namen, so wird nur das letztere Feld übertragen, da die vorige Eingabe
überschrieben wird (entspricht einer Neudefinition dieser Variable)
Seite: 9
Was kann man mit PHP machen?
Als nächstes erstellen wir seite2.php, an welche die Eingaben (hier: Ihr Name) gesendet wird.
Der Inhalt der seite2.php sieht dann so aus:
<?php
echo $_POST["vorname"];
?>
Wir erinnern uns an das Input-Feld mit dem Namen vorname auf seite1.html, genau diese Eingabe
rufen wir jetzt mit $_POST["vorname"]; ab.
Klicken wir auf der Formularseite auf Absenden, so wird seite2.php aufgerufen, dabei werden die
Daten übermittelt und von dieser ausgegeben.
Mit $_POST["vorname"]; können wir also die gesendeten Daten wieder abfragen.
["vorname"] gibt den Namen des abgefragten Inputfeldes aus der Formularseite an (hier vorname).
Diese Abfrage kann auch in einer Variable gespeichert werden, um diese dann später flexibler
weiterverarbeiten zu können.
Der Code dafür würde so aussehen:
<?php
$vorname = $_POST["vorname"];
echo $vorname;
?>
Soll $_POST["vorname"]; in einer Variable ($vorname) gespeichert werden, darf $_POST["vorname"];
nicht in Anführungszeichen stehen, da dieses sonst als Text interpretiert wird.
Natürlich können wir damit mehrere Eingaben abrufen. Dazu müssen die Befehle untereinander stehen.
<?php
$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
?>
Neben der POST Methode gibt es auch noch die GET Methode.
Bei der GET Methode werden die zu übergebene Daten an die URL angehängt.
Würden wir unser Formular mit der Methode GET verschicken, so würde die URL am Ende etwa so
aussehen.
seite2.php?vorname=Nils
Mit dem ? bestimmt der Browser, dass an die URL bestimmte Eingaben angehängt werden.
Das erste Wort nach dem Fragezeichen (vorname) ist der Feldname des Input-Feldes.
Alles was nach dem Gleichheitszeichen steht, ist die Eingabe (Nils).
Möchte man jetzt mehr als ein Feld übertragen, so werden die weiteren Feldnamen mit einem UndZeichen (&) angehängt.
Das sieht dann so aus:
Seite: 10
Was kann man mit PHP machen?
seite2.php?nachname=Reimers&vorname=Nils
Werden diese Eingaben abrufen, sieht das so aus:
<?php
echo $_GET["nachname"];
echo $_GET["vorname"];
?>
Natürlich können wir diese Daten jeweils auch wieder in einzelne Variablen speichern.
Ältere Versionen
Falls ihr eine ältere Version als 4.1.0 benutzt, müsst ihr noch die Langform der Befehle schreiben.
Anstatt $_POST["feldname"]; müsst ihr dann $HTTP_POST_VARS["Feldname"]; und aus
$_GET["Feldname"]; wird $HTTP_GET_VARS["Feldname"];.
Die Langformen werden genauso angewendet, wie die Kurzformen.
Allerdings sollte man, sofern es funktioniert, die Kurzform benutzen.
POST oder GET?
Wann benutzt man POST und wann GET ?
Die Frage ist leicht zu beantworten. Wenn man Eingaben aus einem Formular übergeben möchte, so
sollte man immer POST benutzen.
Warum ?
Mit GET werden die Eingaben der URL angehängt, dadurch ist die Textlänge eingeschränkt, außerdem
kann jeder im Browser-Verlauf an der URL erkennen, was als Daten übermittelt wurde, und bei einer
Passworteingabe ist das nicht so schön.
Vorteil von GET
GET wird benutzt, wenn man einfache Informationen übergeben möchte. Soll zum Beispiel mit dem
Klick auf einen Link eine Auswahl übergeben werden, so benutzt man die Methode GET
Ein Link in einer aufrufenden Seite könnte dann so aussehen:
<a href="buch.php?seite=1">Seite 1</a>
In diesem Beispiel würde die Eingabe 1 übermittelt werden.
Solche Links werden in PHP zur Programmierung dynamischer Seiten benutzt (z.B. Foren).
Wozu brauche ich später Variablen?
Nun haben wir jetzt die ersten Grundlagen über Variablen kennen gelernt.
Fragt man Einträge aus einer Datenbank oder Datei ab, werden diese zur besseren Übersicht erst in
Variablen gespeichert, dann aufbereitet (selektiert, sortiert, oder berechnet) und erst danach mit echo
wieder ausgegeben.
Außerdem werden wir später kennen lernen, wie man Variablen überprüfen kann, also ob z.B. der
Name Nils war oder ähnliches. Falls ihr hier Probleme habt, solltet Ihr diesen Abschnitt noch mal lesen.
Denn alles was jetzt folgt, fragt, überprüft und gibt Variablen aus.
Im nächsten Teil lernen wir die PHP if-Anweisung kennen.
Seite: 11
Was kann man mit PHP machen?
PHP: if Anweisungen
Bisher brachte PHP noch keinen großen Vorteil gegenüber HTML. Dies wird sich jetzt aber mit der ifAnweisung ändern.
Mit if können wir überprüfen, ob bestimmte Bedingungen erfüllt bzw. nicht erfüllt sind.
Das Gerüst für eine if-Anweisung in PHP sieht so aus:
<?php
if(Bedingung)
{
Anweisung
}
?>
Die Bedingung, die überprüft werden soll, wird in Klammern direkt nach dem einleitenden if gesetzt.
Danach folgt in geschwungenen Klammern die auszuführende Anweisung, wenn die Bedingung
erfüllt (wahr/true) ist.
Schauen wir uns einmal ein kleines Beispiel an:
<?php
$user = "Nils";
if($user == "Nils")
{
echo "Hallo Nils";
}
?>
Die IF-Anweisung überprüft, ob die Variable $user als Inhalt Nils hat. Trifft dies zu, so gibt die
Bedingung wahr (true) zurück und als Ausgabe erhalten wir: Hallo Nils.
Zu beachten ist hier, dass zwei Ist-Gleich Zeichen benutzt werden. Mit nur einem Gleichheitszeichen
würde diese if-Anweisung nicht funktionieren, denn dort würde der Variable den Wert Nils
zugewiesen werden.
Außerdem darf kein Semikolon (;) hinter der if-Anweisung stehen.
Wenn die Variable $user nicht den Inhalt Nils hätte, so würde if false (falsch) zurückgeben und wir
würden keine Ausgabe erhalten.
Möchten wir aber auch eine Ausgabe erhalten wenn die Variable $user nicht den Inhalt Nils hat, so
benötigen wir die else-Anweisung.
Das Grundgerüst sieht dafür so aus:
<?php
if(Bedingung)
{
Anweisung
}
else
{
Anweisung
}
?>
Das else tritt immer dann ein, wenn wir false (falsch) erhalten.
Zum besseren Verständnis hier ein kleines Beispiel:
<?php
Seite: 12
Was kann man mit PHP machen?
$user = "Klaus";
if($user=="Nils")
{
echo "Hallo Nils";
}
else
{
echo "Du bist nicht Nils!";
}
?>
Hat die Variable $user den Inhalt Nils, so erhalten wir als Ausgabe Hallo Nils, bei jedem anderen
Inhalt erhalten wir als Ausgabe Du bist nicht Nils!.
Hiermit können wir schon eine einfache, aber dennoch sichere Passwortabfrage erstellen.
Als erstes benötigen wir wieder ein Formular:
<form action="seite2.php" method="post">
<input type="Password" name="passwort">
<input type="Submit" value="Absenden">
</form>
In diesem Formular geben wir dann das Passwort ein. Beim Klick auf "Absenden", wird die Seite
seite2.php aufgerufen und gleichzeitig an diese das Passwort übergeben.
- Genau wie es im Abschnitt Variablen unter Variablen übergeben beschrieben wurde.
seite2.php muss dann so aussehen:
<?php
$passwort = $_POST["passwort"];
if($passwort=="geheim")
{
echo "Herzlich Willkommen im internen Bereich";
}
else
{
echo "Das Passwort ist leider falsch";
}
?>
Mit $passwort = $_POST["passwort"]; weisen wir der Variable den Inhalt des Passwortfeldes im
Formular zu.
Mit der if-Anweisung wird nun abgefragt, ob die Variable $passwort das Wort geheim als Inhalt
hat, also ob im Formular das Wort geheim auch eingegeben wurde.
Bei richtiger Eingabe, kommt man in den internen (Passwortgeschützen) Bereich.
Eine falsche Eingabe bewirkt die Ausgabe Das Passwort ist leider falsch.
Wir können natürlich auch if-Anweisungen innerhalb einer if-Anweisung erstellen. (verschachteln)
Dies sieht dann z.B. so aus:
<?php
$vorname = "Nils";
$nachname = "Reimers";
if($vorname=="Nils")
{
echo "Hallo Nils ";
Seite: 13
Was kann man mit PHP machen?
if($nachname=="Reimers")
{
echo "Reimers";
}
}
else
{
echo "Du bist nicht Nils";
}
?>
Zuerst wird überprüft, ob die Variable $vorname den Inhalt Nils hat. Trifft dies zu, so wird Hallo Nils
ausgegeben.
Danach wird innerhalb der if-Anweisung mit einer weiteren if-Anweisung überprüft, ob die Variable
$nachname den Inhalt Reimers hat. Trifft dies ebenfalls zu, wird auch noch Reimers ausgegeben.
Wenn die Variable $vorname nicht den Inhalt Nils hat, so wird Du bist nicht Nils ausgegeben.
Es ist dann auch egal, ob $nachname Reimers ist oder nicht.
Genauso kann eine zweite if-Anweisung auch im else Teil stehen:
<?php
$user = "Nils";
if($user=="Nils")
{
echo "Hallo Nils";
}
else
{
if($user=="Reimers")
{
echo "Hallo Herr Reimers";
}
else
{
echo "Du bist nicht Nils Reimers";
}
}
?>
Wenn die Variable $user den Inhalt Nils hat, wird Hallo Nils ausgegeben.
Hat sie diesen Inhalt nicht, wird überprüft, ob der Inhalt Reimers ist. Hat sie diesen Inhalt, so wird
Hallo Herr Reimers ausgegeben.
Falls die Variable $user weder den Inhalt Nils, noch den Inhalt Reimers hat, dann wird Du bist nicht
Nils Reimers ausgegeben.
Des weiteren könnten man dies auch per else if lösen. Dies ist eine weitere if-Anweisungen, wenn die
vorherige nicht Zutrifft:
<?php
$user = "Nils";
if($user=="Nils")
{
echo "Hallo Nils";
}
else if($user == "Reimers")
{
echo "Hallo Herr Reimers";
}
else if($user == "Meier")
Seite: 14
Was kann man mit PHP machen?
{
echo "Hallo Herr Meier";
}
else
{
echo "Du bist weder Herr Reimers noch Herr Meier";
}
?>
Man kann auch mit einer if-Anweisung abfragen, ob etwas nicht erfüllt ist.
Dies erreichen wir mit != (ungleich).
Ein kleines Beispiel hierfür:
<?php
$user = "Nils";
if($user!="Nils")
{
echo "Du bist nicht Nils";
}
else
{
echo "Hallo Nils";
}
?>
Wenn die Variable $user einen anderen (ungleichen) Inhalt als Nils hat, so wird Du bist nicht Nils
ausgegeben.
Wenn sie aber doch diesen Inhalt (Nils) hat, so wird Hallo Nils ausgegeben.
Zwar könnte man hierfür auch die Abfrage == (Ist-Gleich) benutzen, aber wenn man überprüfen
möchte, ob überhaupt etwas im Formular eingegeben wurde, ist es besser, != zu benutzen.
Dies würde dann einfach so aussehen:
<?php
$user = $_POST["user"];
if($user!="")
{
echo "Herzlich Willkommen $user";
}
else
{
echo "Das Feld User wurde nicht ausgefüllt";
}
?>
Als erstes fragen wir die übertragenen Daten wieder ab.
Wenn $user ungleich "" (leer) ist, erhalten wir Herzlich Willkommen $user.
Wurde das Eingabefeld nicht ausgefüllt, erhalten wir Das Feld User wurde nicht ausgefüllt.
Bei if-Anweisungen ist unbedingt darauf zu achten, dass alle geschwungenen Klammern wieder
geschlossen werden, da sonst das Script nicht funktioniert.
Manchmal möchte man auch mehrere Bedingungen überprüfen, dafür brauchen wir logische
Operatoren
Logische Operatoren
Seite: 15
Was kann man mit PHP machen?
Oft reicht es nicht aus, nur eine Bedingung zu überprüfen. Wenn man z.B. eine Passwortabfrage
macht, möchte man wissen ob der Benutzername und das Passwort richtig sind.
Deshalb kann man in PHP mehrere Bedingungen miteinander verknüpfen. Natürlich kann man mehrere
if-Anweisungen benutzen, aber wenn man z.B. 5 Bedingungen überprüfen möchte, wäre dies doch sehr
unübersichtlich.
Für diesen Zweck gibt es die logischen Operatoren.
Hiermit können wir beliebig viele Bedingungen verschiedenst miteinander Verknüpfen.
Eine Passwortabfrage zum Beispiel würde dann so aussehen:
<?php
$username = "Nils";
$passwort = "php-einfach";
if($username=="Nils" AND $passwort=="php-einfach")
{
echo "Zugriff erlaubt";
}
?>
Hier werden $username und $passwort gemeinsam überprüft. Nur wenn beide Eingaben stimmen,
wird der Zugriff erlaubt.
Die Verbindung der beiden Bedingungen erfolgt über den Operator AND (und). Das selbe Ergebnis
erzielt man mit &&. Welche Schreibweise man letztendlich verwendet ist egal. Ich bevorzuge AND, da
es intuitiver aussieht.
Es gibt immer wieder Fälle, wo es reicht, dass nur eine Bedingung erfüllt ist.
Dafür gibt es den Operator OR (oder), manchmal wird er auch als || geschrieben:
<?php
$username = "Nils";
$passwort = "php-einfach";
if($username=="Nils" OR $passwort=="php-einfach")
{
echo "Zugriff erlaubt";
}
?>
Diese IF-Anweisung ist auch dann erfüllt, wenn nur eine der beiden Bedingungen erfüllt ist.
Zugegeben für eine Passwortabfrage macht das eher weniger Sinn, aber dazu später mehr.
Auch wenn bei OR beide Bedingungen erfüllt sind, erhalten wir als Ausgabe Zugriff erlaubt.
Man könnte eine Passwortabfrage auch für mehrere Personen erstellen, dazu verknüpfen wir die
verschiedenen Operatoren einfach:
<?php
$username = "Nils";
$passwort = "php-einfach";
if( ($username=="Nils" AND $passwort=="php-einfach")
OR
($username=="Paul" AND $passwort=="geheim") )
{
echo "Zugriff erlaubt";
}
?>
Hier hätten nur Nils mit dem Passwort php-einfach oder Paul mit dem Passwort geheim zugriff. Ein Nils
der als Passwort z.B. geheim eingibt, hätte keinen Zutritt.
Seite: 16
Was kann man mit PHP machen?
Es gibt jedoch noch die dritte Variante des logischen Operators, dabei darf nur eine Bedingung
wahr sein.
Diese Variante nennt sich exklusives oder und wird wie folgt geschrieben:
<?php
$username = "Nils";
$passwort = "php-einfach";
if($username=="Reimers" XOR $passwort=="php-einfach")
{
echo "Zugriff erlaubt";
}
?>
Jetzt wird nur dann die Anweisung ausgeführt, wenn die Variable $username den Inhalt Reimers hat,
oder die Variable $passwort den Inhalt php-einfach hat. Sind beide Inhalte richtig angeben, erfolgt
kein Zugriff.
Dieses "entweder oder" wird XOR geschrieben.
Noch mal:
Bei AND müssen beide Bedingungen erfüllt sein
Bei OR muss mindestens eine Bedingung erfüllt sein
Bei XOR darf nur eine Bedingungen erfüllt sein
Für eine echte Passwortabfrage würde man die Variablen $username und $passwort per Formular
eingeben.
Dazu benötigen wir zuerst wieder ein Formular mit zwei Input-Feldern.
<form action="seite2.php" method="post">
Username:<br>
<input type="Text" name="username"><br>
Passwort:<br>
<input type="Password" name="passwort"><br>
<input type="Submit" value="Absenden"><br>
</form>
In diesem Formular gibt man dann den Username und das Passwort ein. Klickt man danach auf
Absenden, wird seite2.php aufgerufen und an diese beiden Eingaben übergeben.
seite2.php muss dann so aussehen:
<?php
$username = $_POST["username"];
$passwort = $_POST["passwort"];
if($username=="Nils" AND $passwort=="php-einfach")
{
echo "Zugriff erlaubt";
}
else
{
echo "Zugriff fehlgeschlagen";
}
?>
Als erstes Fragen wir die eingegebenen Daten ab.
Diese Eingaben werden in den Variablen $username und $passwort gespeichert.
Mit einer if-Anweisung und dem logischen Operator AND wird abgefragt, ob $username den Inhalt
Seite: 17
Was kann man mit PHP machen?
Nils und $passwort den Inhalt php-einfach hat.
Nur wenn beide Eingaben richtig sind, kommen wir in den internen Bereich.
Übung
Dann wollen wir das Gelernte mal etwas anwenden.
Als erstes machen wir eine Passwortabfrage, bei der das Passwort verschlüsselt wird.
Zuerst brauchen wir wieder ein Formular.
Das sieht ungefähr so aus:
<form action="seite2.php" method="post">
Benutzername:<br>
<input type="Text" name="username"><br><br>
Passwort:<br>
<input type="Password" name="passwort">
<input type="Submit" value="Absenden">
</form>
Passwortabfragen sollten immer mit post übermittelt werden, denn wenn es mit get übermitteln
wurde, würde jeder später im Verlauf sehen können, welches Passwort man benutzt.
Jetzt kommen wir zum PHP Teil
<?php
$username = $_POST["username"];
$passwort = $_POST["passwort"];
$pass = md5($passwort);
?>
Als erstes fragen wir die übertragenden Daten ganz einfach wieder ab.
Mit md5 verschlüsseln wie jetzt das Passwort. Benutzt man dafür md5 so kann dieser Verschlüsselung
nicht wieder rückgängig gemacht werden.
Ein Wort das mit md5 verschlüsselt wurde, sieht dann ca. so aus:
fd0d9cdefd5d42dfa36c74a449aa8214 (php-einfach)
Damit wir jetzt eine if-Anweisung machen können, müssen wir zuerst das Passwort in einen md5String (Text) umwandeln.
Dafür können wir den md5-Generator benutzen, oder wir machen einen eigenen Generator.
Unseren Code müssen wir dann so abwandeln.
<?php
$username = $_POST["username"];
$passwort = $_POST["passwort"];
$pass = md5($passwort);
echo $pass;
?>
Seite: 18
Was kann man mit PHP machen?
Drücken wir auf Absenden bei dem Formular, erhalten wir das eingegebene Wort als md5-String (Text)
wieder ausgegeben. Diesen Code kopieren wir uns dann.
Achtung: Die md5-Funktion unterscheidet zwischen Groß- und Kleinschreibung.
clanwissen sieht umgewandelt so aus:
c6a7fa7d60010437e84ad75cae1fa928
Clanwissen sieht umgewandelt so aus:
5d959937101f826b0b67bb3a8c1cbb27
Jetzt kommt die if-Anweisung. Damit überprüfen wir, ob das verschlüsselte Passwort das gleiche ist,
das wir gespeichert haben.
Unser Code sieht dann so aus:
<?php
$username = $_POST["username"];
$passwort = $_POST["passwort"];
$pass = md5($passwort);
if($username=="Andavos" and
$pass=="fd0d9cdefd5d42dfa36c74a449aa8214")
{
echo "Herzlich Willkommen";
}
else
{
echo "Login Fehlgeschlagen";
}
?>
In der if-Anweisung schreiben wir jetzt unseren md5-String (Text) hinein.
Drückt man bei dem Formular auf Absenden, so werden diese Daten an seite2.php gesendet.
seite2.php fragt diese Eingaben ab, und verschlüsselt das Textfeld passwort in einen md5-String.
Die if-Anweisung fragt dann ab, ob das eingegebene, verschlüsselte Passwort das gleiche ist, das in
der if-Anweisung steht.
Was habe ich jetzt davon?
Wenn jemand jetzt deinen Quelltext sieht, kann er nicht sofort erkennen, welches Passwort man
braucht, um in den internen Bereich zu kommen.
Die md5-Funktion ist auch wichtig, wenn man später Datenbanken benutzt, bei dem sich der User mit
Passwort und Benutzername einträgt.
Wenn man ein Passwort in einer Variable speichert, dann kann man bei manchen Free-Webspace
Anbietern ganz einfach diese Variable "ausspionieren". Diese Person hat dann ihr Passwort.
Wenn es aber verschlüsselt abgespeichert wurde, erhält er nur den md5-String, und weil man diesen
nicht entschlüsseln kann, ist ihm dieser Code so gut wie nutzlos.
Als nächstes überprüfen wir, ob alle Felder ausgefüllt wurden.
Wieder brauchen wir ein Formular:
<form action="seite2.php" method="post">
E-Mail:<br>
<input type="Text" name="email"><br><br>
Seite: 19
Was kann man mit PHP machen?
Kommentar:<br>
<textarea name="kommentar" cols="30" rows="5">
</textarea>
<input type="Submit" value="Absenden">
</form>
In diesem Formular gibt man seine E-Mail Adresse an und ein Kommentar.
Diese Daten werden an seite2.php geschickt:
<?php
$email = $_POST["email"];
$kommentar = $_POST["kommentar"];
if($email=="" OR $kommentar=="")
{
echo "Bitte füllen Sie alle Felder aus";
}
else
{
echo "Ihr Eintrag wurde gespeichert";
}
?>
Wie immer fragen wir zuerst die übermittelten Daten ab.
Mit der if-Anweisung schauen wir, ob beide Felder ausgefüllt wurden, dazu brauchen wir OR.
Wenn ein oder beide Felder leer sind, erhält der Besucher eine Fehlermeldung.
Wenn er sie aber ausgefüllt hat, werden seine Eingaben gespeichert.
Wie das speichern geht, erfahrt ihr später.
Solch eine if-Anweisung braucht man ziemlich oft, z.B. bei Gästebüchern wird eine solche ifAnweisung fast immer eingebaut.
Wie bereits versprochen, kann man mit PHP mehrere (unendlich) HTML-Dokumente in einer PHP-Datei
speichern.
Dies geht ganz einfach mit der GET Methode.
Deswegen braucht unser PHP-Dokument eine GET-Abfrage.
Die sieht so aus:
<?php
$seite = $_GET["seite"];
?>
Damit haben wir jetzt als Eingabefeldnamen seite benutzt. Dieser Wert ist in der Variable $seite
gespeichert. Natürlich könnt ihr auch andere Namen benutzen, dann müsst ihr aber später aufpassen.
Wie wir bereits gelernt haben, werden Daten, die mit GET übermittelt werden, an die URL angehängt.
Also brauchen wir kein Formular, um bestimmte Eingaben zu senden, sondern hängen wir diese
einfach an die URL dran und drücken dann Enter.
Danach brauchen wir eine IF-Anweisung, die prüft was eingegeben wurde.
Diese kann so aussehen:
<?php
if($seite=="index")
{
echo "Herzlich Willkommen auf der Indexseite";
}
Seite: 20
Was kann man mit PHP machen?
?>
Rufen wir dann im Browser diese Datei auf, erhalten wir zuerst eine leere Seite. Hängen wir aber jetzt
an die URL ?seite=index dran, erhalten wir die Ausgabe, die zwischen unserer IF-Anweisung steht.
Somit können wir jetzt beliebig viele Unterseiten einfügen.
Das sieht dann ca. so aus:
<?php
$seite = $_GET["seite"];
if($seite=="index")
{
echo "Indexseite";
}
if($seite=="start")
{
echo "Startseite";
}
?>
Rufen wir jetzt unsere URL mit dem Anhang ?seite=index auf, erhalten wir als Ausgabe nur
Indexseite, rufen wir allerdings diese Seite mit dem Anhang ?seite=start auf, erhalten wir als
Ausgabe nur Startseite.
Somit können wir viele Unterseiten in einer PHP-Datei speichern.
Wenn man möchte, das der Browser eine bestimmte Seite aufruft, wenn man nichts an die URL
drangehängt, brauchen wir isset. Damit können wir überprüfen, ob eine Variable (z.B. $seite) einen
Inhalt besitzt. Falls wir überprüfen möchten, ob eine Variable leer ist, benutzen wir !isset
Das Ausrufungszeichen ! steht für NOT. Die Funktion isset(); gibt entweder TRUE, sofern die Variable
existiert, sonst FALSE. Das NOT davor dreht das Ergebnis um.
Dies bedeutet, wenn die Variable existiert, wir aber !isset(); schreiben, erhalten wir ein FALSE. Wenn
sie nicht existiert, ein TRUE.
Der Script sieht dann so aus:
<?php
$seite = $_GET["seite"];
if(!isset($seite))
{
$seite="index";
}
if($seite=="index")
{
echo "Indexseite";
}
if($seite=="start")
{
echo "Startseite";
}
?>
Wenn wir die Datei ohne Anhang aufrufen, erhalten wir die Ausgabe von ?seite=index.
Links könnten dann so aussehen:
Seite: 21
Was kann man mit PHP machen?
<a href="seite1.php?seite=index">Indexseite</a>
<a href="seite1.php?seite=start">Startseite</a>
Natürlich könnten die Links auch in einer der if-Anweisungen stehen, ca. so:
<?php
$seite = $_GET["seite"];
if(!isset($seite))
{
$seite="index";
}
if($seite=="index")
{
echo "Indexseite";
echo "<a href=\"?seite=start\">Zur Startseite</a>";
}
if($seite=="start")
{
echo "Startseite";
echo "<a href=\"?seite=index\">Zur Indexseite</a>";
}
?>
Formulare können wir auch innerhalb einer Datei verschicken, dafür müssen wir nur bei action den
richtigen Anhang eintragen.
Ungefähr so:
<form action="?seite=start" method="post">
Wenn das Formular innerhalb eines Dokumentes verschickt werden soll, reicht der Anhang, wenn wir
das aber an eine andere Seite schicken möchten, dann müssen wir auch den Dateinamen angeben.
Wozu braucht man dies?
Klar könnten wir alles in verschiedenen Dateien speichern, aber hat man z.B. bei einer Registration
mehrere Schritte (z.B. 10), dann müsste man 10 Dateien anlegen, mit diesem Prinzip aber nur 1 Datei.
Als nächstes Speichern wir etwas in eine Datei
PHP: Dateien
Bisher sind wir in der Lage, mit Variablen zu arbeiten, und diese zu überprüfen.
Zwar können wir so schon einen geschützten Bereich programmieren, aber oft möchte man ja
bestimmte Werte auch abspeichern. Dies können z.B. Daten aus einem Formular oder ähnliches sein.
Das abgespeicherte möchte man dann später natürlich auch wieder ausgeben. Für solche Aufgaben
verwendet man in PHP Dateien. In Dateien speichert man per PHP seine Werte und kann sie an
anderer Stelle wieder auslesen
Zunächst ist zu beachten, dass das Arbeiten mit Dateien immer in drei Schritten abläuft. Eine Datei
wird geöffnet, danach wir der Inhalt in die Datei geschrieben oder aus der Datei gelesen (oder auch
beides) und zum Schluss wird sie wieder geschlossen. Das öffnen von einer Datei ist eigentlich recht
einfach:
<?php
$datei = fopen(Dateiname, Modus);
?>
Der PHP-Befehl fopen öffnet die Datei Dateiname, der Modus bestimmt, was wir mit der Datei machen
möchten (lesen bzw. schreiben).
Außerdem müssen wir darauf achten, ab welcher Zeile PHP anfängt zu lesen (Anfang oder Ende der
Datei).
Seite: 22
Was kann man mit PHP machen?
Auch wichtig ist, ob PHP eine Datei anlegt oder nicht, sofern diese noch nicht existiert. Wenn man mit
PHP neue Dateien erstellen möchte, dann sollte man nicht r bzw. r+ benutzen.
Folgende Modi kann man benutzen:
Modus
Funktion
Dateizeiger Datei anlegen
r
Lesen
Anfang
Nein
r+
Lesen und Schreiben Anfang
Nein
w
Schreiben
Anfang
Ja
w+
Lesen und Schreiben Anfang
Ja
a
Schreiben
Ende
Ja
a+
Lesen und Schreiben Ende
Ja
Wenn w / w+ benutzt wird, musst du darauf achten, dass der Inhalt des Dokuments ohne Nachfrage
überschrieben wird.
Für das Anlegen eines Logfiles benutzt man den Modus a, da der neue Eintrag immer am Ende
angehängt wird.
Wir machen jetzt als Beispiel einen simplen Textcounter (ohne Reloadsperre), denn an diesem Beispiel
lernen wir so gut wie alles, was wir später brauchen.
Zu erst öffnen wir eine Datei, ich empfehle eine Textdatei (counter.txt) zu benutzen, aber man kann
auch jedes andere Format benutzen.
<?php
$datei = fopen("counter.txt","r+");
?>
Bei dem Modus r+ müssen wir darauf achten, das es diese Datei bereits vorhanden ist.
Dann wollen wir ja abfragen, wie viele Personen diese Seite schon aufgerufen haben, deswegen lesen
wir die Datei zuerst aus.
<?php
$counterstand = fgets($datei, 10);
?>
Mit fgets lesen wir eine Datei, der erste Wert in der Klammer gibt an, welche Datei wir lesen, der
zweite Wert wie viele Zeichen wir lesen.
In diesem fall 10 Zeichen, weil ein Counter i.d.R. nicht mehr als 10 Zeichen hat.
Das gelesene Speichern wir in der Variable $counterstand.
Aber was ist wenn diese Datei leer ist?
Dazu benutzen wir eine einfache if-Anweisung.
<?php
if($counterstand == "")
{
$counterstand = 0;
}
?>
Hier wird überprüft, ob die Datei einen Inhalt hat, wenn sie keinen Inhalt hat, so wird der Counterstand
auf 0 gesetzt.
Wir wollen ja, wenn der Besucher die Site besucht, den Counterstand um 1 erhöhen.
Dies geht mit $counterstand++;.
Seite: 23
Was kann man mit PHP machen?
Dabei wird der Wert von $counterstand um 1 erhöht. Der neue Wert ist wieder in $counterstand
gespeichert.
Danach müssen wir dem Besucher die Zahl ausgeben, das machen wir ganz einfach mit echo.
<?php
$counterstand++;
echo $counterstand;
?>
Durch das lesen des Counterstandes/der Datei, ist der 'Dateizeiger' nicht mehr am Anfang der Datei.
Würden wir jetzt den neuen Wert speichern, so würde der alte Wert nicht überschrieben werden. So
würde aus dem Counterstand 1 plötzlich eine 12 werden.
<?php
rewind($datei);
?>
Mit rewind setzten wir den Dateizeiger wieder an den Anfang der Datei.
Und anschließend tragen wir den neuen Wert wieder in die Datei ein.
<?php
fwrite($datei, $counterstand);
?>
Mit fwrite (man kann auch fputs benutzen) tragen wir in die Datei ($datei) den neuen Counterstand
(der in der Variable $counterstand ist) ein.
Zum Schluss schließen wir noch die Datei:
<?php
fclose($datei);
?>
Unser gesamte Code sieht dann so aus:
<?php
$datei = fopen("counter.txt","r+");
$counterstand = fgets($datei, 10);
if($counterstand == "")
{
$counterstand = 0;
}
$counterstand++;
echo $counterstand;
rewind($datei);
fwrite($datei, $counterstand);
fclose($datei);
?>
Durch die Arbeit mit Dateien sind auch noch viele weitere Anwendungen möglich, z.B. Logfiles,
Newsscripts, Gästebücher und sogar Foren.
Allerdings sind diese Sachen dann meistens alle recht Simpel gehalten und bieten kaum weitere
Funktionen, da dies sehr schwer zu realisieren ist.
Deswegen sollten wir uns nicht solange damit aufhalten, sondern lieber mit Datenbank (MySQL)
arbeiten.
Wichtig:
Wenn ihr mit diesen Prinzip auf eurem Server (Webspace) arbeitet, dann müsst ihr den Dateien, in
denen ihr etwas schreiben möchtet, die Schreibrechte CHMOD(unix) 777 geben.
Wie das geht erfahrt ihr hier.
Um eine Datei komplett auszugeben brauchen wir als erstes eine PHP Schleife.
PHP: Schleifen
Seite: 24
Was kann man mit PHP machen?
While-Schleife
In manchen Fällen ist es notwendig, eine Anweisung so lange auszuführen, bis ein bestimmtes
Ergebnis eintritt.
Dies benutzt man z.B. auch um den Inhalt von Datenbanken (z.B. MySQL) oder einfach den Inhalt von
Dateien auszugeben.
PHP bietet dafür die while-Schleife und auch die for-Schleife an.
while-Schleifen werden vorallem in Verbindung mit Datenbanken verwendet, während for-Schleifen
meistens nur zum Hoch- bzw. Runterzählen von Werten verwendet werden.
Unser PHP Script enthält eine Schleife, die solange zählt, bis eine bestimmte Zahl erreicht ist.
Dafür brauchen wir als erstes ein Formular, indem wir die Zahl eingeben.
<form action="seite2.php" method="post">
Eine Zahl zwischen 1 und 25:<br>
<input type="Text" name="zahl">
<input type="Submit" value="Absenden">
</form>
Der nächste Schritt ist die while-Schleife.
Zuerst fragen wird selbstverständlich unseren Zahlenwert ab.
Bei while-Schleifen arbeitet man meistens mit einem "internen Counter", der zunächst initialisiert wird
- in diesem Fall mit dem Wert 0.
<?php
$zahl = $_POST['zahl'];
$a = 0;
?>
Diese Zahl speichern wir in der Variable $a.
Wir könnten natürlich auch jede andere Variable benutzen.
Der Wert entscheidet darüber, ab wann PHP anfangen soll zu zählen, wir könnten auch von -10 zählen
lassen.
Dann brauchen wir unsere while-Schleife.
<?php
while($a < $zahl)
{
$a++;
echo $a.", ";
}
?>
Direkt nach dem einleitenden while wird innerhalb der runden Klammer die Bedingung gestellt.
Solange diese Bedingung zutrifft, wird jetzt die Anweisung, der Code innerhalb der geschwungenen
Klammern, ausgeführt.
Zum Anfang erhöhen wir den Wert von $a um eins, denn wir wollen dort als erste Zahl eine 1 stehen
haben.
Wir können natürlich auch am Schluss $a++ schreiben, dann wäre aber die erste Ausgabe eine Null.
Seite: 25
Was kann man mit PHP machen?
Das erhöhen der Variable $a ist ganz wichtig, sonst würde sich PHP dumm und dämlich zählen, denn
die Bedingung wäre dann immer wahr.
Zwischen den geschwungenen Klammern geben wir die Zahl und ein Komma aus, damit es besser
aussieht.
Der ganze Script sieht dann so aus:
<?php
$zahl = $_POST["zahl"];
//Eine kleine Überprüfung,
//damit keine zu großen Zahlen eingegeben werden
if($zahl > 25)
{
$zahl = 25;
}
$a = 0;
while($a < $zahl)
{
$a++;
echo $a.", ";
}
?>
for-Schleife
Neben der while-Schleife gibt es auch noch die for-Schleife. Diese ist etwas komplizierter und mit
ihr lässt man nur Werte Hoch- bzw. Runterzählen.
Wir benutzen wieder das Beispiel mit dem Zählen.
Der erste Teil bleibt gleich:
<?php
$zahl = $_POST["zahl"];
if($zahl > 25)
{
$zahl = 25;
}
?>
Doch jetzt brauchen wir die for-Schleife.
<?php
for($a = 0; $a < $zahl; $a++)
{
echo $a;
echo ", ";
}
?>
Bei der for-Schleife geben wir die Variable $a innerhalb der runden Klammern an.
Dort geben wir nach dem erstem Semikolon (;) die Bedingung an. Zum Schluss (auch durch ein
Semikolon ; getrennt) erhöhen wir den Wert von $a um 1.
Seite: 26
Was kann man mit PHP machen?
Wir benutzen als Startwert 0, und die Schleife läuft insgesamt $zahl (max. 25) mal durch. Die erste
Ausgabe wird eine 0 sein.
Schleifen braucht man sehr oft, wenn man mit Datenbanken oder Dateien arbeitet.
Als nächstes schauen wir uns die Array Funktion an.
PHP: Array
Um verschiedene Werte in nur einer Variable zu speichern, verwendet man in PHP ein Array.
Bisher konnte jede Variable nur einen Wert speichern, in PHP können in einem Array beliebig viele
Werte gespeichert werden, auch von unterschiedlichen Typen. So kann ein PHP Array z.B. eine
Zeichenkette (String/Text), eine Ganzzahl und eine Zahl mit Kommastellen enthalten und auf jeden
dieser Werte kann man separat zugreifen.
Aber PHP kann noch mehr mit Arrays anstellen.
Das hört sich jetzt alles recht kompliziert an, ist aber ganz einfach, darum hier ein Beispiel:
<?php
$wochentage = array("Sonntag","Montag","Dienstag",
"Mittwoch","Donnerstag","Freitag","Samstag");
?>
Einem PHP Array wird ganz normal ein Variablenamen zugeordnet, hier wochentage, allerdings erfolgt
die Zuweisung der Daten nicht einfach durch das Gleichheitszeichen, sondern danach kommt noch der
Befehl: array();.
In diesem Befehl sind jetzt die verschiedenen Werte gespeichert, bei uns die ausgeschriebenen
Wochentage.
Das Zugreifen auf solch einen Wert ist auch relativ simpel:
<?php
echo $wochentage[1];
?>
Ausgabe: Montag
Wir geben zuerst wieder den Variable-Namen (wochentage) an und danach das Element bzw. den
Wert, auf das wir zugreifen möchten.
Ein Array hat dabei die enthaltenen Werte durchnummeriert, und fängt bei 0 an zu zählen.
Also mit $wochentage[0]; würden wir den Wert Sonntag erhalten, Montag hat die Nummer (bzw. den
Index) 1 und so weiter.
Bei großen Arrays wird es natürlich irgendwann umständlich, zu wissen, welche Nummer/Index zu
welchem Wert gehört, darum gibt es assoziative PHP Arrays.
Das heißt, man kann für einen Wert einen Schlüssel/Key zuweisen, dies kann z.B. eine andere
Zeichenkette sein.
Die Zuweisung erfolgt per: =>
<?php
$wochentage = array(
"so" => "Sonntag",
"mo" => "Montag",
"di" => "Dienstag",
"mi" => "Mittwoch",
"do" => "Donnerstag",
"fr" => "Freitag",
"sa" => "Samstag");
?>
Seite: 27
Was kann man mit PHP machen?
Dies ist wieder ein Array mit unseren Namen der Wochentage. Dabei wurde dem Schlüssel so der Wert
Sonntag zugewiesen, dem Schlüssel mo dem Wert Montag.
Der Vorteil ist, dass man jetzt bequemer auf das Array zugreifen kann:
<?php
echo $wochentage["mo"];
?>
Ausgabe: Montag
Anstatt jetzt die Nummer/Index des Elementes anzugeben, gibt man hier den Schlüssel für das
Element an, also so für Sonntag, mo für Montag und sa für Samstag.
Selbstverständlich kann man nachträglich auch Werte in einem Array verändern:
<?php
$wochentage["mo"] = "Monday";
echo $wochentage["mo"];
?>
Ausgabe: Monday
Das selbe gilt für Arrays mit Nummer/Indexen.
Ein weiterer Vorteil ist, dass man einem Array neue Werte hinzufügen kann, diese Werte könnten z.B.
aus einer Datenbank stammen.
Das ganze Funktioniert so:
<?php
$mitarbeiter = array("Bob","Peter");
$mitarbeiter[] = "Lisa";
echo $mitarbeiter[2];
?>
Ausgabe: Lisa
Mit $mitarbeiter[] wird automatisch ein neues Element in unserem Array erstellt, und diesem wird der
Wert Lisa zugewiesen.
Wir könnten unser Array sogar so erstellen:
<?php
$mitarbeiter = array();
$mitarbeiter[] = "Bob";
$mitarbeiter[] = "Peter";
$mitarbeiter[] = "Lisa";
?>
Hier wird zuerst ein leeres Array erstellt und danach werden die Mitarbeiter hinzugefügt.
Mit assoziativen PHP Arrays funktioniert dies ähnlich, aber wir müssen den Schlüssel mit angeben:
<?php
$mitarbeiter = array(
"Bob" => "Bob Meier",
"Peter" => "Peter von Hausen");
$mitarbeiter["Lisa"] = "Lisa Müller";
echo $mitarbeiter["Lisa"];
?>
Ausgabe: Lisa Müller
Wenn der Schlüssel schon vergeben wurde, dann wird der Wert für die Schlüssel überschrieben.
Anzahl der Elemente
Seite: 28
Was kann man mit PHP machen?
Wenn wir in einem Array dynamisch neue Elemente hinzufügen können, dann ist es sehr wichtig zu
wissen, wie viele Elemente das Array überhaupt enthält, dies funktioniert mit:
count($names_des_array);:
<?php
$mitarbeiter = array("Bob","Peter");
echo count($mitarbeiter);
?>
Ausgabe: 2
Wir erhalten als Ausgabe 2, denn in dem Array sind 2 Mitarbeiter gespeichert, der letzte Index ist
allerdings 1, weil bei 0 angefangen wird zu zählen.
Um den letzten Eintrag auszugeben, müssen wir von dem Wert einfach 1 abziehen.
Elemente ausgeben
Zum Ausgeben aller Elemente in einem Array benutzt man gewöhnlich eine Schleife, dies kann eine for
oder eine while Schleife sein:
<?php
$mitarbeiter = array("Bob","Peter","Lisa");
echo "For-Schleife: <br>";
for($i=0; $i < count($mitarbeiter); $i++)
{
echo $mitarbeiter[$i]."<br>";
}
echo "<br> While-Schleife: <br>";
$i = 0;
while($i < count($mitarbeiter))
{
echo $mitarbeiter[$i]."<br>";
$i++;
}
?>
Beide Varianten funktionieren einwandfrei, aber es gibt noch eine 3. Schleife: foreach
<?php
$mitarbeiter = array("Bob","Peter","Lisa");
echo "Foreach-Schleife: <br>";
foreach($mitarbeiter AS $name)
{
echo $name."<br>";
}
?>
Im Schleifenkopf definieren wird, dass die Werte in $name gespeichert werden soll. Unter dieser
Variable können wir dann innerhalb der Schleife auf den jeweiligen Namen des Mitarbeiters zugreifen.
Suchen & Sortieren
Ein weiteres Feature ist, dass wir ein Array durchsuchen und sortieren können.
Zuerst die Suchfunktion, dies geht mit in_array($suche,$array);:
<?php
$mitarbeiter = array("Bob","Peter","Lisa");
if(in_array("Bob",$mitarbeiter))
{
echo "Der Name Bob ist in dem Array enthalten";
Seite: 29
Was kann man mit PHP machen?
}
?>
Hier überprüfen wir, ob Bob in dem Mitarbeiter-Array vorhanden ist, wenn ja, gibt die Funktion true
zurück, und ein Text wird ausgegeben (das Bob in dem Array vorhanden ist).
Das war auch schon das Gröbste zum Suchen, jetzt das Sortieren. Oft herrscht in so einem Array
'Chaos', dass z.B. die Mitarbeiter wild hinzugefügt wurden. Möchte man jetzt eine alphabetische Liste
der Mitarbeiter ausgeben, dann muss man das Array zuerst sortieren. PHP bietet dafür viele
Möglichkeiten.
Möchte man die Werte sortieren, verwendet man die Funktionen asort oder arsort, wobei asort eine
aufsteigende Reihenfolge (a,b,c,d) liefert und arsort eine absteigende (d,c,b,a).
Beispiel:
<?php
$mitarbeiter = array("Klaus","Arnie","Willi");
//Array sortieren
asort($mitarbeiter);
//Array ausgeben
echo "Foreach-Schleife: <br>";
foreach($mitarbeiter AS $name)
{
echo $name."<br>";
}
?>
Hier wird per asort() das Array in aufsteigender Reihenfolge sortiert und danach mit foreach
ausgegeben.
Um die Schlüssel (mit deren Werte), zu sortieren, verwendet man ksort oder krsort. Beispiel:
<?php
$mitarbeiter = array(
"Zabel" => "Klaus",
"Meier" => "Arnie",
"Brand" => "Willi");
//Array sortieren
ksort($mitarbeiter);
//Array ausgeben
echo "Foreach-Schleife: <br>";
foreach($mitarbeiter AS $name)
{
echo $name."<br>";
}
?>
Mehrdimensionale Arrays
In einem Array kann man ein weiteres Array, und in diesem Array wieder ein Array speichern, und so
weiter. Solche Arrays nennt man dann mehrdimensionale Arrays.
Die Dimension gibt dabei an, wie Tief diese Verschachtelung geht. Ein normales Array wäre ein 1dimensionales Array, wenn jetzt in dem Array ein weiteres Array gespeichert ist, ist dies ein 2dimensionales Array.
Dafür hier ein Beispiel:
Seite: 30
Was kann man mit PHP machen?
<?php
$mitarbeiter = array(
array("Klaus", "Zabel"),
array("Arnie", "Meier"),
array("Willi", "Brand")
);
//Daten ausgeben
echo "Vorname: ".$mitarbeiter[0][0];
echo " Nachname: ".$mitarbeiter[0][1];
?>
Ausgabe: Vorname: Klaus Nachname: Zabel
Wie wir sehen, gibt man jetzt nicht nur einen Index an, sondern zwei. Der erste Index gibt an, welchen
Mitarbeiter wir aus der Liste haben möchte, und der zweite Index ob wir den Vornamen, oder den
Nachnamen ausgeben möchten.
Dies geht natürlich auch mit assoziativen Arrays und der 'anderen' Schreibweise:
<?php
$mitarbeiter = array();
$mitarbeiter[] = array("Vorname"=>"Klaus",
"Nachname"=>"Zabel");
$mitarbeiter[] = array("Vorname"=>"Arnie",
"Nachname"=>"Meier");
$mitarbeiter[] = array("Vorname"=>"Willi",
"Nachname"=>"Brand");
//Daten ausgeben
echo "Vorname: ".$mitarbeiter[0]["Vorname"];
echo " Nachname: ".$mitarbeiter[0]["Nachname"];
?>
Da wir jetzt in einem normalem Array ein assoziatives Array (also eins mit Schlüssel) speichern,
müssen wir als zweiten Wert auch den Schlüssel für Vor/Nachname angeben.
Dies geht natürlich auch mit noch mehr Dimensionen, z.B. so:
<?php
$mitarbeiter = array();
$mitarbeiter["Klaus"]["Vorname"] = "Klaus";
$mitarbeiter["Klaus"]["Nachname"] = "Zabel";
$mitarbeiter["Klaus"]["Kinder"][] = "Klaus-Junior";
$mitarbeiter["Klaus"]["Kinder"][] = "Kind2";
//Daten ausgeben
echo "Vorname: ".$mitarbeiter["Klaus"]["Vorname"];
echo " Nachname: ".$mitarbeiter["Klaus"]["Nachname"];
echo "<br> Er hat ";
echo count($mitarbeiter["Klaus"]["Kinder"])." Kinder";
//Ausgabe von Kind1:
//$mitarbeiter["Klaus"]["Kinder"][0];
echo "<br> Kinder: <br>";
foreach($mitarbeiter["Klaus"]["Kinder"] AS $name)
{
echo $name."<br>";
}
?>
Seite: 31
Was kann man mit PHP machen?
Dies ist schon etwas schwerer zu verstehen, aber wenn man es verstanden hat, sollte es eigentlich
keine weiteren Fragen zu Arrays geben.
Also zuerst haben wir wieder unser Array mit dem Mitarbeiter Klaus. Dabei benutzen wir diesmal gleich
ein assoziatives Array.
Für Klaus wurde jetzt der Vorname und der Nachname gespeichert, dies sollte ja noch bekannt sein.
Unter dem Schlüssel Kinder fügen wir jetzt ein weiteres Array hinzu, wobei jedes Element dieses
Arrays den Namen eines Kindes von ihm enthält.
Dieses Array mit den Kindernamen können wir ganz normal per foreach ausgeben.
Das war's auch schon was man über Arrays wissen muss.
Jetzt können wir Dateien komplett ausgeben.
Datei auslesen
Jetzt lernen wir, wie wir mit PHP eine Datei komplett auslesen können.
Dafür gibt es in PHP zwei Möglichkeiten, die erste Möglichkeit ist es, die Datei zeilenweise in ein Array
einzulesen.
Die erste Möglichkeit ist zu überprüfen, ob der Dateizeiger am Ende der Datei ist. Sobald der
Dateizeiger am Ende der Datei ist, hört der Script auf zu lesen.
Dies geht so:
<?php
$userdatei = fopen("datei.txt","r");
while(!feof($userdatei))
{
$zeile = fgets($userdatei,1024);
echo $zeile;
}
fclose($userdatei);
?>
Zuerst öffnen wir die Datei datei.txt mit dem Lesemodus r.
Die while-Schleife läuft solange bis, der Dateizeiger am Ende der Datei steht. Dies überprüfen wir mit
!feof.
Danach lesen wir einfach die nächsten 1024 Zeichen aus der Datei aus und geben diese aus.
Man kann natürlich auch einen anderen Wert benutzen, aber man sollte nicht so kleine Werte
benutzen, denn wenn ihr dort z.B. 2 eingebt, und eure Datei 1000 Zeichen hat, so muss die Schleife
500 mal durchlaufen. Dies dauert natürlich viel länger, als wenn PHP auf einmal z.B. 1024 Zeichen
liest.
Ihr könnt auch größere Werte benutzen, z.B. 5000.
Wenn der Dateizeiger am Ende angekommen ist, ist die while-Schleife beendet und die Datei wird
wieder geschlossen.
Seite: 32
Was kann man mit PHP machen?
Die zweite Möglichkeit ist deutlich leichter, und zwar benutzt man dann den Befehl file:
<?php
$datei = file("datei.txt");
?>
Danach können wir den Inhalt des Arrays wieder mit einer geeigneten Schleife ausgeben. Entweder mit
einer while-Schleife, for-Schleife oder auch mit foreach.
Wir können den Inhalt jetzt so wie ein Array behandeln, also nach Werten suchen (in_array), diese
Werte sortieren oder auch Werte hinzufügen.
<?php
$datei = file("datei.txt");
foreach($datei AS $meine_datei)
{
echo $meine_datei."<br>";
}
?>
Ich würde die Funktion file() empfehlen.
Wir haben auch die Möglichkeit per implode() ein Array anhand eines Trennzeichen zu einem
String/Text zusammenzufügen:
<?php
$datei = implode("",file("datei.txt"));
echo $datei;
?>
Dabei wird als Trennzeichen "" (leer) benutzt. Man kann sich dieses aneinander hängen so vorstellen:
Zuerst wird das erste Arrayelement ($array[0]) in der Variable gespeichert, dann folgt das
Trennzeichen, danach kommt dann das zweite Arrayelement und dann wieder ein Trennzeichen und so
weiter.
Möchte man z.B. dass jede Zeile in der Datei auch eine neue Zeile im Browser ist, so wird als
Trennzeichen ein <br> benutzt:
<?php
$datei = implode("<br>",file("datei.txt"));
echo $datei;
?>
Explode
Die explode Funktion ist sehr wichtig, wenn man mit Dateien arbeitet.
explode trennt einen Text an bestimmten Stellen (diese werden vom Programmierer bestimmt) und
speichert die Textabschnitte in einem Array. So können wir das Array wieder speziell Abfragen.
Diese Funktion bringt uns viele Vorteile, so können wir z.B. einen Login-Script basteln, das den
Benutzername und das Passwort in einer externen Datei speichert.
So können wir aber auch Texte viel leichter formatieren, z.B. die aus einem Gästebuch-Script.
Möchte man später das Design des Gästebuches verändern, so muss man nicht den ganzen Inhalt der
Datei verändern (in der die Einträge gespeichert sind), sondern man muss nur ein paar Zeilen im PHP-
Seite: 33
Was kann man mit PHP machen?
Code verändern.
Die Funktion kann man sowohl bei Texten, als auch bei Inhalten von gelesenen Dateien benutzen.
<?php
$zeile = "24.12.2006|Weihnachten|Frohes Fest";
$zerlegen = explode("|", $zeile);
echo "<b>$zerlegen[0]</b>, <i>$zerlegen[1]</i>
<u>$zerlegen[2]</u>";
?>
Als Ausgabe erhalten wir folgendes Erhalten:
24.12.2006, Weihnachten Frohes Fest
Wir schreiben unseren Text in die Variable $zeile und trennen dann die einzelnen Abschnitte mit | (Alt
Gr + <).
Danach benutzen wir die Funktion explode, diese trennt unseren Text überall, wo ein | steht. Wir
könnten auch andere Zeichen benutzen, aber man sollte immer Zeichen benutzen, die man
normalerweise nie für einen Text benutzen. (Also kein . (Punkt) nehmen o.ä.).
Danach geben wir mir echo den ersten Wert des Arrays aus (24.12.2006), danach den zweiten Wert
(Weihnachten) und zum Schluss den dritten Wert (Frohes Fest).
Wir Ihr wisst, fangen Arrays immer bei 0 an zu nummerieren.
So können wir alle gespeicherten Werte unabhängig voneinander bearbeiten.
Wenn wir dann mit implode das bearbeitete Array zusammenführen, können wir sehr leicht veränderte
Textdateien abspeichern.
Dieses Verfahren benutzt man besonders oft, wenn man mit Textdateien arbeitet.
Denn würde man in die Textdatei nicht die reine Information, also nur die Eingaben des Benutzers
speichern, sondern auch noch HTML Tags, so wäre das Neu design der Ausgabe extrem schwierig. Und
wenn man z.B. die eingegebene Emailadresse vor der Ausgabe noch einmal überprüfen möchte, ist
dies fast unmöglich.
Hier ein Beispiel:
Wir erstellen einen kleinen Shoutbox, aber nur den Teil, wie wir den Text wieder ausgeben.
Zuerst legen wir eine neue Datei an (text.txt).
Dort schreiben wir folgendes rein:
PHP-Einfach|Wie geht es euch?
Andavos|Super Site
Peter|Hier kann man echt viel lernen
Den Text könnt ihr euch selber aussuchen, aber achtet darauf das zwischen dem Namen und dem Text
ein | (Alt Gr + <) steht.
Jetzt wollen wir das mal wieder ausgeben.
<?php
$datei = file("text.txt");
Seite: 34
Was kann man mit PHP machen?
foreach($datei AS $ausgabe)
{
$zerlegen = explode("|", $ausgabe);
echo "Von <b>$zerlegen[0]</b><br>
$zerlegen[1]<br><br>";
}
?>
Da wir einen Zeilenumbruch als Trennzeichen der einzelnen Einträge benutzt haben, empfiehlt es sich
hier, diese Datei per file() einzulesen.
Danach kommt eine foreach-Schleife. Jede Zeile aus der Datei wurde ja als eigenes Arrayelement
gespeichert, und mit der foreach-Schleife gehen wir diese nacheinander durch.
Dabei haben wir das aktuelle Arrayelement per AS in die Variable $ausgabe gespeichert. Mit explode
trennen wir die einzelnen Abschnitte voneinander, anhand des Trennzeichen | und speichern dies in
dem Array $zerlegen
Danach geben wir mit echo den Inhalt der Datei aus.
Die Ausgabe würde so aussehen:
Von PHP-Einfach
Wie geht es euch?
Von Andavos
Super Site
Von Peter Pan
Hier kann man echt viel lernen
Man kann natürlich auch eine for- oder while-Schleife benutzten, dies würde dann so aussehen:
<?php
$datei = file("counter.txt");
for($a = 0; $a < count($datei); $a++)
{
$zerlegen = explode("|", $datei[$a]);
echo "Von <b>$zerlegen[0]</b><br>
$zerlegen[1]<br><br>";
}
echo "<br><br>Und jetzt die while-Schleife";
$datei = file("counter.txt");
$a = 0;
while($a < count($datei))
{
$zerlegen = explode("|", $datei[$a]);
echo "Von <b>$zerlegen[0]</b><br>
$zerlegen[1]<br><br>";
$a++;
}
?>
Seite: 35
Was kann man mit PHP machen?
Mit dieser Funktion können wir schon komplexe Scripts erstellen, die nur Textdateien
benötigen, darunter gehören auch recht sichere Login-Systeme.
Als nächstes schauen wir uns die Datum und Uhrzeit Funktion von PHP an.
Datum und Uhrzeit
Oft ist es interessant zu wissen, wann etwas gespeichert wurde, deswegen unterstützt PHP auch
Datums- und Uhrzeitangaben.
Das Datum und die Zeit werden von der Server Uhr abgelesen und können somit nicht von dem
Anwender manipuliert werden, allerdings sollte die Server Uhr dann auch richtig gehen.
In PHP ermittelt man die Uhrzeit zuerst mit einem UNIX-Timestamp. Dieser beinhaltet alle Sekunden
seit dem 1.1.1970 um 0:00 Uhr. Dadurch entsteht so ein Wert: 1266929979
Mit diesem Wert können wir noch nicht viel Anfangen, aber PHP darum um so mehr.
Aber zuerst brauchen wir den Timestamp, das geht so:
<?php
$timestamp = time();
?>
Mit dem Befehl time() ermitteln wir den aktuellen Timestamp und dieser wird in der Variable
$timestamp gespeichert.
Jetzt gibt es die Funktion date(format, timestamp)
Um jetzt ein Datum auszugeben, wenden wir den Befehl date mal an:
<?php
$timestamp = time();
$datum = date("d.m.Y - H:i", $timestamp);
echo $datum;
?>
Das Ergebnis sieht so aus:
23.02.2010 - 13:59 Hier sind ein paar Formate die Ihr benutzen könnt.
Format
Funktion
Beispiel
d
Tag des Monats, zweistellig
04, 15
j
Tag des Monats
5, 23
m
Nummer des Monats, zweistellig
05, 12
n
Nummer des Monats
4, 11
y
Jahr, zweistellig
98, 05
Seite: 36
Was kann man mit PHP machen?
Y
Jahr, vierstellig
1998, 2005
H
Stunden im 24-Stunden-Format, zweistellig 04, 18
G
Stunden im 24-Stunden-Format
4, 14
i
Minuten, zweistellig
04, 32
s
Sekunden, zweistellig
02, 55
w
Wochentag in Zahlenwert
1, 5
Das sind die wichtigsten Formate, aber es gibt noch weitere Formate, die man aber eher selten
benötigt.
Die Zeichen zwischen den Buchstaben (d.m.Y) dienen zur Trennung der Werte (Tag.Monat.Jahr), man
kann diese auch weglassen bzw. ändern.
Ihr könntet das Datum auch so ermitteln:
<?php
$datum = date("d.m.Y - H:i");
echo $datum;
?>
Dabei wird immer vom aktuellen Timestamp ausgegangen, man kann aber auch den Timestamp in
einer Datei, Variable bzw. in einer Datenbank abspeichern.
Diesen kann man später abfragen und dann ausgeben.
Wann wurde das geschrieben?
Manchmal möchte man wissen, vor wie vielen Minuten, Stunden oder auch Tagen etwas geschrieben
wurde.
Man könnte jetzt denken, dies würde so gehen, aber das ist falsch:
<?php
$timestamp = "120";
$test = date("i", $timestamp);
echo $test;
?>
Hier bekommen wir als Ausgabe 02, weil 120 Sekunden 2 Minuten sind. Aber gebt dort anstatt eine
120 eine 10900 ein.
Das wären dann natürlich viel mehr als 2 Minuten (181 Min.), aber als Ausgabe erhalten wir 01.
Das kommt, weil PHP immer die Minuten für eine bestimmte Uhrzeit angibt, und das ist natürlich nicht
richtig.
Deswegen brauchen wir für so etwas Mathe.
Wie wir wissen, hat 1 Minute 60 Sekunden, also teilen wir die Sekunden einfach durch 60.
<?php
Seite: 37
Was kann man mit PHP machen?
$timestamp = "120";
echo round($timestamp / 60);
?>
Mit round lassen wir den Wert auf, bzw. abrunden.
Möchtet Ihr den Wert immer abrunden, so benutzt anstatt round einfach floor.
Heute ist Dienstag
Manchmal möchte man ausgeben: Heute ist Dienstag.
PHP selber kann nur die Wochentage in der englischen Schreibweise ausgeben, aber wir möchten ja die
deutsche Schreibweise benutzen.
Deswegen erstellen wir als erstes ein Array, indem wir die ganzen Wochentagsnamen speichern:
<?php
$tage = array("Sonntag","Montag","Dienstag",
"Mittwoch","Donnerstag","Freitag","Samstag");
?>
Um jetzt den richtigen Tag auszugeben, verwenden wir so eine Ausgabe: $tage[Nummer]
Um die Nummer des Tages zu bekommen, benutzen wir wieder die Date-Funktion
<?php
$tag = date("w");
?>
Das Format w gibt uns den Wochentag zurück.
Ihr könnt dort natürlich auch den Timestamp zu einem bestimmten Zeitpunkt angeben.
Jetzt geben wir das einfach aus:
<?php
echo $tage[$tag]
?>
So kann man auch Monatsnamen ausgeben lassen, allerdings fängt ein Array bei 0 an zu
Nummerieren, aber es gibt keinen Monat 0.
Darum müssen wir den Werten des Array die Monatszahl zuordnen:
<?php
$monate = array(
1=>"Januar",
2=>"Februar",
3=>"März",
4=>"April",
5=>"Mai",
6=>"Juni",
7=>"Juli",
8=>"August",
9=>"September",
10=>"Oktober",
11=>"November",
12=>"Dezember");
?>
Danach fragen wir die Zahl des Monats ab:
<?php
$monat = date("n");
Seite: 38
Was kann man mit PHP machen?
?>
Dies geht mit dem Format n, zum Schluss lassen wir das wieder wie oben ausgeben:
<?php
echo $monate[$monat];
?>
Die Ausgabe wäre: Feber
Mit PHP können wir auch E-Mails verschicken
Mail Funktion
Die E-Mail Funktion von PHP ist sehr praktisch, denn damit können wir Formulardaten versenden
lassen oder ganze Newsletter-Scripts erstellen. Man kann dieses Verfahren auch für ein Gästebuch
benutzen, z.B. das man eine Mail erhält, wenn sich jemand in das Gästebuch einträgt.
Wichtig
Wenn ihr diese Funktion auf eurem Computer ausführt, erhaltet ihr normalerweise eine Fehlermeldung:
Warning: mail():...
Dies kommt, weil euer virtueller Server keine E-Mails verschicken kann. Die Fehlermeldung könnt ihr
ignorieren, denn auf dem echtem Server sollte sie eigentlich nicht mehr auftreten.
Mit der PHP-Funktion mail() könnt Ihr die Mails verschicken, der Befehl sieht so aus:
<?php
mail(Empfängeremail, Betreff, Nachricht,
"From: Absender <absenderemail>");
?>
Es ist sinnvoll die einzelnen Texte in Variablen zu speichern, damit man die Übersicht behält.
So lassen sich aber nur Text E-Mails verschicken, HTML E-Mails sind etwas komplizierter (siehe unten).
Eine fertige PHP Mail Funktion würde so aussehen:
<?php
$empfaenger = "[email protected]";
$betreff = "Die Mail-Funktion";
$from = "From: Nils Reimers <[email protected]>";
$text = "Hier lernt Ihr, wie man mit PHP Mails
verschickt";
mail($empfaenger, $betreff, $text, $from);
?>
So wird eine Mail von [email protected] an [email protected] verschickt.
Wenn euer Server richtig eingestellt ist, sollte die E-Mail sofort ankommen.
Natürlich könnt Ihr die Texte auch von einem Formular abfragen.
Die Mail wird so verschickt wie es im Quelltext des Scripts steht. Wenn Ihr z.B. ein ü durch ü
(HTML Code für ein ü) ersetzen lasst, so steht es später in der Mail: ü. Denn dort werden dann
nicht die Umlaute angezeigt, sondern der HTML-Code dafür (bei Text Emails).
Seite: 39
Was kann man mit PHP machen?
Außerdem dürft Ihr keine HTML-Befehle benutzen, wenn z.B. in der E-Mail <br> steht, so wird das
nicht in einen Zeilenumbruch verwandelt, sondern in der Mail steht dann <br>.
Für Zeilenumbrüche reicht ein einfaches Enter im Quelltext bzw. ein \n. Um etwas Einzurücken, müsst
ihr Tab bzw. Space benutzen.
HTML-Emails
Man kann mit PHP auch HTML-Emails verschicken
Aber Ihr solltet wissen, das nicht alle E-Mail Programme und E-Mail Anbieter diese HTML-Emails richtig
anzeigen.
Man kann der E-Mail dann auch einen schwarzen Hintergrund geben mit weißer Schrift.
Aber Achtung, nicht alle E-Mail Programme/Anbieter zeigen die weiße Schrift an. Diese ersetzten sie
dann manchmal durch schwarze Schrift, oder den schwarzen Hintergrund durch einen weißen. Somit
kann der Empfänger die E-Mail nicht lesen, weil der Text und der Hintergrund identisch sind.
Damit PHP HTML-Emails verschicken kann, müsst Ihr die $from Variable etwas verändern.
<?php
$empfaenger = "[email protected]";
$betreff = "Die Mail-Funktion";
$from = "From: Nils Reimers <[email protected]>\n";
$from .= "Reply-To: [email protected]\n";
$from .= "Content-Type: text/html\n";
$text = "Hier lernt Ihr, wie man mit <b>PHP</b> Mails
verschickt";
mail($empfaenger, $betreff, $text, $from);
?>
Die Variable $from wird einfach ergänzt, aber achtet darauf, das nach dem Absender noch ein \n
stehen muss.
Außerdem haben wir noch eine Reply (Antwort) Adresse angegeben.
Bei dem Text müssen wir aufpassen, dass wir die Anführungszeichen " durch ein Backslash (\)
maskieren müssen.
Beispiel: Beispiel 2:
<?php
$text = "Hier lernt Ihr, wie man mit
<font color=\"red\">PHP</font> Mails verschickt";
?>
Der Text der Nachricht muss in dem Fall mittels HTML formatiert werden! Hier reicht für ein
Zeilenumbruch kein Enter mehr, sondern man muss <br> benutzen.
Extra Funktionen
Wir können mir der mail-Funktion noch mehr machen, diese Angaben braucht man aber nicht
unbedingt.
Alle Angaben stehen im From Abschnitt.
Seite: 40
Was kann man mit PHP machen?
<?php
$from="From:Nils Reimers<[email protected]>\n";
$from .= "Reply-To: [email protected]\n";
$from .= "Cc: [email protected]\n";
$from .= "Bcc: [email protected]\n";
$from .= "X-Mailer: PHP/" . phpversion(). "\n";
$from .= "X-Sender-IP: $REMOTE_ADDR\n";
$from .= "Content-Type: text/html";
?>
Mit Cc und Bcc wird die E-Mail an zwei weitere Adressen gesendet. Diese beiden Adresse sind der Cc
und Bcc, diese Funktion kennt man auch von seinem Email-Anbieter.
Danach wird beim X-Mailer die PHP-Version des Servers angegeben. Mit X-Sender-IP erfahren wir
die IP-Adresse des Versenders.
Die letzte Angabe bestimmt wieder, das es eine HTML Mail ist.
Bei Mailprogrammen wie z.B. Outlook oder Thunderbird kann man sich den Quelltext einer Email
anzeigen lassen. Dort gibt es dann auch einen Head-Bereich, der bei uns der Variable $from entspricht.
Manche Werte werden von dem Mail-Server angehängt, andere können wir aber im PHP Script
definieren.
Als nächsten lernen wir, wie man einen Text durchsuchen und ersetzen kann.
Suchen und Ersetzen
Mit PHP kann man Texte auch durchsuchen lassen, und bestimmte Zeichen/Wörter durch einen
anderen Text ersetzten lassen.
Der einfachste Befehl dafür lautet: str_replace("Suchen", "Ersetzen", $variable).
Ein Beispiel:
<?php
$text = "Dies ist ein kleines Beispiel";
$text = str_replace("ist", "war", $text);
echo $text;
?>
Mit str_replace ersetzen wir ist durch war in der Variable $text und speichern dies wieder in der
Variable $text.
Wichtig zu wissen ist, dass str_replace zwischen Groß- und Kleinschreibung unterscheidet. Manchmal
möchte man aber ein Wort ersetzen lassen, egal ob es groß- bzw. klein geschrieben wurde.
Dafür gibt es den Befehl eregi_replace.
Dieser Befehl baut sich genauso auf, wie str_replace.
Ein Beispiel:
<?php
$text = "Dies IsT ein kleines Beispiel";
$text = eregi_replace("ist", "war", $text);
echo $text;
?>
Seite: 41
Was kann man mit PHP machen?
Hier wird IsT durch war ersetzt. Mit str_replace würde da immer noch IsT stehen.
Aber was ist wenn man eregi_replace Sonderzeichen (z.B. eckige Klammer) ersetzen möchte?
Ein Beispiel:
<?php
$text = "Dies [Ist] ein kleines Beispiel";
$text = eregi_replace("[ist]", "war", $text);
echo $text;
?>
Als Ausgabe erhalten wir einen komischen, nicht lesbaren Satz, weil eckigen Klammer in
eregi_replace eine bestimmte Funktion hat.
Dafür müssen wir die Klammer wieder mit Backslash maskieren.
<?php
$text = "Dies [Ist] ein kleines Beispiel";
$text = eregi_replace("\[ist\]", "war", $text);
echo $text;
?>
Jetzt erhalten wir den richtigen Satz.
\n zu <br>
PHP wandelt alle Zeilenumbrüche von einem Text, z.B. aus einem Formular, in \n um. Wenn man
diesen Text später wieder ausgibt, erhalten wir keine Zeilenumbrüche, weil HTML <br> dafür
verwendet.
Deswegen müssen wir mit PHP alle \n durch <br> ersetzen.
Dies können wir mir str_replace machen.
<?php
$text = "Dies Ist ein
kleines Beispiel";
echo $text; //Vor dem ersetzen
echo "<br>";
$text = str_replace("\n", "<br>", $text);
echo $text; //Nach dem ersetzen
?>
Den selben Effekt würde auch dieses Beispiel erzielen:
<?php
$text = "Dies Ist ein \n kleines Beispiel";
echo $text; //Vor dem ersetzen
echo "<br>";
$text = str_replace("\n", "<br>", $text);
echo $text; //Nach dem ersetzen
?>
Man kann auch nl2br($variable) benutzen, dabei werden alle \n in <br /> umgewandelt.
<?php
$text = "Dies Ist ein
kleines Beispiel";
$text = nl2br($text);
echo $text;
?>
Das <br /> ist auch für XHTML kompatibel.
Seite: 42
Was kann man mit PHP machen?
Anführungszeichen
Wenn man in seinem Text Anführungszeichen benutzt, und diesen Text mit PHP dann in einer Datei
speichert, werden automatisch alle Anführungszeichen mit einem Backslash (\) versehen.
Wenn man diesen Text später aus der Datei ausliest, stellt man fest, das dort immer noch die
Backslash sind. Deswegen kann man alle \" durch " ersetzen.
Dies geht mit dem PHP-Befehl: $variable = stripslashes($variable);
Ein Beispiel:
Erstellen Sie die Datei test.txt und schreiben Sie in diese Datei einen Text, in dem ein paar \"
vorkommen.
Warum macht man dies?
Ganz einfach, weil PHP Anführungszeichen maskiert, also wird aus " ein \".
Jetzt rufen wir mittels PHP die Datei auf.
<?php
$lesen = implode("",file("test.txt"));
echo $lesen;
echo "<br>";
$lesen = stripslashes($lesen);
echo $lesen;
?>
Sonderzeichen und HTML-Tags
Wenn man den Besucher etwas in ein Formular eingeben lässt (z.B. bei Gästebüchern), so kann er
auch z.B. HTML-Befehle dort eingeben. Wenn man diesen Text dann ausgibt, so werden die HTMLBefehle ausgeführt. Dies ist besonders schlimm, wenn er den Befehl für eine automatische
Weiterleitung eingibt, denn immer wenn man diesen Text aufruft, wird man auf eine andere Seite
weitergeleitet.
Deswegen können wir alle Sonderzeichen und HTML-Tags in den dafür vorgesehenen HTML-Code
umwandeln.
Dies bedeutet das aus < ein < wird, aus Ö wird Ö.
Dafür gibt es den Befehl htmlentities($variable);.
Ein Beispiel:
<?php
$text = "<a href=\"index.php\">Index</a>";
$text = htmlentities($text);
echo $text;
?>
Als Ausgabe erhalten wir <a href="index.php">Index</a>
Natürlich sind wir nicht gezwungen einen Text zu überschreiben, wenn wir etwas ersetzten möchten,
wir können für den neuen Text auch andere Variablen benutzen, aber meisten möchten man ja den
ersetzten Text ausgeben, und so benutzen wir weniger Variablen Namen.
Seite: 43
Was kann man mit PHP machen?
Außerdem sollten wir einen Text erst dann ersetzen lassen, wenn wir ihn ausgeben und nicht wenn wir
ihn speichern.
In PHP gibt es viele nützliche Funktionen
Nützliche Funktionen
Hier lernt ihr noch ein paar nützliche Funktionen von PHP kennen.
Sie sollen dazu dienen, eure PHP Fähigkeiten zu festigen, was ihr aber auf alle Fälle wissen und
verstehen müsst, ist der erste Abschnitt über include.
Fremde Dateien einbinden (include)
In PHP besteht die Möglichkeit, den Inhalt einer fremden Datei zu laden und auszuführen. Dieses ist
extrem praktisch und wird eigentlich in jedem PHP Script verwendet.
Wenn ihr später zu MySQL kommt, dann müsst ihr in jedem Script eine Verbindung zu Datenbank
aufbauen. Zu diesem Verbindungsaufbau müsst ihr unter anderem den Benutzernamen und das
Passwort angeben.
Was passiert ihr aber nun, wenn sich z.B. das Passwort verändert? Dann müsst ihr in jeder Datei das
Passwort anpassen, was unter Umständen sehr aufwendig ist.
Deswegen gibts in PHP die Funktion include("dateiname");, diese lädt aus einer anderen Datei den
Inhalt und führt diesen aus.
An einem Beispiel sieht das so aus:
include.php
<?php
$name = "Mein Name ist Max Mustermann";
?>
seite.php
<?php
include("include.php");
echo "Herzlich Willkommen auf meiner Seite<br>";
echo $name;
?>
Hier wird in seite.php der Inhalt von include.php geladen und entsprechend ausgeführt, als hättet ihr
folgenden Script stehen gehabt:
<?php
//Inhalt aus include.php
$name = "Mein Name ist Max Mustermann";
//Ende Inhalt aus include.php
echo "Herzlich Willkommen auf meiner Seite<br>";
echo $name;
?>
Dies ist natürlich noch ein recht unspektakuläres Beispiel, aber wie bereits erwähnt, in eigentlich jedem
größeren PHP Script findet man include-Anweisungen.
Seite: 44
Was kann man mit PHP machen?
Auch hilft euch dieser Befehl sehr schön, eure Webseite leichter zu verwalten. Wenn ihr eurer Website
eine neue Seite hinzufügen möchtet, dann muss der entsprechende Link ins Menü eingetragen werden.
Steht aber dieses Menü auf jeder Seite separat, müsst ihr alle Seiten anpassen.
Per include reicht es aber aus, nur eine Seite anzupassen und auf alle Seiten wird diese Änderung
übernommen.
navigation.php
Dies ist meine Navigation:<br>
<a href="home.php">Home</a><br>
<a href="seite1.php">Seite 1</a><br>
<a href="seite2.php">Seite 2</a><br>
<hr>
home.php
<?php
include("navigation.php");
?>
Dies ist meine Startseite
seite1.php
<?php
include("navigation.php");
?>
Dies ist meine 1. Unterseite
seite2.php
<?php
include("navigation.php");
?>
Und nun sind wir auf Unterseite 2.
Möchtet ihr hier nun eure Navigation anpassen, müsst ihr nur navigation.php entsprechend anpassen.
Noch zu erwähnen ist, dass man auch ganz gewöhnlichen HTML Code in Dateien stehen haben kann,
die per include geladen werden, wie es hier der Fall bei navigation.php ist. Dieser HTML Code wird
dann ganz normal ausgegeben.
Gibt es die Variable schon?
Möchte man mit PHP überprüfen, ob es eine Variable schon deklariert wurde, d.h. ob es diese schon
"gibt", so kann man dies mit isset($variable) überprüfen.
<?php
$var = $_GET["var"];
if(isset($var))
{
echo "Variable wurde gesetzt";
}
else
{
echo "Variable wurde nicht gesetzt";
}
?>
Wenn ihr diese Seite ganz normal aufruft, dann erhalten wir als Ausgabe, dass die Variable nicht
gesetzt wurde, wenn wir dann aber an die URL ein ?var=123 hängen, erhalten wir als Ausgabe, dass
die Variable übermittelt wurde.
Wenn man überprüfen möchte, ob es eine Variable noch nicht gibt, benötigen wir !isset($variable)
Seite: 45
Was kann man mit PHP machen?
<?php
$var = $_GET["var"];
if(!isset($var))
{
echo "Variable wurde nicht gesetzt";
}
?>
Das Ausrufungszeichen vor isset steht für NOT und kehrt die Rückgabe/Ergebnis der Funktion um. Also
wenn isset(); TRUE zurück gibt, steht dort ein FALSE und umgekehrt.
Man kann aber auch ganz normale Variablen überprüfen lassen.
Gibt es diese Datei?
Eine gute Frage ist, ob es eine Datei gibt. So kann man z.B. tote Links vermeiden.
$datei = "datei.php";
if(file_exists($datei))
{
echo "Die Datei gibt es";
}
?>
Mit file_exists() können wir überprüfen lassen, ob es eine Datei gibt. Wenn die Datei vorhanden ist,
gibt die Funktion TRUE, sonst FALSE zurück
Schreibt man !file_exists, so wird überprüft, ob die Datei nicht vorhanden ist.
Ist die Datei beschreibbar?
Wenn man Texte in Dateien speichert, so dürfen diese Dateien nicht Schreibgeschützt sein, das heißt
sie brauchen die Schreibrechte CHMOD(777).
Mit is_writeable() können wir überprüfen, ob die Datei beschreibbar ist.
<?php
if(is_writeable("datei.php"))
{
echo "sie ist beschreibbar";
}
?>
Mit einem Ausrufungszeichen vor dem is_writeable erhalten wir das Gegenteil als Effekt, sprich wir
können überprüfen, ob wir die Datei nicht beschreiben können.
Zufall
Hin und wieder braucht man ein Zufallszahlen, z.B. für kleinere Spielereien. Diese kann man aber auch
z.B. benutzen, um ein zufälliges Bild auszugeben.
Die Funktion selber ist einfach:
<?php
$zufall = rand(1,100);
echo $zufall;
?>
Mit der Funktion rand bestimmen wir eine Zufallszahl zwischen 1 und 100. Ihr könnt natürlich auch
einen anderen Zahlenbereich benutzen.
Seite: 46
Was kann man mit PHP machen?
In der Klammer steht die Untergrenze und danach die Obergrenze des Zahlenraumes.
Damit wir nicht immer die gleiche "Zufallszahl" erhalten, ist es wichtig, dass wir einen Startwert
festlegen:
<?php
srand((double)microtime()*1000000);
$zufall = rand(1,100);
?>
Dies geht mit srand. Dabei werden die Mikrosekunden (microtime) mal 1 Millionen genommen.
Anschließend wird wieder eine Zahl zwischen 1 und 100 ermittelt.
Bei neueren PHP-Versionen wird die Festlegung des Startwertes automatisch vorgenommen.
Den Besucher ausspionieren
Mit PHP haben wir die Möglichkeit, viele Informationen über den Besucher zu erhalten z.B. seine IPAdresse.
Diese erfahren wir so:
<?php
$ip = $_SERVER["REMOTE_ADDR"];
echo $ip;
?>
Wenn ihr diesen Befehl auf eurem virtuellem Server aufrufen, erhalten ihr normalerweise 127.0.0.1.
Auf dem echtem Server erhaltet ihr aber dann die IP Adresse des Besuchers.
Außerdem kann man noch erfahren, auf welcher Seite der Besucher gerade ist:
<?php
$seite = $_SERVER["PHP_SELF"];
echo $seite;
?>
Wenn eure Datei jetzt in einem Unterorder liegt, so wird der Ordnername auch angezeigt, möchte man
diesen entfernen, so braucht man basename($variable).
<?php
$seite = $_SERVER["PHP_SELF"];
echo basename($seite);
?>
Wenn man aber den Namen des Ordners wissen möchte, sollte man dirname($variable) benutzen.
<?php
$seite = $_SERVER["PHP_SELF"];
echo dirname($seite);
?>
Wenn man viel mit dynamischen Seiten arbeitet, reicht es nicht mehr aus, nur den Dateinamen zu
erfahren.
Denn wenn man auf der Seite index.php?id=1 ist, und dies mit PHP_SELF anzeigen möchte, so
erhält man als Ausgabe index.php.
Damit diese Werte auch angezeigt werden, müssen wir die Funktion etwas umschreiben:
<?php
$seite = $_SERVER["REQUEST_URI"];
echo $seite;
?>
Seite: 47
Was kann man mit PHP machen?
Jetzt würden wir als Ausgabe z.B. index.php?id=1 erhalten.
Mit PHP können wir auch erfahren, woher der Besucher kommt:
<?php
$seite = $_SERVER["HTTP_REFERER"];
echo $seite;
?>
Dieser Befehl funktioniert aber nur, wenn wir durch einen Link oder ähnliches auf die Seite kommen
sind.
Manche Browser unterdrücken diese Information.
Wir können auch erfahren welchen Browser der Besucher benutzt:
<?php
$browser = $_SERVER["HTTP_USER_AGENT"];
echo $browser;
?>
Als nächstes lernen wir, wie man mit PHP Sessions arbeitet.
PHP Sessions
Mit PHP Sessions hat man die Möglichkeit, bestimmte Daten während einer Folge von Aufrufen eurer
Website festzuhalten.
Dem Besucher wird eine einzigartige Session-ID zugeordnet. Somit kann PHP den Besucher genau
Identifizieren. Diese Session ID wird entweder als Cookie gespeichert oder mit an die URL gehängt.
Mit PHP Sessions könnt ihr jetzt theoretisch unendlich viele Variablen, ink. Werte, für einen Besucher
speichern, z.B. seinen Username, was er ganz am Anfang in ein Formular eingegeben hat und vieles
mehr.
Diese Werte könnt ihr später ausgeben und damit auch arbeiten, z.B. überprüfen lassen.
Sicherheit und Anwendungsbereich Sessions bieten zwar keine 100%tige Sicherheit, dennoch sind
sie relativ sicher.
Eine entführte (geklaute) Session-ID ermöglicht dem Dieb, auf alle Daten zuzugreifen, die mit dieser
Session-ID verbunden sind.
Man benutzt bei sehr vielen Scripts Sessions, z.B. Loginsysteme (Foren & Portale), Warenkörbe etc.,
deswegen lohnt es sich immer, diese Funktion zu erlernen.
Wie bekommt der Angreifer denn die Sesion ID herraus?
Das passiert vor allem, wenn die andere Person eine URL mit der Session ID an eine weitere Person
weitergibt. Dies kann aber auch passieren, wenn die Session IDs in den Logfiles auftauchen.
Session ID durch Zufall erraten
Natürlich kann der Dieb auch eine Session ID erraten, allerdings ist dies sehr unwahrscheinlich.
Wahrscheinlichkeitsrechnung anschauen
Erste Schritte
Ganz oben auf der Site, bevor wir irgend etwas ausgeben, egal ob mit PHP oder mit HTML, muss
folgendes stehen:
<?php
Seite: 48
Was kann man mit PHP machen?
session_start();
?>
Mit session_start(); sagen wir dem PHP Script, dass diese Seite mit Session arbeitet.
Dieser Code muss immer ganz oben stehen, wenn ihr mit irgendwelchen Session Befehlen arbeitet.
Hier sind zwei mögliche Fehlerquellen:
1. Cannot send session cookie - headers already sent by Wenn diese Fehlermeldung erscheint, dann ist
irgendwo vor dem kleinen Script eine Ausgabe. Eine leere Zeile (Zeilenumbruch) oder ein Space reicht
schon aus.
2. Warning: session_start() [function.session-start]: open(...) failed: No such file or directory
Wenn diese Warnung erscheint, dann ist der angegebene Pfad zur Speicherung der Session Datei nicht
verfügbar.
Als nächstes schauen wir, wie wir eine Session-Variable registieren:
<?php
$_SESSION['name'] = "wert";
?>
Falls du eine ältere PHP Version als 4.1.0 benutzen, musst du $HTTP_SESSION_VARS['name']
benutzen.
Um den obigen Wert auszugeben, speichern wir vorher die Session-Variable in einer Variable
<?php
$name = $_SESSION['name'];
echo $name;
?>
Wenn wir keine extra Variablen benutzen möchten, so können wir den Session Befehl nicht direkt in die
Zeichkette schreiben.
So geht es aber:
<?php
echo "Hallo ".$_SESSION['name']." Mueller";
?>
Dies scheint zwar nicht viel zu sein, allerdings können wir eine Session-Variable genauso behandeln,
wie eine normale Variable, nur müssen wir manchmal auf die Anführrungzeichen achten..
Um eine Session zu registieren, benutzt man normalerweise folgenden Script:
<?php
if (!isset($_SESSION['name']))
{
$_SESSION['name'] = "Klaus";
}
?>
Hier wird zuerst überprüft ob, es die Session-Varibale schon gibt. Falls es sie nicht gibt, wird sie
registriert.
Würde wir anstatt !isset isset schreiben, könnten wir überprüfen, ob die Session registriert wurde,
oder nicht. Dies benutzt man bei Logins.
Um alle Session-Daten der Sitzung zu löschen, benutzt man session_destroy()
<?php
session_destroy();
?>
Dieser Befehl löscht alle Daten der Session.
Dieser Befehl kann nur auf Seiten eingesetzt werden, die mit session_start() beginnen. Dies ist bei
allen Session-Befehlen der Fall.
Um eine einzelne Session zu deaktivieren, benötigt man unset
Seite: 49
Was kann man mit PHP machen?
<?php
unset($_SESSION['name']);
?>
Dieser Befehl löscht die Werte für die Session-Variable name.
Beispiel
Damit das etwas verständlicher wird, ist hier ein kleines Beispiel. Dabei gibt man zuerst einen Wert in
ein Formular ein:
formular.html:
<form action="seite1.php" method="post">
Dein Name: <br>
<input type="Text" name="name">
<input type="Submit">
</form>
seite1.php
<?php
session_start(); //Ganz wichtig
$name = $_POST['name'];
if(!isset($name))
{
$name = "Gast";
}
//Session registieren
$_SESSION['username'] = $name;
//Text ausgeben
echo "Hallo $name <br>
<a href=seite2.php>Weiter</a>";
?>
seite2.php
<?php
session_start(); //Ganz wichtig
//In $name den Wert der Session speichern
$name = $_SESSION['username'];
//Text ausgeben
echo "Du heißt immer noch: $name";
?>
Dies ist ein ganz simples Beispiel, zeigt aber gleich die Stärke von Sessions.
Bei dem Formular geben wir unseren Namen an, diese Daten werden dann an seite1.php gesendet.
Dort werden sie abgefragt, und der name aus dem Formular wird in der Session username
gespeichert.
Wenn wir dann auf den Link klicken, und auf seite2.php gelangen, so können wir dort weiter den
Namen des Besuchers (der Names aus dem Formular) ausgeben.
Dies könnte man über beliebig viele Seiten weiterführen, mit unbegrentzt vielen Session-Variablen.
Es gibt noch weitere, weitaus sinnvollere Beispiele, z.B. Login Sessions bzw. Login mit Sessions und
Dateien.
Gut jetzt haben wir die wichtigsten PHP-Befehle kennen gelernt, jetzt wird es Zeit, etwas mit MySQL zu
arbeiten. Damit kann man viele Sachen viel leichter realisieren.
MySQL Einführung
Seite: 50
Was kann man mit PHP machen?
PHP und MySQL sind eigentlich untrennbar, darum muss jeder der PHP programmieren möchte, auch
die Grundlagen von MySQL verstehen.
In unserer MySQL Einführung gehen wir auch die wichtigsten Sachen in Verbindung von PHP mit
MySQL ein.
Anfang
Was ist eigentlich MySQL und wie erstelle ich einen MySQL Server auf meinem PC?
Tabellen und Spalten
Wie lege ich per phpMyAdmin eine Datenbank, Tabellen und Spalten an?
Tabellen füllen
Wie bekomme ich jetzt Daten in die Tabelle?
Verbindung aufbauen
Wie baut ein PHP-Script eigentlich eine Verbindung zur MySQL Datenbank auf?
Daten abfragen und ausgeben
Wie man mit PHP Daten abfragt und diese ausgibt.
Weitere Abfragen
Weitere Möglichkeiten eine Tabelle abzufragen.
Daten hinzufügen
Wie speichert man mit PHP Daten in eine Tabelle?
Daten ändern
Manchmal muss man Daten in einer Tabelle ändern.
Daten löschen
Hin und wieder muss man ganze Datensätze aus einer Tabelle löschen.
Anzahl der Zeilen
Wieviele Einträge wurden eigentlich gefunden?
Verbindung beenden
Zum Schluss beenden wir noch die Verbindung zur Datenbank
MySQL Fehler finden
Wie man Fehler in der SQL-Abfrage findet.
Anfang
Ihr könnt euch diese Einführung auch herunterladen
MySQL ist eine Datenbank die wie z.B. Access auf SQL aufgebaut ist. Bei den meisten WebspaceAngeboten mit Datenbank handelt es sich um eine MySQL-Datenbank, denn die benötigte Software
dafür ist Freeware und sie ist leicht zu bedienen.
Auch wenn es am Anfang etwas schwerer ist mit einer Datenbank zu arbeiten, lohnt sich der
Umstiegt von Textdateien auf MySQL.
Seite: 51
Was kann man mit PHP machen?
Denn mit einer Datenbank kann man bestimmte Scripts viel leichter realisieren als mit Textdateien.
Denn mit MySQL hat man viel besser Möglichkeiten gezielte Werte auszugeben, zu überprüfen, zu
bearbeiten und zu löschen.
Wir können auch die Werte in einer Tabelle viel besser sortieren lassen.
Rundrum hat die Datenbank gegenüber Dateien ein riesen Vorteil, und eine MySQL Datenbank mit PHP
zu "bedienen" ist sehr viel leichter, als mit Textdateien zu arbeiten. Desweiteren sind MySQL
Datenbanken schneller als Textdateien und man verliert nicht so schnell die Übersicht, wenn die
Tabelle etwas länger wird.
Wenn wir Xampp installiert haben, wurde eine MySQL-Datenbank-Server automatisch mit installiert
und auch gleich gestartet.
Um dies zu Überprüfen, rufen wir folgende Datei auf:
c:\xampp\xampp\xampp-control.exe
Wenn wir das Programm gestartet haben, erscheint zuerst ein Fenster, auf dem wir den Status der
wichtigsten Module erkennen.
Hinter Apache: und MySQL: sollte Running stehen, wenn dies nicht der Fall ist, drückt man einfach
auf den Start-Button.
Wenn wir die xampp_start.exe aufrufen, dann werden diese beiden Dienste normalerweise gestartet.
So als nächstes müssen wir für uns einen Benutzer anlegen, dies geht am besten per phpMyAdmin.
Normalerweise ist dies gleich mit installiert worden, und wir können es per
http://localhost/phpmyadmin aufrufen.
Dieser Ordner wird in der Übersicht von http://localhost/ nicht mit angezeigt.
Sonst können wir es hier herunterladen.
Das Archiv einfach in den Ordner htdocs entpacken und wir können es per Browser über den Server
aufrufen.
Einfach http://localhost/ordner_von_phpmyadmin/ aufrufen.
Dieser Ordner wird dann auch schon angezeigt, wenn wir http://localhost/ aufrufen.
Benutzer anlegen
So nachdem wir auf die Oberfläche von phpMyAdmin gelangt sind, wollen wir einen neuen Benutzer
anlegen.
Dafür klicken wir zuerst auf den Link: Rechte
Seite: 52
Was kann man mit PHP machen?
Danach sehen wir die bereits angelegten Benutzer, allerdings wollen wir einen neuen Erstellen, dafür
klicken wir auf: Neuen Benutzer hinzufügen
Danach müssen wir die Einstellungen für den Benutzer vornehmen.
Als Benutzername habe ich Andavos benutzt. Als Host müssen wir in der Auswahlliste Lokal angeben.
Also Kennwort habe ich andavos angegeben.
Danach setzen wir die Globale Rechte, dies heißt, wir bestimmen, was der Benutzer alles darf, und
was nicht.
Bei Daten und Struktur sollten wir alles Auswählen, die Einstellungen bei Administration ist nicht
zwingend Notwendig, und auf den meisten Server hat man dort keine Rechte, also muss man diese
nicht Auswählen.
Dann auf Ok drücken und das war's.
Seite: 53
Was kann man mit PHP machen?
Danach gelangen wir zu der Übersicht zurück und dort sollte in der Liste ein neuer Eintrag vorhanden
sein mit dem Benutzer Andavos und dem Host localhost.
So das war es schon, was wir an der MySQL-Datenbank anpassen mussten.
Als nächsten schauen wir, wie wir Tabellen und Spalten in unsere Datenbank bekommen.
Tabellen und Spalten
Jetzt wollen wir eine Datenbank erstellen mit unserer ersten Tabellen. Eine Möglichkeit wäre jetzt,
SQL-Befehle zu benutzen, aber das ist für den Anfang zu umständlich.
Aber zum Glück war im XAMPP ein netter PHP-Script names phpMyAdmin enthalten.
Man findet den Script unter http://localhost/phpmyadmin/.
Mit diesem Script können wir Datenbank erstellen, Tabellen erstellen, bearbeiten, löschen etc. Bei den
meisten Webspaceangeboten mit MySQL wurde phpMyAdmin schon installiert.
Wenn wir phpMyAdmin jetzt aufrufen, müssen wir nichts mehr einstellen.
Wichtig: Es gibt phpMyAdmin in vielen verschiedenen Versionen, die sich Teilweise im Aussehen stark
Seite: 54
Was kann man mit PHP machen?
unterscheiden.
Dies ist aber weiter nicht schlimm, evt. sind bei euch keine Symbole sondern normaler Text und evt.
ist dies auch noch auf Englisch, aber dafür reicht einfaches Schulenglisch.
Direkt auch der Startseite finden wir ein Formular: Neue Datenbank anlegen
In diesem Feld haben wir die Möglichkeit, eine neue Datenbank anzulegen.
Bei den meisten Webspace angeboten haben wir diese Möglichkeit nicht, denn dort wurde die
Datenbank bereits für uns angelegt.
Aber auf dem eigenem PC legen wir erstmal eine neue Datenbank an. Wir tippen in das Feld den
Namen der neuen Datenbank ein, z.B. homepage.
Das Feld Kollation müssen wir nicht beachten, also lassen wir es unverändert.
Anschließend klicken wir auf Anlegen.
Haben wir das gemacht, ist im linken Auswahlmenü ein neuer Eintrag mit dem Namen unserer
Datenbank.
Die restlichen Einträgen sollten wir nicht verändern, da diese teilweise Daten über den Server
enthalten.
Als nächstes wählen wir Links den Eintrag homepage aus, denn das ist unsere Datenbank.
Wenn wir dies gemacht haben, sehen wir erneut ein Formular: Neue Tabelle in Datenbank hompage
erstellen
Darunter sind 2 Eingabefelder, unter anderem wie die neue Tabelle heißen soll (Name) und wie viele
Spalte sie enthalten soll (Felder).
Bei Name geben wir jetzt z.B. links an und bei Felder 5
Dann noch auf Ok klicken und schon wurde eine neue Tabelle erstellt.
Jetzt wurde wieder ein Formular geladen, wo wir den Spalten noch Namen und Eigenschaften geben
müssen.
Unter Feld geben wir den Namen der Spalte an. Bei Typ geben wir an, was für ein Feld das ist, z.B.
ein Feld das nur Zahlen enthält, oder Text.
Bei Länge/Set geben wir an, wieviele Zeichen in das Feld max. gespeichert werden.
Das Feld Kollation ist erstmal unwichtig und kann ausgelassen werden.
Mit Attribute bestimmen wir die Eigenschaften der Spalte, Standard dient dazu, welcher Wert in die
Spalte eingetragen wird, wenn die Spalte nicht ausgefüllt wird. Extra ist wieder eine Eigenschaft. Das
Symbol mit dem Schlüssel
steht für Primärschlüssel. Dies bedeutet soviel wie, dass der Wert in der
Spalte eindeutig ist, und in keiner anderen Spalte stehen darf/kann.
Als erstes brauchen wir die Spalte: id.
Fast jede Tabelle hat diese Spalte, denn so kann man jede Zeile später identifizieren/ansprechen.
Für diese Spalte benutzen wir folgende Werte (von links nach rechts):
id, int, 10, unsigned, not null, , auto_increment, primary, ,
Die Spalte id ist ein Zahlenfeld (int). Diese Zahl darf max. 10 Stellen haben. unsigned bedeutet, dass
in dem Feld nur positive Zahlen gespeichert werden.
Mit auto_increment legen wir fest, das der Wert des Feldes jedes mal um 1 erhöht wird, wenn ein
Seite: 55
Was kann man mit PHP machen?
neuer Eintrag hinzukommt.
Außerdem bestimmen wir, dass dieses Feld der Primärschlüssel ist. Damit können wir jede Zeile
einzeln ansprechen.
Die nächsten Felder stehen so aus:
url, varchar, 150, not null,
urlname, varchar, 150, not null,
name, varchar, 150, not null,
beschreibung, text, , not null,
Erklärung:
varchar ist ein Bezeichnungsfeld. Diese Felden dürfen max. 255 Zeichen haben. Bei Length/Set geben
wir an, wie viele Zeichen die einzelnen Spalten haben dürfen. Bei der Spalte url z.B. nur 150.
text ist ein Textfeld, dies kann mehr als 255 Zeichen behalten, bis zu 65535 Zeichen. Falls man einen
noch längeren Text hat, sollte man longtext benutzen.
Dieses not null bestimmt, das der Wert nicht NULL sein darf. Dies ist ein spezieller Wert der
Informatik, der praktisch ein 'nichts' darstellt, auch als NULL-Byte genannt. Wenn man jetzt z.B.
keinen Namen angibt, so bleibt das Feld in der Datenbank leer.
Ein leeres Feld ist aber etwas anderes als NULL.
Die unterschiedlichen Spaltentypen gibt man an, damit man Platz spart, und damit die Ausgabe
schneller ist. Deswegen sollte man für das id Feld z.B. keinen longtext als Type wählen.
So sieht es fertig aus (Bild)
Danach auf Speichern klicken und schon ist unsere 1. Tabelle fertig.
Haben wir die Datenbank im linkem Fenster ausgeählt, sehen wir die Tabelle links.
Dürcken wir jetzt darauf, öffnet sich im rechtem Fenster eine Seite, wo wir die verschiedenen Spalten
mit deren Eigenschaften sehen können.
Falls wir etwas an einer Spalte ändern möchten, klicken wir auf Ändern bzw. auf den Bleistift
schon haben wir wieder ein Formular wo wir die Werte anpassen können.
, und
Falls wir Spalten vergessen haben, können wir unter Felder hinzufügen neue Spalten anlegen. Dort
können wir auch bestimmen, wo diese angefügt werden, z.B. An das Ende der Tabelle.
Klickt man dort auf OK, bekommen wir wieder ein Formular, wo wir den Spalten Namen und Typen
zuweisen müssen.
Gut jetzt haben wir einen Tabelle, aber wie kommen dort jetzt Daten hinnein?
Dies erklärt euch Tabellen füllen mit phpMyadmin
Tabellen füllen
So jetzt haben wir schon eine Tabelle mit Spalten. Allerdings können wir damit noch nicht viel Anfang,
denn zuerst müssen wir ja diese Tabelle mit Daten füllen.
Dafür kann man entweder einen PHP-Script schreiben, oder wir benutzen wieder phpMyAdmin.
Seite: 56
Was kann man mit PHP machen?
Dazu rufen wir zuerst unsere Tabelle auf, indem wir im linken Fenster auf unser Datenbank homepage
klicken.
Danach öffnet sich im rechten Fenster eine Seite, wo die Tabellen der Datenbank sind. Dort ist auch
unsere Tabelle links. Rechts neben links ist ein Link, Einfügen bzw.
.
Falls man jetzt erst im linkem Fenster auf die Datenbank homepage geklickt hat, und danach dann
wieder im linkem Fenster auf die Tabelle links geklickt hat, so steht der Link für Einfügen oberhalb der
Struktur der Tabelle.
In dieser Auswahlleiste können wir zwischen den einzelnen Anzeigen hin und her springen, klicken wir
wieder auf Struktur, dann wird die Struktur der Tabelle angezeigt.
Klicken wir auf Anzeigen, so stehen wir die eingetragenen Werte, sofern welche vorhanden sind.
Haben wir jetzt dort drauf geglickt öffnet sich ein Formular mit den Spalten die wir im letzen Kapitel
erstellt haben.
Das id-Feld sollten wir leer lassen, denn dies ist ja auto_increment, sprich es wird bei jedem neuem
Eintrag um 1 erhöht.
Dieses Feld lassen wir also komplett leer.
Ganz links steht Field (unser Spaltenname), dann Typ, dort sehen wir nochmals welche Eigenschaften
die Spalte hat.
Bei Function könntet ihr jetzt bestimmte Eigenschaften auswählen, wie der Eintrag gespeichert
werden soll, allerdings lassen wir dieses Feld für den Anfang immer leer. Bei Wert schreibt ihr den
Wert/Text, der später in der Tabelle stehen soll.
Bei mir sieht das nach dem Ausfüllen so aus:
Das Formular Feld darunter sieht identisch aus, und wir können es benutzen um einen 2. Wert
einzufügen.
Allerdings wenn wir die Auswahl: Ignorieren anlassen, werden die Daten nicht gespeichert.
Klicken wir jetzt noch auf Ok, wird der Eintrag in die Tabelle gespeichert. So können wir jetzt immer
wieder neue Datensätze anlegen.
Wurden die Daten wirklich gespeichert?
Natürlich können wir auch per phpMyAdmin nachgucken, ob der Eintrag gespeichert wurde.
Dazu klicken wir auf unser Datenbank homepage.
Im rechtem Fenster sieht man dann eine (HTML)-Tabelle mit den (MySQL)-Tabellen der Datenbank.
Dort sieht man dann auch unsere Tabelle: links
Klicken wir auf den Link, ist im rechten Fenster (oben) eine Menüleiste.
Dort ist auch ein Link
Anzeigen.
Klicken wir dort drauf, sehen wir die ersten 30 Einträge der Tabelle links.
Seite: 57
Was kann man mit PHP machen?
Wenn ihr jetzt die Einträge vor euch habt, steht ihr zwei Bilder, einmal Bearbeiten
und Löschen
Jetzt haben wir schon Daten in der Tabelle, aber wie kann man diese wieder ausgeben? Dafür muss
der PHP-Script erstmal eine Verbindung aufbauen.
Verbindung aufbauen
Im letzen schritt habt ihr ja schon gesehen, wie man eine Tabelle mit zugehöriger Datenbank anlegt.
Grundsätzlich können in eine Datenbank so viele Tabellen, wie nötig. Aus diesen Tabellen werden die
Werte später wieder abgefragt. Wenn ihr die letzten Schritte befolgt habt, sied ihr jetzt besitzer einer
leeren Tabelle mit dem Namen "links" in der Datenbank "homepage". Ihr könnt jetzt über "Einfügen"
(oben rechts) schonmal Werte vorraussetzen, was hier wohl praktisch ist, doch kann man natürlich
auch innerhalb eines PHP-Scripts Daten schreiben/lesen. Dabei gibt es einige immer wieder
vorkommende Sachen:
- Zuerst muss die Verbindung aufgebaut werden
- Auswählen der Datenbank
- Der eigentliche Befehl wird entweder erst geschrieben und in einer Variable gespeichert, die dann als
Argument zu mysql_query() fungiert, oder er wird direkt in mysql_query() geschrieben
- Nach den eigentlichen Arbeiten kann die Verbindung wieder geschlossen werden.
Verbindungsaufbau
Für den Verbindungsaufbau braucht ihr: Den Namen eures Severs, euren Benutzernamen und euer
Passwort zur Datenbank.
Der Befehl hierzu lautet:
<?php
$verbindung = mysql_connect("servername",
"euerBenutzername","euerPasswort");
?>
Dieses Script muss vor euren Arbeiten mit der Datenbank stehen. Macht ja auch wenig Sinn, die
Verbindung am Ende aufzubauen ;)
Meistens ist der Servername: localhost.
Auswählen der Datenquellen
Nun habt ihr eine Verbindung zum Server, auf dem die Datenbank liegt, doch unter Umständen haben
das hunderte andere Leute auch.
Ihr müsst jetzt noch eure Datenbank auswählen. Die Verbindung zur Datenbank wird mit dem Befehl
mysql_select_db("Datenbankname"); hergestellt.
Damit wir dort schneller Fehler erkennen, kann die Abfrage auch so aussehen:
<?php
$verbindung = mysql_connect ("Servername",
"Username", "Passwort")
or die ("keine Verbindung möglich.
Benutzername oder Passwort sind falsch");
mysql_select_db("Datenbankenname")
or die ("Die Datenbank existiert nicht.");
?>
Dieses die beendet den Scriptablauf, wenn ein Fehler auftritt und gibt die Fehlermeldung in den
Klammern aus. Wenn alles klappt seht ihr bisher keinen Text.
Um eine Verbindung auf eurem PC zu machen, müsst ihr als Servername localhost angeben und dann
Seite: 58
Was kann man mit PHP machen?
den Username und das Passwort angeben, das ihr am Anfang gespeichert hat, bei mir also Username:
Andavos und Passwort: andavos
Jetzt haben wir eine Verbindung aufgebaut, aber wie können wir jetzt die Daten ausgeben?
Einfache Datenabfrage und Ausgabe
Nach dem letzten Kapitel habt ihr immerhin schon einige Daten in eurer Tabelle. Doch wie bekommt
man sie wieder raus? Zuerst einmal muss man wieder den obligatorischen Schritt mit dem
Verbindungsaufbau machen.
Einfache Abfrage
Eine einfache Abfrage ist gar nicht so kompliziert, hier ist erst mal die allgemeine Form:
<?php
$abfrage = "SELECT Spaltenname FROM Tabellenname";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo "$row->Spaltenname";
}
?>
Auf unser Beispiel mit der Linkliste würde bezogen, würde es z.B. so aussehen:
<?php
$abfrage = "SELECT url FROM links";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo "$row->url <br>";
}
?>
Zuerst wird die Anfrage gesendet, dies geht wieder per mysql_query(). Danach folgt eine whileSchleife, die ausdrückt: "Führe die Anweisung solange aus, bis in das Array $row keine Werte mehr
geschrieben werden. ". Dazu benutzen wir den Befehl mysql_fetch_object()
Um nun einzelne Spalten anzusprechen muss man als Anweisung
echo "$row->spaltenname";
benutzen, wobei man natürlich die Werte nicht nur ausgeben muss, sondern sie auch z.B. überprüfen
lassen kann.
Diese Ausgabe funktioniert aber nur innerhalb der while-Schleife, außerhalb nicht.
Innerhalb der while-Schleife könnt ihr ganz normale PHP-Befehle benutzen und sogar weitere Tabellen
abfragen.
Natürlich möchte man nicht nur eine Spalte einer Tabelle ausgeben. Um mehrere auszugeben muss
man die Abfrage etwas anpassen:
<?php
$abfrage = "SELECT id, url, urlname FROM links";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo "$row->id, $row->url, $row->urlname <br>";
}
?>
Dabei werden alle Spaltennamen mit einem Komma von einander getrennt.
Seite: 59
Was kann man mit PHP machen?
Möchte man alle Spalten abfragen, kann man auch anstatt die Spaltennamen zu schreiben, ein *
benutzen.
<?php
$abfrage = "SELECT * FROM links";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo "$row->name, $row->url, $row->urlname <br>";
}
?>
Achtung: Man kann zwar das Sternchen (*) benutzen, allerdings ist die Ausgabe dann etwas
langsamer, denn MySQL muss alle Spalten abfragen und zwischenspeichern, obwohl evt. nur 2 oder 3
Spalten benötigt werden. Auf Rechnern mit wenig Arbeitsspeicher kann so das Script schon merklich
langsamer werden. Deswegen sollte man die verschiedenen Spaltennamen mit einem Komma
voneinander trennen.
Auch wenn man alle Spalten benötigt, sollte man die Spalten einzeln aufführen, denn so muss der
Server die Reihenfolge nicht immer wieder neu berechnen.
Allerdings sollte man darauf nur achten, wenn man viele (8 und mehr) Abfragen pro Seite hat, und
dieses Script viele Personen (30 und mehr) auf einmal benutzen, oder wenn man einen langsamen
Server hat. Ist dies nicht der Fall, dann kann man ruhig Sternchen benutzen, denn den der zeitliche
Unterschied ist kaum messbar.
In Beispielen findet man zwar meistens ein Sternchen, denn so muss der Autor nicht darauf achten,
dass der Leser die Datenbank richtig abfragt.
Es gibt aber noch viele weitere Abfragen.
Weitere Abfragen
WHERE
Bisher haben wir immer alle Datensätze abgefragt, aber zum Glück können wir auch gezielt einzelne
Datensätze abfragen. Dabei ändert sich nur der Text (Wert) der Variable $abfrage, alles andere bleibt
gleich.
Zu erst lernen wir das Attribut WHERE kennen, damit fragen wir Datensätze ab, die einem oder
mehreren Kriterien entsprechen.
Die Abfrage dafür muss so aussehen:
<?php
$abfrage = "SELECT * FROM links WHERE id = '1'";
?>
Wie ihr wisst, muss danach wieder das alte Script folgen, also so:
<?php
$abfrage = "SELECT * FROM links WHERE id = '1'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo "$row->url <br>";
}
?>
Seite: 60
Was kann man mit PHP machen?
Aber wie schon oben erwähnt, ändert sich nur der Text (Wert) von $abfrage.
Mit dieser Abfrage wählen wir alle Datensätze aus, welche die id 1 haben, und nur dieser Datensatz
wird dann ausgegeben.
Wir können aber auch andere Kriterien setzen, z.B. so:
<?php
$abfrage = "SELECT * FROM links WHERE id != '1'";
?>
Hiermit geben wir alle Datensätze aus, die als ID nicht den Wert 1 haben.
Oder wir fragen die Datensätze ab, in denen die id kleiner als 10 ist
<?php
$abfrage = "SELECT * FROM links WHERE id < '10'";
?>
Dies geht natürlich auch mit größer (>) aber auch mit allen anderen Operatoren die ihr von den
Schleifen/if-Anweisungen her kennt.
Wir können auch andere Spalten überprüfen lassen, z.B. alle Datensätze ausgeben, in denen als name
Andavos angegeben wurde. Dies sieht dann so aus:
<?php
$abfrage = "SELECT * FROM links WHERE name
LIKE 'Andavos'";
?>
Anstatt das Gleichheitszeichens wurde jetzt LIKE benutzt. Man könnte zwar ein Gleichheitszeichen
benutzen, allerdings sollt ihr beide Varianten sehen. Man kann auch NOT LIKE benutzen, dies ergibt
den selben Effekt wie !=.
Evt. möchte man ja auch mehrere Datensätze abfragen, dafür gibt es das Attribut: IN ()
<?php
$abfrage = "SELECT * FROM links WHERE id IN ('1', '3')";
?>
Dies würde die Datensätze 1 und 3 abfragen. Das gleiche geht auch mit Text. Natürlich kann man die
Werte auch durch Variablen ersetzen und den Variablen dann Werte zu weisen, z.B. aus einem
Formular.
Manchmal möchte man ja nur Datensätze abfragen, in denen der Name mit A anfängt. Für unbekannte
Zeichen benutzt man in MySQL das: Prozentzeichen (%).
<?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'A%'";
?>
Man kann das Prozentzeichen immer benutzen, wenn man die genaue Zeichenfolge nicht kennt, also
wenn man alle Namen ausgeben möchte, die ein a haben: Die Abfrage sieht so aus:
<?php
$abfrage = "SELECT * FROM links WHERE name LIKE '%a%'";
?>
Man kann auch mehrere Kriterien setzen, man benutzt dazu AND, OR und XOR. Sie haben die gleiche
Funktion wie bei einer if-Anweisung.
Seite: 61
Was kann man mit PHP machen?
<?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'Nils'
AND id < '10'";
?>
Diese Abfrage würde alle Datensätze ausgeben die als name Nils haben und als id einen kleineren
Wert als 10.
ORDER BY
Möchte man die Ausgabe sortieren, z.B. so, dass der neuste Beitrag immer oben steht (dafür kann
man auch gut das id-Feld benutzen).
Man kann aber auch andere Felder (z.B. das URL-Feld) sortieren lassen, z.B. alphabetisch.
Hierfür benötige wir ORDER BY
<?php
$abfrage = "SELECT * FROM links ORDER BY id";
?>
Diese Abfrage würde die Einträge der id nach aufsteigend (1,2,3,4) ausgeben, wenn wir am Schluss
noch ein DESC schreiben, wird die Ausgabe der id nach absteigend (4,3,2,1) ausgegeben.
<?php
$abfrage = "SELECT * FROM links ORDER BY id DESC";
?>
Manchmal sieht man auch anstatt einem DESC ein ASC, dies hat die gleiche Wirkung, wie die Abfrage
von oben (1,2,3,4), aber dies wird von PHP als Standard eingesetzt, wenn es nicht angegeben wurde.
Wir können jetzt auch die anderen Felder sortiert ausgeben lassen
<?php
$abfrage = "SELECT * FROM links ORDER BY name";
?>
Dies würde die Ausgabe nach der Spalte name alphabetisch (a,b,c,d) ausgeben. Die Angabe von DESC
würde dies wieder umdrehen (d,c,b,a).
Möchten wir für die Sortierung mehrere Kritieren angeben, müssen wir diese durch Komma trennen.
<?php
$abfrage = "SELECT * FROM links ORDER BY name, id DESC";
?>
Diese Abfrage sortiert die Ausgabe erst nach dem name (a,b,c,d) und dann nach der id allerdings
falsch herum (4,3,2,1).
LIMIT
Möchte man nur eine gewisse Anzahl von Datensätzen ausgeben, setzt man den Befehl LIMIT ein.
<?php
$abfrage = "SELECT * FROM links LIMIT 3";
?>
Diese Abfrage würde nur 3 Datensätze ausgeben, denn mit LIMIT bestimmen wir, das nur eine gewisse
Anzahl von Datensätzen ausgeben wird.
<?php
$abfrage = "SELECT * FROM links LIMIT 10,5";
?>
Hiermit werden 5 Datensätze ab dem 10. abgefragt. Somit realisiert man z.B. später eine
Blätterfunktion.
Seite: 62
Was kann man mit PHP machen?
Natürlich kann man auch alle Funktionen verbinden:
<?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'Nils'
AND id < '20' ORDER BY url, id DESC LIMIT 10,5";
?>
Dies würde den Datensätze ausgeben, in denen als name Nils steht und die id kleiner ist als 20.
Die Abfrage wird dann bei url alphabetisch sortiert (a,b,c) und die id absteigend sortiert (3,2,1).
Anschließend werden nur 5 Datensätze vom 10. ab ausgegeben.
Die Ausgabe könnte so aussehen:
18 | www.ab.de
11 | www.ab.de
15 | www.ac.de
12 | www.ac.de
19 | www.ad.de
Davor entsprachen die Datensätze 1 bis 9 auch den Kriterien, wurden aber durch das LIMIT nicht
ausgegeben.
Aber Achtung, die Reihenfolge der einzelnen Attribute dürfen nicht willkürlich sein. Zuerst muss dort
SELECT * FROM tabelle stehen.
Als nächstes kommt WHERE mit den Kriterien. Danach kommt ORDER BY mit den genaueren
Bestimmungen zu Ausgabe. Zum Schluss kommt LIMIT.
Abfrage auf der ganzen Seite benutzen
Möchte man die Abfrage einer Tabelle auf der ganzen Seite benutzen (z.B. fürs Design), könnte man
die Seite in die While-Schleife schreiben, das wäre aber sehr umständlich. Es geht auch einfacher.
Wenn wir nur 1 Wert als Ausgabe haben, dann kann die while-Schleife auch entfallen.
<?php
$abfrage = "SELECT * FROM links WHERE id = '1'";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
echo "$row->url";
?>
Damit wir nur 1 Wert erhalten, können wir uns die Eigenschaft des id Feldes zu Nutzen machen, denn
es gibt nur ein Feld in der Tabelle, das den Wert 1 enthält. Dies haben wir durch den Primary
(Primärschlüssel) erreicht.
Man könnte auch LIMIT benutzen.
<?php
$abfrage = "SELECT * FROM links LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
echo "$row->url";
?>
Achtung: Sobald mehr als 1 Datensatz gefunden wurde, erhalten wir Fehler bei der Ausgabe.
Oft möchte man ja auch, das der PHP Script Daten hinzufügt.
Seite: 63
Was kann man mit PHP machen?
Daten speichern
Befehle ausführen
Nun werden die Daten gespeichert, die z.B. von einem Formular, übermittelt wurden. Im ersten Schritt
wird der Befehl in einer Variablen gespeichert. Der normale Befehl zum Schreiben von Daten in eine
Tabelle lautet:
<?php
$eintrag = "INSERT INTO Tabellenname
(Spaltenname1, Spaltenname2, Spaltenname3)
VALUES
('Wert1', 'Wert1', 'Wert3')";
?>
Dabei können beliebig viele Spalten angesprochen werden, ich habe einfach 3 als Beispiel benutzt.
Außerdem wurde der Text in der Variable $eintrag gespeichert.
Als nächstes kommt ein neuer Befehl ins Spiel: mysql_query();.
Er sendet den Befehl an die Datenbank, damit er dort ausgeführt wird. Als Argument (das in den
Klammern) hat er den Befehl. Es sieht dann also in etwa so aus:
<?php
$eintragen = mysql_query($eintrag);
?>
Für unser Beispiel mit der Linkliste könnte es so aussehen:
<?php
$eintrag = "INSERT INTO Tabellenname
(url, urlname, name, beschreibung)
VALUES
('http://www.php-einfach.de', 'PHP-Einfach.de',
'Andavos', 'Die PHP-Hilfe')";
$eintragen = mysql_query($eintrag);
?>
Natürlich könnt ihr auch anstatt fixer Werte Variablen benutzen, also so:
<?php
$eintrag = "INSERT INTO Tabellenname
(url, urlname, name, beschreibung)
VALUES
('$url', '$urlname', '$name', '$beschreibung')";
$eintragen = mysql_query($eintrag);
?>
Wurde der Eintrag jetzt gespeichert?
Das ist eine gute Frage. Wenn alles glatt ging, dann gibt mysql_query true zurück, sonst false. Man
könnte also eine if-Anweisung machen:
<?php
if($eintragen == true)
{
echo "Eintrag war erfolgreich";
}
else
{
echo "Fehler beim Speichern";
Seite: 64
Was kann man mit PHP machen?
}
?>
Dies ist bei jeder Funktion, die mysql_query ausführt der Fall, also auch wenn man Daten löscht, neue
einträgt, alte verändert etc.
Natürlich können wir auch per phpMyAdmin nachsehen, ob der Eintrag gespeichert wurde.
Dazu klicken wir auf unsere Datenbank homepage.
Im rechtem Fenster sieht man dann eine (HTML)-Tabelle mit den (MySQL)-Tabellen der Datenbank.
Dort sieht man dann auch unsere Tabelle: links
Rechts daneben steht dann: Browse (Anzeigen).
Klicken wir darauf, sehen wir die ersten 30 Einträge der Tabelle links.
Falls wir schon die Tabelle ausgewählt haben (im linkem Fenster angeklickt), findet man diesen Link
unterhalt der Tabellenstruktur.
Jetzt hat der PHP-Script Daten der Tabelle hinzugefügt, aber wie können wir jetzt wieder diese Daten
ändern?
Daten verändern
Manchmal ist es notwendig, bestimmte Zelleninhalte zu ändern, bzw. anzupassen. Dies immer per
phpMyAdmin zu machen, wäre zu umständlich. Aber zum Glück kann man sich dafür auch ganz einfach
ein PHP-Skript schreiben.
<?php
$aendern = "UPDATE Tabellenname Set
Spaltenname1 = 'Wert2'
WHERE Spaltenname2 = 'Wert2'";
$update = mysql_query($aendern);
?>
auf unser Beispiel bezogen:
<?php
$aendern = "UPDATE links Set
url='http://www.PHP-Einfach.de' WHERE id = '2'";
$update = mysql_query($aendern);
?>
Hierbei kann man für WHERE wieder alle möglichen Vergleiche setzen, so wie ihr es schon bei Weitere
Abfragen kennen gelernt habt. Es funktioneren auch die anderen Attribute wie LIMIT und ORDER BY.
Allerdings macht ORDER BY nur Sinn, wenn man auch LIMIT benutzt hat.
Wenn es denn mal nötig sein sollte, kann man auch direkt eine ganze Spalte auf einen Wert setzen,
dazu lässt man einfach den WHERE-Teil weg.
Es ist auch möglich, mehrere Spalten auf einmal zu ändern, dazu teil man die Spaltenname='Wert'Paare durch ein Komma.
<?php
$aendern = "UPDATE links Set
Seite: 65
Was kann man mit PHP machen?
url = 'http://www.php-einfach.de',
urlname = 'PHP-Einfach',
beschreibung = 'die PHP Hilfe' WHERE id = '2'";
$update = mysql_query($aendern);
Allerdings benutze ich dann mehrere Abfragen, denn so kann man besser kontrollieren, ob etwas nicht
funktioniert hat (z.B. durch einen Rechtschreibfehler). Man weiß dann, wo man suchen muss.
So mache ich es meistens:
<?php
$aendern = "UPDATE links Set
url = 'http://www.php-einfach.de' WHERE id = '2'";
$update = mysql_query($aendern);
$aendern = "UPDATE links Set urlname = 'PHP-Einfach'
WHERE id = '2'";
$update = mysql_query($aendern);
$aendern = "UPDATE links Set
beschreibung = 'die PHP Hilfe' WHERE id = '2'";
$update = mysql_query($aendern);
?>
Doch man kann die UPDATE-Funktion auch "missbrauchen". Wenn man eine einzelne Zelle löschen
möchte, kann man dessen Zelleninhalt einfach durch '' überschreiben.
<?php
$aendern = "UPDATE links Set urlname='' WHERE id='2'";
$update = mysql_query($aendern);
Evt. ist ja auch nötig, eine ganze Zeile zu löschen.
MySQL Einführung - Daten löschen
Es soll schonmal vorkommen, dass man bestimmte Daten aus einer Tabelle löschen möchte, sei es
aufgrund von Veraltung oder sonstigen Anlässen. Glücklicherweise ist das recht einfach.
Auch diesmal ändert sich nur der Befehl, den wir schreiben, Aufbau und Beenden der Verbindung
bleiben natürlich wieder gleich. Der Befehl zum Löschen lautet:
<?php
$loeschen = "DELETE FROM Tabellenname
WHERE Spaltenname= 'Wert'";
$loesch = mysql_query($loeschen);
?>
Als Spaltenname benutzt man (fast) immer das Feld id und als Wert natürlich eine Zahl (eine id). Denn
das Feld id hat einen eindeutigen Wert (Primärschlüssel), und somit löschen wir dann eine ganz
bestimmte Zeile/Datensatz aus der Tabelle.
Auf unser Beispiel bezogen sähe es so aus:
<?php
$loeschen = "DELETE FROM links WHERE id = '2'";
$loesch = mysql_query($loeschen);
?>
Hierbei kann man für WHERE wieder alle möglichen Vergleiche setzen, so wie ihr es schon bei Weitere
Abfragen kennen gelernt habt. Es funktioneren auch die anderen Befehle wie LIMIT und ORDER BY.
Allerdings macht ORDER BY nur sinn, wenn man auch LIMIT benutzt hat.
Falls man alle Daten löschen möchte, muss das Attribut WHERE entfallen, denn dann werden alle
Zeilen gelöscht.
Mit diesem Befehl können allerdings nur ganze Zeilen/Datensätze gelöscht werden.
Seite: 66
Was kann man mit PHP machen?
Hin und wieder möchte man ja wissen, wieviele Zeilen gefunden wurden. Lest dafür das Kapitel über
Anzahl der Zeilen.
Anzahl der Zeilen herraus finden
Manchmal stellt sich die Frage, wieviele Zeilen/Datensätze wurden denn gefunden? Denn dies wäre
nützlich bei Suchanfragen oder auch bei einer Blätterfunktion.
Zum Glück geht dies ganz einfach. Dazu lernen wir jetzt einen neuen MySQL Befehl kennen, und zwar
mysql_num_rows().
Der Script sieht so aus:
<?php
$abfrage = "SELECT id FROM links";
$ergebnis = mysql_query($abfrage);
$menge = mysql_num_rows($ergebnis);
echo $menge;
?>
Bei der Abfrage können wir wieder die gleichen Attribute wie bei Weitere Abfragen benutzen.
Auch können wir mit der Abfrage die Ergebnisse wieder ausgeben, dazu würden wieder das $row =
mysql_fetch_object($ergebnis) benutzen. Falls wir die Werte nicht ausgeben möchten, sondern nur die
gefundene Zeilenanzahl wissen wollen, sollten wir nur 1 Spalte abfragen, z.B. id, denn dies spart
Arbeitskapazität.
Allerdings ist diese Variante bei größeren Tabellen extrem langsam und speicherintensiv.
Denn wir fragen ja die komplette Tabelle ab, und in $ergebnis wird dann das Ergebnis gespeichert.
Wenn die Tabelle jetzt z.B. 1 Millionen Einträge hat, dann wären diese 1 Mio. Datensätze in $ergebnis
gespeichert. Dies würde desweiteren ca. 4 MB Speicherplatz benötigen, und für Scripts ist dieser sehr
begrentzt.
Darum gibt es in MySQL eine weitere Methode, wie man schneller und sparsamer die Anzahl der Zeilen
ermittelt. Allerdings können wir danach nicht das $ergebnis per Schleife ausgeben, dafür benötigen
wir eine erneute Anfrage an die Datenbank:
<?php
$abfrage = "SELECT COUNT(id) FROM links";
$ergebnis = mysql_query($abfrage);
$menge = mysql_fetch_row($ergebnis);
$menge = $menge[0];
echo $menge;
?>
Hier benutzen wir die SQL-Funktion: COUNT(id). Der Vorteil an der Funktion ist, dass die Anzahl der
Einträge direkt aus der Tabellen-Information ausgelesen wird.
Außerdem werden nur ca. 4 Byte Platz benötigt.
Diese Variante ist bei einer Tabelle mit 90 000 Einträgen ca. um den Faktor 2000 (200000%)
schneller.
Bei kleineren Tabellen ist der Unterschied nicht so gravierend.
So zum Schluss lernen wir noch, wie wir eine Verbindung beenden
Verbindung beenden
Nachdem das Script die Arbeit erledigt hat, sollte man die Verbindung zur Datenbank auch wieder
schließen. Dafür verwendet ihr den Befehl mysql_close:
Seite: 67
Was kann man mit PHP machen?
<?php
mysql_close($verbindung);
?>
Dies macht aber nur Sinn, wenn ihr mit mehreren verschiedenen Datenbanken (nicht Tabellen") in
einem Script arbeitet.
Wenn man nur mit einer Datenbank arbeitet, reicht es, wenn ihr die Verbindung nicht schließt.
Wann sollte ich die Verbindung beenden?
Die Verbindung wird zwar am Ende des Scripts automatisch wieder geschlossen, doch kann es ja
durchaus einmal vorkommen, dass das Script nicht bis zum Ende durchlaufen wird. Das würde
aufgrund der Beschaffenheit von SQL die Systemleistung beeinträchtigen.
Deswegen sollte man immer die Verbindung dann beenden, wenn man keine weiteren Abfragen macht,
z.B. wenn man nur in den ersten Zeilen des Scripts Abfragen macht. Allerdings lohnt es sich nicht,
wenn in der letzen / einer der letzen Zeilen die letze Abfrage ist. Dann kann man ruhig auf die
Schließung der Verbindung verzichten.
Damit wären auch schon die wichtigsten Funktionen von MySQL geklärt.
Die erweiterten Funktionen benutzt man eher, wenn man wenigstens fortgeschrittene Kenntnisse
besitzt.
Wenn ihr mehr erfahren wollt, schaut euch mal die MySQL-Referenz auf php.net an. Mit den bisherigen
Befehlen könnt ihr eigentlich alles programmieren, von einer Shoutbox, über Newsletterscripts bis hin
zu Webshops/Foren. Alle Scripts die ihr hier herunterladen könnt, benutzen nicht viel mehr Funktionen
als die gezeigten. Man muss nur wissen, wie man die Befehle richtig anwendet, und das lernt man nur
durch viel Übung.
Zum Anfang könnt ihr ja mal versuchen, folgendes zu programmieren:
-Linkliste
-Shoutbox
-Gästebuch
So jetzt kommt es immer wieder mal vor, dass eine Abfrage einfach nicht, funktioniert.
Darum ist das nächste Kapitel über Error-Handling
MySQL Fehler finden
Es kommt immer wieder vor, dass eine Abfrage einfach nicht funktioniert. Das Problem dann zu finden
ist gar nicht so leicht, aber nur, wenn man ein paar Tricks nicht kennt.
Oft bekommt man solch eine Fehlermeldung:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /test.php
on line 5
Wollen wir uns mal anschauen, wie die Fehlermeldung zustande gekommen ist:
<?php
//Verbindungsaufbau zur Datenbank
$abfrage = "SELECT name, password FROM tabelle";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)
Seite: 68
Was kann man mit PHP machen?
{
//Mache etwas
}
?>
Also irgendwie meckert PHP herrum, dass etwas mit mysql_fetch_object nicht in Ordnung ist.
Und zwar steht in der Fehlermeldung, dass das Argument (die Variable), keine gültige MySQL-Resource
ist. Aber was bedeutet das jetzt?
Und zwar gibt mysql_query(); sofern alles funktioniert hat, eine MySQL-Resource zurück, wenn nicht,
ein false.
Eine MySQL-Resource ist in etwa der Speicherort wo das Ergebnis hinterlegt ist.
Also bemängelt mysql_fetch_object(); das $ergebnis keine gültige Resource ist, also muss $ergebnis
false sein. Daraus folgern wir, dass irgendetwas nicht mit der Abfrage stimmt.
Um das herrauszufinden, gibt es die Funktion: mysql_error();. Diese Funktion gibt den letzten MySQL
Fehler aus, wir können den Script ja z.B. so anpassen:
<?php
//Verbindungsaufbau zur Datenbank
$abfrage = "SELECT name, password FROM tabelle";
$ergebnis = mysql_query($abfrage)
OR die("Error: $abfrage <br>".mysql_error());
while($row = mysql_fetch_object($ergebnis)
{
//Mache etwas
}
?>
Also dieses OR die() bewirkt, dass falls mysql_query() fehlerhaft ist, etwas ausgegeben wird.
Und zwar wird zuerst die Abfrage, und danach die Rückgabe von mysql_error() ausgegeben.
Das könnte z.B. so aussehen:
Error: SELECT name, password FROM tabelle
Unknown column 'password' in 'field list'
Naja diese Fehlermeldung ist ziehmlich eindeutig, und zwar ist das Feld password nicht vorhanden. Evt.
heißt es ja passwort oder pw?.
Eine weitere Fehlerquelle ist oft soetwas:
<?php
//Verbindungsaufbau zur Datenbank
$abfrage = "SELECT betreff, text, show
FROM news WHERE id = '1'";
$ergebnis = mysql_query($abfrage)
OR die("Error: $abfrage <br>".mysql_error());
//....
?>
Dies führt zu einem Fehler, und zwar:
Error: SELECT betreff, text, show FROM news WHERE id = '1' You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near
'FROM news WHERE id = '1'' at line 1
Auch wenn die 3 Spalten wirklich vorhanden sind, führt uns dies nicht weiter.
Denn show (oder SHOW) ist ein von MySQL reserviertes Wort/Befehl. Man kann diesen Namen so
nicht als Spaltennamen benutzen, genauso wie z.B. delete, update o.ä. hier versagen würde.
Entweder benutzt man also nicht reservierte Wörter, oder man muss den Spaltennamen show in
backticks setzen:
<?php
$abfrage = "SELECT betreff, text, `show`
FROM news WHERE id = '1'";
//...
?>
Seite: 69
Was kann man mit PHP machen?
Diese backticks (`) sind keine einfachen Anführungszeichen!
Mit diesen Umschließt man z.B. Spaltennamen, Tabellennamen und ähnliches.
Die Abfrage könnte dann auch so aussehen:
<?php
$abfrage = "SELECT `betreff`, `text`, `show`
FROM `news` WHERE `id` = '1'";
//...
?>
Eine Liste mit reservierten Wörter findet ihr im MySQL-Handbuch.
Fehler in INSERT, UPDATE u.ä
Mit mysql_query($abfrage) OR die(mysql_error()); lassen sich nicht nur Fehler in SELECT Befehlen
finden, sondern man kann mit ihnen auch Fehler in INSERT oder UPDATE Befehlen finden.
Wenn also ein Datenwert nicht eingetragen, aktualisiert oder verändert wird, sollte man als erstes
immer dieses OR die(...) ergänzen. Denn mysql_error() funktioniert mit jeder SQL Anweisung.
Falls Ihr Hilfe braucht, dann besucht bitte unser Forum
Ihr könnt auch ohne Anmeldung Fragen stellen.
Tutorials: PHP Übersicht
Gästebuch
Wie man mit PHP und Textdateien ein Gästebuch erstellt, erfährst du hier.
Logfiles
Mit PHP selbst Logfiles machen, wie das funktioniert, ist hier beschrieben.
Sitemap
PHP kann auch Automatisch eine Sitemap für deine Homepage erstellen.
Loginscript
Dies ist ein Einfacher Loginscript, wobei die Benutzernamen in einer Textdatei gespeichert sind.
Loginscript Sessions
Bei diesem Script werden noch Sessions zum Login verwendet, allerdings werden der Username im
Quelltext gespeichert.
Loginscript mit Sessions und Dateien
Hier werden die beiden vorherigen Loginscripts miteinandern kombiniert.
Links anklickbar
Dieser Script erkennt Links & E-Mail Adressen automatisch in einem Text und fügt automatisch den
entsprechenden HTML-Quellcode hinzu.
Counter
Ein einfacher Counter mit Reloadsperre per Sessions.
Dateiupload
Wie lädt man per PHP Datein auf den Webspace hoch? Hier erfährst du es.
Formular mailer
Seite: 70
Was kann man mit PHP machen?
Dieser Formularmailer erkennt automatisch alle Felder in einem Formular und sendet deren Inhalt an
eine eingetragende Mail Adresse.
Cookies
Wiederkehrfunktion mit Cookies.
Codeschnipsel
Codeschnipsel hinzufügen
Atom-Uhrzeit
Diese Funktion gibt die genau Atomzeit zurück.
Beispiel für Domaincheck (23 Endungen)
Dieses Script ermittelt, ob eine Domain bereits registriert ist.
Benchmarkklasse (v1.0.0)
Erweiterte Laufzeit- und Performancemessung.
Besucherzähler (MySQL) mit IP-Sperre
Ein Besucherzähler, der mit MySQL arbeitet und für eine einstellbare Zeit Anfragen gleicher IPAdressen nicht erneut zählt. Es werden weder Cookies noch Sessions verwendet.
Bild verkleinern (JPEG/PNG/GIF)
Allgemeine Funktion zum Verkleinern von Bildern.
Bildergalerie
Hier will ich euch nun zeigen wie man sich eine kleine Bildergallerie mit Vorschau erstellen kann.
Captcha mit dynamischen Fragen
Hallo ,
Chat
Ein kleiner Chat per PHP
Counter Funktion via PHP
Liebe/r Besucher, in diesem Tutorial erkläre ich euch wie ihr euch einen erweiterten Counter via PHP /
MySQL ganz einfach programmiert!
Datenbankbackup
Diese Script erstellen ein Backup von einer Datenbank bzw. Tabellen.
Datum nach Zeitzonen
Manchmal schreibt man ja auch Programme die eine Zeitangabe ausgeben. Beispiel ist hier ja direkt
ein Forum.
Design Patterns in PHP5
Hi,
dynamische Signatur
Seite: 71
Was kann man mit PHP machen?
Hallo Community,
Eigene Sessionverwaltung
PHP-Klasse für eine eigene Sessionverwaltung
Ein Gästebuch mit OOP
Oft besteht die Frage, wozu man OOP benutzen soll. Ich werde hier jetzt mal eine Antwort darauf
geben!
Ein PHP Formular mit Feldauswertung
Dieses Script überprüft ob alle Felder eines Formulars ausgefüllt wurden und hebt nicht ausgefüllte
hervor.
Einfacher Countdown
Selbsterklärend, mehr gibts bald, hier nur mal das Skript, dürfte selbst erklärend sein.
Einfaches Uploadscript
Hier ist ein einfaches upload Script mit dem ihr oder Besucher eurer Homepage Dateien auf den Server
hochladen könnt, sie werden dann automatisch in die angegebenen Ordner gespeichert.
Email bannen und überprüfen (V1.0.3)
Ich habe eine einfache Funktion geschrieben, womit ihr Emails aus euren Gästebüchern bannen könnt.
Email mit Anhang
Diese Funktion sendet eine Email mit einer Datei als Anhang.
Erweiterte Blätterfunktion
Manchmal ist es nicht ausreichend, wenn die Blätterfunktion alle Unterseiten anzeigt.
Erweiterte var_dump() Funktion
Diese Funktion liefert den Wert der Funktion var_dump(mixed $var). Die Ausgabe wird aber noch ein
wenig verschönert. So werden beispielsweise die unschönen Zeilenumbrüche nach der Typangabe der
Variable/des Array-Eintrages entfernt.
Fehler-Handling per E-Mail
Das hier baut man einfach in seine PHP-Fehlerseite ein. Den Fehlercode (404, 500...) kann man
einfach per GET übertragen:
File Transfering(FTP!)
Umgang mit der FTP Funktionalität von PHP.
Fortschrittsbalken mit <div>
Hallo, ich habe dieses Skript mal ausgebuddelt, etwas erweitert und wollte es jetzt zur Verfügung
stellen. Der Titel und die Kommentare sollten eigentlich alles sagen.
Gesammelte Codeschnipsel
Da wir oft auch fertige Funktionen in den Themen finden, mach ich dieses Thema mal auf. Hier können
wir wichtige Funktionen sammeln, die im Lauf eines Themas entstanden sind. Dafür dient folgende
Form:
Seite: 72
Was kann man mit PHP machen?
Gewichteter Zufall bei diskreten Werten
Mit der PHP-Funktion mt_rand() kann eine Zufallszahl innerhalb bestimmter Grenzen erzeugt werden.
Jede der Zahlen innerhalb dieser Grenzen tritt jedoch mit gleicher Wahrscheinlichkeit auf. Manchmal
wünscht man sich jedoch, dass bestimmte Werte häufiger vorkommen, als andere. Bspw. wenn
Banner, Bilder oder berühmte Zitate dem Benutzer zwar zufällig angezeigt werden sollen, bestimmte
aber häufiger als andere.
Größe einer Datenbank
Dieser Script gibt den Speicherbedarf von einer Datenbank aus.
Gästebuch mit Admin-Freigabe
Gästebücher gibt es duzende in Internet. Professionell, gratis und gut. Doch die meisten haben einen
riesigen Copyright-Vermerk, oder so komplizierte Quelltexte, dass es einem als Anfänger unmöglich ist
den Code zu ändern bzw. das Design zu personifizieren. Weiter werden bei den meisten Gästebücher
die Beiträge gleich veröffentlicht. Viele finden es besser, den Beitrag erst freizugeben. Ich habe mir
dieses Problem einmal angeschaut, und mit eine kleine Lösung mit MySQL überlegt.
Gästebuch mit BBcode Funktion
Du suchst ein Gästebuch mit einer BBcode Funktion? Dann ist genau dies hier das richtige! Also lies
weiter!
Herkunft des Besuchers (Stadt usw.)
Dieses Script liefert die Herkunft des Besuchers.
Herkunft einer IP-Adresse ermitteln. (IP to Country)
Zu beginn dieses Codeschnipsel wollen wir erstmal klären, wofür man diese Funktion gebrauchen kann.
Beispiel dafür wären Spam-Filter, internationale Online-Shops, Besucherstatistiken oder z.B.
Blockierung von Inhalten für bestimmte Herkuntsländer.
Include-Sperre
Falls ihr wollt, dass eine eurer Dateien entweder nur includet werden, oder nicht von allen Scripten
includet werden darf, helfen euch folgende Schnipsel:
IP sperre
Lästige Besucher per IP sperren.
IP-Prüffunktion (IPv4)
IP überprüfen (IPv4)
jpg Bilder beim Upload verkleinern
Dieses Script verkleinert jpg Bilder beim Upload
komplette SQL DB nach einem Ausdruck durchsuchen
Diese Funktion durchsucht eine beliebige SQL Datenbank komplett nach einem Suchwort.
Komprimierte Ausgabe
Diese Funktion sendet die HTML-Ausgabe komprimiert an den User.
Laufzeit
Hiermit kann man die Laufzeit eines Scripts ermitteln.
Seite: 73
Was kann man mit PHP machen?
Live - Counter
Ein Counter welcher euch die Anzahl der Besucher ausgibt, welche gerade eure Homepage besuchen.
Login Skript
Hey Leute,
md5, sha1, Crypt Generator
Ich habe das Script ein bissl umgeschrieben! Das einzige was ich nicht hinbekomme ist das der IHA
wert umgewandelt wird! ansonsten klappt alles ;) Der Generator sieht genau fast so gleich aus wie der
von PHP-Einfach.de! Für dieses Tutorial brauchst du noch nicht mal PHP kenntnisse, um dieses Tutorial
zu verstehen! Also sprich ein Tutorial für Dumme!
Mehrfachauswahl auswerten
Jeder kennt sie die Select boxen mit mehrfach Auswahl, doch wie Wertet man sie aus?
Mehrsprachig mittels PHP
Einige haben Probleme Webseiten Mehrspraching via PHP zu machen und lösen meist ihre Probleme
mit HTML! Doch hier eine Problemlösung die ich gefunden habe das man mittels PHP die eigene
Webseite Mehrspraching zu gestalten! PHP kenntnisse sollten vorhanden sein!
Mysql-klasse (PHP5)
Im Anhang ist sie noch mal als .zip-datei.
Newsletter via MySQL
Du möchtest ein Newsletter an deine Freunde schicken? Willst aber nur etwas einfaches und nichts
ausführliches haben? Dann habe ich genau das richtige für dich.
Nopaste
Moin Moin,
Personalausweis Überprüfung
Mit dieser Funktion kann man überprüfen, ob ein Personalausweis gültig ist, und die enthalten Daten
extrahieren.
Prüfen ob Variable leer ist
Oft hat man das Problem das man überprüfen möchte ob eine Variable leer ist. Zwar stellt PHP einem
die Funktion empty() zur Verfügung, allerdings hat diese eine Menge nachteile. Z.B. wenn man einen
String hat der nur aus Freizeichen und Tabulatoren (Einrückungen) besteht, wird diese Funktion
angeben das die Variable einen Wert hat. Oft ist genau das nicht erwünscht. Die nachfolgende Funktion
sollte garantiert funktionieren auch wenn euer String nur aus Leerzeichen besteht.
referer counter
hallo,
Regestrierung Klasse
hallo, das ist meine erste "Klasse"
Reguläre Ausdrücke(RegEx) Tutorial
Dieses Tutorial erklärt euch den Umgang mit preg_match
Seite: 74
Was kann man mit PHP machen?
Rundmail (Beispiel)
Hallo,
Sicherheitscode
Dieser Script stellt ein Bild mit einem Sicherheitscode dar.
Speicherplatz ausgeben
Ermittelt den freien Speicherplatz.
Subdomain Weiterleitung
Einfacher redirect fuer eine Subdomain, um doppelten Suchmaschineninhalt zu vermeiden.
Suchfunktion für Mitgliedersuche
Hier eine kleine Suchfunktion für Userlisten oder ähnlichem. Diese Funktion ist recht simpel aufgebaut
und jederzeit ohne Probleme erweiterbar.
Taschenrechner Klasse
Hallo.
Thumbnails
Ein Thumbnail ist die verkleinerte Version eines Bildes.
Upload Image
Hallo!
Valides PHP Gästebuch OHNE MySQL
Wie man mit PHP und Textdateien ein Valides Gästebuch erstellt, erfährst du hier.
Verwendung von UTF-8
Da hier im Forum bereits öfters die Frage nach UTF-8 kommt, werde ich versuchen euch einige
Grundlagen, was den Umgang mit UTF-8 angeht, bei zu bringen.
Übersetzung
Diese Funktion dient zur Übersetzung mittels Babelfish von einzelnen Texten.
Youtubevideo Eintragfunktion
Trägt Videos von Youtube in die eigene Datenbank ein
Zeitdifferenz
So berechnet man die vergangene Zeit zwischen zwei Timestamps.
Zufälliges Bild
Auf der Startseite möchte man oft ein zufälliges Bild anzeigen.
Zufälliges Passwort
Diese Funktion erstellt ein zufälliges Passwort beliebiger Länge.
[Code] {PHP&Javascript} Einfaches Fotoalbum
Ein kleines, aber feines Fotoalbum.
Seite: 75
Was kann man mit PHP machen?
Farbcode
Um in HTML Farben zu definieren, benutzt man i.d.R. einen Farbcode. Der Farbcode beginnt mit einer
Raute (#). Danach kommen 6 Zahlen und/oder Buchstaben.
Klicken Sie hier einfach auf eine Farbe, und schon erscheint der Farbcode im Eingabefenster.
Farbcode:
#7000C0
Farbe wählen:
Geben Sie hier eine Farbe ein und drücken Sie dann auf "Farbe erkennen".
#7000C0
Farbe Erkennen
Passwortsicherheit
Wie lange dauert es, bis man ein Passwort mit einer bestimmten länge knacken kann? Hier kannst du
es ausrechnen lassen.
Allerdings sind die Zeitangaben nur für die Länge des Passwortes bestimmt, wenn du dort z.B. 8
Stellen eingibst, wird es nur für ein Passwort von 8 Stellen berechnet. Allerdings wissen Angreifer
meistens nicht, wie lang das Passwort ist. Daraum fangen die bei Passwörter mit einer Stelle und nicht
gleich mit der achten Stelle. Darum muss man die Zeit dazu rechen, bei der das Programm bei der 8.
Stelle ist.
Leider PHP probleme mit extrem großen Zahlen (ab 300 Stellen) zu rechnen, wenn manchmal
minimale Zeit-Ergebnise bei Riesen Zahlen erscheinen, wundert euch nicht.
Mögliche Zeichenanzahl*:
62
Passwortlänge:
6
Passworteingaben pro Sekunde **:
25000000
Berechnen
* Wie viele verschiedene Zeichen für den Angriff genutzt werden
** Neue PC's schaffen zwischen 10 Mio. und 25 Mio. Passworteingaben pro Sekunde, spezielle CrackComputer schaffen mehr als 100 Mrd. Passwörter pro Sekunde (Preis ca: 25 000 Euro).
Seite: 76
Was kann man mit PHP machen?
Seite: 77
Herunterladen