| Um zwischen Fällen zu unterscheiden (Passwort
richtig?) wird wie folgt vorgegangen: |
...
if ($erstes_beispiel == "3") {
echo "Fritz";
}
else if ($erstes_beispiel == "8") {
echo "Egon";
}
else {
echo "heute niemand da";
}
... |
Erklärung: mit "if" (engl.:wenn)
wird abgefragt ob die Variable "$erstes_beispiel" auf 3 gesetzt
ist. Ist sie es, wird "fritz" ausgegeben. Ist sie es nicht (else
- engl.: sonst) wird, falls sie auf "8" gesetzt ist, Egon ausgegeben,
wenn die Variable einen anderen Wert hat oder gar nicht gesetzt
ist, wird "heute niemand da" ausgegeben.
| Angaben:
|
== wenn die Werte gleich sein sollen.
!= wenn die Werte unterschiedlich sein sollen.
<= wenn ein Wert größer oder gleich wie ein
anderer sein soll.
> wenn ein Wert größer als ein anderer sein
soll.
<= wenn ein Wert kleiner oder gleich wie ein
anderer sein soll.
< wenn ein Wert kleiner als ein anderer sein
soll.
|| wenn verschiedene Abfragen durch "oder" kominiert
werden sollen
( if ($xyz == "1" || $xyz == "2")...).
&& wenn verschiedene Abfragen durch "und"
kominiert werden sollen
( if ($xyz > "1" && $xyz
< "2")...). |
|
| bei vielen Unterscheidungen: |
...
switch ($erstes_beispiel) {
case "3":
echo "Fritz!";
break;
case "8":
echo "Egon!";
break;
default:
echo "heute niemand da";
}
... |
|
Erklärung: da lange if-else-Abfragen eventuell
mit sehr viel Tipparbeit verbunden sein können, gibt
es auch noch die switch-Afrage. Bei ihr wird am Anfang eine
Variable notiert und darunter die verschiedenen case-Abfragen
(case engl.: Fall) notiert. Trifft eine zu, wird per "echo"
z.B. Fritz ausgegeben und mit "break;" aus der switch-Abfrage
ausgestiegen. Trifft sie nicht zu, wird "heute niemand da"
ausgegeben.
|
| INFO: |
Bei switch-Abfragen kann etwas nur zutreffen oder
nicht zutreffen (Entsprechend "==" bei "if-else").
Eine genauere Differenzierung ist daher nicht möglich. |
|
Um etwas innerhalb eines Scriptes bis zu einem genau
definierten Punkt zu wiederholen, benutzt man sogenannte Schleifen.
Eine Anwendungsmöglichkeit wäre z.B. den Inhalt einer
Variable exakt 29 mal auszugeben. Theoretisch könnte man
natürlich auch 29 mal die echo-Funktion eingeben, es wäre
jedoch mit sehr viel Tipparbeit verbunden.
1.Möglichkeit: |
...
$beispiel_variable = "PHP ist toll!";
$i = 0;
while ($i < 30) {
echo "$beispiel_variable<br>";
$i++;
}
... |
|
Erklärung: Zuerst wird eine
Variable mit "PHP ist toll" gesetzt. Anschließend wird
der Anfangswert der Schleife, in unserem Fall 0 ($i = 0),
gesetzt. Schließlich wird mit "while" die eigentliche
Schleife eingeleitet und die Abbruchbedingung definiert ($i
< 30). Nun muss nur noch definiert werden, was getan werden
soll (z.B. echo "$...";) und ob herauf oder herunter gezählt
werden soll ($i++).
|
| Angaben:
|
++ wenn heraufgezählt
werden soll.
-- wenn heruntergezählt werden soll. |
| INFO:
|
Die Abbruchbedingung ($i < 30) muss immer eins
höher bzw. niedriger gewählt werden als nachher ausgegeben
werden soll (in unserem Fall 29 mal + 1 = 30 daraus folgt: i
< 30 ). |
...
$beispiel_variable = "PHP ist toll!";
for ($i = 0; $i < 30; $i++) {
echo "$beispiel_variable<br>";
}
... |
| Erklärung: Zuerst wird eine Variable
mit "PHP ist toll" gesetzt. Anschließend werden die verschiedenen
Werte nach folgendem Schema impliziert: for (Anfangswert;
Abbruchbedingung, Erhöhung/Erniedrigung) |
| Angaben:
|
++ wenn heraufgezählt
werden soll.
-- wenn heruntergezählt werden soll. |
INFO -
while oder for??? |
Das einzige wohl einzige Entscheidungkriterium
für for- bzw. while-Schleifen ist wohl die Länge und
Kompaktheit. for braucht für alle Bedingungen lediglich
eine Zeile - alle Bedingungen stehen dabei in einer Klammer. |
|
Funktionen in Programmiersprachen und speziell in
PHP sind zunächst Zusammenfassungen von Befehlen, also
kleine "Unterprogramme". Sie können z.B. von einer "if-else"-Unterscheidung
aufgerufen werden.
1.Möglichkeit: |
...
$guthaben = "39.39";
$kosten_pro_SMS = "0.39";
if ($guthaben >= $kosten_pro_SMS) {
rechnung();
}
else {
echo "lad Deine Karte mal wieder auf!";
}
function rechnung() {
$guthaben = "39.39";
$kosten_pro_SMS = "0.39";
$versendbare_SMS = $guthaben / $kosten_pro_SMS;
echo "Du kannst noch $versendbare_SMS verschicken!";
}
... |
|
Erklärung: Diese Beispiel zeigt wieviel
SMS ich theoretisch mit einem betimmten Betrag auf meinem
Handy noch versenden könnte. Zuerst wird festgelegt,
wieviel Guthaben noch vorhanden ist ( 39,39 € ) und wieviel
der Versand einer SMS kostet. Anschließend wird überprüft,
ob das vorhandene Guthaben noch für das Versenden einer
SMS reicht. Ist es im Plus, wird die Funktion gestartet und
die noch versendbaren SMS errechnet ( Guthaben durch Kosten
pro SMS ).
|
...
$guthaben = "39.39";
if ($guthaben > "0") {
rechnung(0.39);
}
else {
echo "lad Deine Karte mal wieder auf!";
}
function rechnung($kosten_pro_SMS) {
$guthaben = "39.39";
$versendbare_SMS = $guthaben / $kosten_pro_SMS;
echo "Du kannst noch $versendbare_SMS verschicken!";
}
... |
| Erklärung: Das Beispiel ist
im Prinzip gleich wie das obere. Dieses mal wird der Preis
der SMS aber "variabel". So können in der if-else-Abfrage
z.B. die Preise der verschiedenen Anbieter verglichen werden.
Da die Variable "$kosten_pro_SMS" aber gleich ist, liefert
der Script aber das gleiche Ergebniss, wie das obere Beispiel.
Zuerst wird festgelegt, wieviel Guthaben noch vorhanden ist
( 39,39 € ). Anschließend wird überprüft,
ob das Guthaben im positiven oder negativen Bereich ist. Ist
es im Plus, wird die Funktion gestartet und der Preis pro
SMS in Klammern mitgeliefert und anschließend die noch
versendbaren SMS errechnet ( Guthaben durch Kosten pro SMS
).
Dies ist natürlich ein hinkendes Beispiel. In Wirklichkeit
müsste nämlich noch aufgerundet werden, halbe SMS
gibt es ja schließlich noch nicht - zur Veranschaulichung
von Funktionen dürfte es aber genügen.
|
| INFO:
|
Kommazahlen wie in den obigen Beispielen
in Variablen als Punkt schreiben. PHP kann sie sonst nicht berechnen!
Funktionen müssen immer in geschweifte Klammern eingefasst
sein! |
|
| Um sogenannte Strings (Variable mit beliebigen Zeichen)
zu bearbeiten, gibt es in PHP spezielle Funktionen: |
...
$erster_string = " hallo";
$bearbeiteter_string = chop($erster_string);
$zweiter_string = "hallo\nWelt!";
$bearbeiteter_string2 = nl2br($zweiter_string);
... |
| Erklärung: mit dem Befehl chop()
wird in der Variable "$bearbeiteter_string" alle Leerzeichen
von "$erster_string" gelöscht. In der Variable "$bearbeiteter_string2"
werden einfach alle "\n" durch den HTML-Tag "<br />" ersetzt. |
| Angaben:
|
isset() um abzufragen, ob eine
Variable existiert (...if isset($beispiel)...)
chop() entfernt führende Leerzeichen des Strings.
ltrim() entfernt Leerraum am Stringanfang. Als Leerraum
gilt z.Bsp. "\n" und das Leerzeichen.
trim() entfernt Leerraum am Stringende. Als Leerraum
gilt z.Bsp. "\n" und das Leerzeichen.
nl2br() wandelt "\n"-Zeilenumbrüche in "<br>"
um.
strip_tags() entfernt allen HTML- und PHP-Code.
strlen() ermittelt die Länge einer Zeichenkette.
strtolower() wandelt alle Zeichen einer Zeichenkette
in Kleinbuchstaben um.
strtoupper() wandelt alle Zeichen einer Zeichenkette
in Großbuchstaben um.
str_replace($zu_suchendes_wort, $beliebiger_Text, $zu_ersetzendes_wort)
ersetzt den Inhalt eines Strings in einem zuvor definierten
String mit einem anderen.
ucfirst() wandelt das erste Zeichen einer Zeichenkette
in einen Großbuchstaben um.
ucwords() wandelt das erste Zeichen jedes Wortes einer
Zeichenkette in einen Großbuchstaben um. |
|
| |
8b)
Datums-, Kalender- und Zeitangaben mit Strings |
nach oben |
|
|
| Auch für Zeitangaben gibt es viele spezielle
Funktionen, die derartige Angaben sehr erleichtern: |
...
$zeit_in_minuten = date("i");
... |
|
Erklärung: Der Wert der Variable
"$zeit_in_minuten" wir mit der String-Funktion für Minuten
belegt. Ist es z.B. 15:31, trägt die Variable den Wert
"31".
|
| Angaben:
|
date("a") "am" oder "pm"
date("A") "AM" oder "PM"
date("d") Tag imMonat, zwei Ziffern mit führender Null ("01" bis "31")
date("D") Tag der Woche mit drei englischenBuchstaben ("Fri")
date("F") Ausgeschriebener Monat in Englisch ("January")
date("h") Stunde im 12-Stunden-Format ("01" bis "12")
date("H") Stunde im 24-Stunden-Format ("00" bis "23")
date("g") Stunde im 12-Stunden-Format ohne führende Null ("1" bis"12")
date("G") Stunde im 24-Stunden-Format ohne führende Null ("00" bis "23")
date("i") Minuten ("00" bis "59")
date("j") Tag des Monats ohne führende Null("1"bis "31")
date("l") [kleines "L"] Ausgeschriebener englischer Tag der Woche ("Friday")
date("L") Boolescher Wert für das Schaltjahr ("0" oder "1")
date("m") Monat ("01" bis "12")
date("n") Monat ohne führende Null ("1" bis "12")
date("M") Monatmit drei englischen Buchstaben ("Jan")
date("s") Sekunden ("00" bis "59")
date("S") Anhang der englischen Aufzählung, 2 Buchstaben, ("th" für 5/fifth oder "nd" für 2/second)
date("t") Anzahl der Tage des Monats ("28" bis "31")
date("U") Sekunden seit Beginn der UNIX-Zeitrechnung
am 1.1.1970 um0.00 Uhr
date("w") Tag der Woche als Zahl, ("0" für Sonntag bis
"6" für Samstag)
date("Y") Jahr vierstellig ("2001")
date("y") Jahr zweistellig ("01")
date("z") Tag im Jahr ("0" bis "365")
date("Z") Offset der Zeitzonen gegen GTM in Minuten ("-43 200" bis "43 200")
time() Gibt den aktuellen Timestamp aus (Sekunden seit
Beginn der UNIX-Zeitrechnung am 1.1.1970 um 0.00 Uhr) |
|
| Auch für Dateiverarbeitung, also das Bearbeiten
und ggf Implementieren einer Datei ist in PHP möglich.
Die einfachste Art der Dateiverarbeitung ist wohl: |
...
include("beispiel.txt");
require("beispiel.txt");
... |
| Erklärung: Bei diesen Varianten
wird einfach die angegebene Datei so angesehen, als ob sie an
dieser Stelle in der Datei stehen würde. Es können
natürlich auch Dateien mit anderen Endungen wie .html mit
diesen Befehlen eingefügt werden. |
| INFO:
|
require kann nicht in Schleifen angewendet
werden! Ansonsten ist zwischen den Varianten kein großer
Unterschied. |
Es gibt aber natürlich auch eine kompliziertere
Art der Dateiverarbeitung, die das Öffnen, Speichern, Anlegen
und Bearbeiten von Dateien ermöglicht:
a) Öffnen und Ausgeben einer Datei: |
...
$beliebige_datei = fopen ("http://www.domain.de/hallo.txt",
"r");
while (!feof($beliebige_datei)) {
$zeile = fgets($beliebige_datei, 400);
echo $zeile;
}
fclose($beliebige_datei);
... |
|
Erklärung: mit der Dateifunktion "fopen"
(file open engl.: Datei öffnen) wird die Datei "hallo.txt"
mit der Option "r" (read engl.: lesen) in die Variable "$beliebige_datei"
geladen. Anschließend wird mit der "!feof()"-Funktion
überprüft, ob man am Ende der Datei angelangt ist
und per der while-Schleife zeilenweise mit der Funktion "fgets()"
ausgelesen. Die Zahl "400" steht dabei für die Länge
pro Zeile in Bytes, die ausgelesen werden sollen, so fern
nicht vorher das Ende der Zeile erreicht ist. Mit "fclose()"
wird die geöffnete Datei wieder geschlossen.
|
b) Öffnen einer Datei und Schreiben in eine Datei: |
...
$datei = fopen ("hallo.txt", "w");
$text = "blaaaa";
fwrite($datei, "$text");
fclose($datei);
... |
|
Erklärung: mit der Dateifunktion "fopen"
(file open engl.: Datei öffnen) wird die Datei "hallo.txt"
mit der Option "w" (schreiben) in die Variable "$datei" geladen.
Anschließend wird noch sie wmit dem in der Variable
"$text" festgelegten Text belegt und wieder in die
Datei geschrieben. Mit "fclose()" wird die geöffnete
Datei wieder geschlossen.
|
| Angaben:
|
"r" öffnet die Datei nur zum Lesen, begonnen wird am
Dateianfang.
"r+" öffnet die Datei am Dateianfang zum Lesen und Schreiben.
"w" öffnet die Datei am Dateianfang zum Schreiben, löscht
sie, falls bereits vorhanden. Wenn die Datei nicht existiert
wird versucht, sie anzulegen.
"w+" öffnet die Datei am Dateianfang zum Lesen und Schreiben,
löscht sie, falls sie bereits vorhanden. Wenn die Datei nicht
existiert, wird versucht sie anzulegen.
"a" öffnet die Datei am Dateiende nur zum Schreiben.
Wenn die Datei nicht existiert, wird versucht sie anzulegen.
"a+" öffnet die Datei am Dateiende zum Lesen und Schreiben.
Wenn die Datei nicht existiert, wird versucht sie anzulegen.
|
| INFO:
|
Nach dem Lesen durch "fopen()" können
auch die in Kapitel 8a) bearbeiteten String-Funktionen angewendet
werden. |
|
Datenbanken bestehen zunächst aus 1 oder mehreren
Tabellen und können z.Bsp., ähnlich einem Adressbuch
sogenannte Datensätze beinhalten. Diese Datensätze
können dann wiederum die Telefonnummern und die dazugehörigen
Namen, Wohnorte o.ä. beinhalten.
Einer dieser abgefragten Datensätze würde demnach
also einer Zeile in z.B. folgender HTML-Tabelle entsprechen:
|
| |
| Name |
Ort |
Email |
| Hans |
Hanshausen |
hans@hans.de |
| Fritz |
Fritzhausen |
fritz@fritz.de |
| Egon |
Egonhausen |
egon@egon.de |
|
|
| |
...
$adresse_datenbankserver = "db.domain.de";
$ftp_benutzername = "xxxxxx";
$passwort = "xyxyxyx";
$name_datenbank = "dbxxxxxx";
$name_tabelle = "tabelle_eins";
... |
|
Erklärung: Um überhaupt mit der Datenbank
arbeiten zu können, müssen erst diese allgemeinen
Zugangs-Variablen bestimmt werden - sie machen es uns bei
den nachher folgenden Vorgängen einfacher. Diese Daten
kannst Du von Deinem Provider bekommen - oft stehen Angaben
dazu in der FAQ (Frequently Asked Questions) oder im Konfigurationsmenü
Deines Providers.
|
| a) Verbindung zum MySQL-Server: |
...
MYSQL_CONNECT("$adresse_datenbankserver","$ftp_benutzername","$passwort");
MYSQL_SELECT_DB("$name_datenbank");
... |
|
Erklärung: Um auf die Datenbank zugreifen
zu können, muss zuerst eine Verbindung hergestellt werden.
Dies geschieht mit der Funktion "MYSQL_CONNECT()". Steht die
Verbindung, wird unsere vorher festgelegte Datenbank festgelegt
("MYSQL_SELECT_DB()").
|
b) Anlegen einer Tabelle auf dem MySQL-Server: |
...
MYSQL_QUERY("CREATE TABLE $name_tabelle (Name varchar(10), Ort
varchar(30), Email varchar(30))");
... |
|
Erklärung: Nachdem nun eine Verbindung
zum MySQL-Server besteht, können wir eine Tabelle erzeugen.
Es geschieht mit dem Befehl MYSQL_QUERY("CREATE TABLE...").
In unserem Fall werden dadurch die schon in der oben angezeigten
Tabelle Spalten (drei) erzeugt. Mit der Option "varchar(Zahl)"
wird die nachher verwendete Zeichenlänge der einzelnen
Zellen angegeben.
|
c) Bearbeiten der MySQL-Datensätze: |
...
MYSQL_QUERY("INSERT INTO $name_tabelle (Name, Ort, E-Mail-Adresse)
VALUES ('Friedolin', 'Friedolinhausen', 'friedolin@friedolin.de')");
... |
|
Erklärung: Hiermit wird ein vierter Datensatz
hinzugefügt, der nun einen anderen Namen, Ort und eine
andere E-Mail-Adresse aufweist. Die Angabe "...(Name,...)..."
bezieht sich immer auf die Spalte, in der mit "...VALUES
('Friedolin',...)..." nachher etwas eingefügt werden
soll. Die Reihenfolge der beiden in den Klammern angegebenen
Werte muss daher immer genau miteinander übereinstimmen.
Soll nur in einer Spalte etwas eingefügt werden, so können
Sie selbstverständlich auch nur einen Wert in BEIDE Klammern
eingeben.
|
...
MYSQL_QUERY("UPDATE $name_tabelle SET Name='Friedolin' WHERE
Name like 'Fritz'");
... |
|
Erklärung: Durch den Befehl "UPDATE" wird
ein bestimmter Datensatz verändert. In unserem Fall wird
der Eintrag der Spalte Name an der Stelle, an der davor Fritz
(WHERE Name like 'Fritz') stand, durch Friedolin ersetzt.
|
...
$anfrage = MYSQL_QUERY("SELECT Name FROM $name_tabelle" ORDER
BY Ort ASC);
... |
|
Erklärung: Hiermit werden alle Namen, in
unserem Fall Hans, Fritz und Egon, in einem Array abgespeichert
und nach den Ortsnamen in aufsteigender Reihenfolge sortiert
- Zur Ausgabe des Arrays weiter unten.
|
...
$anfrage = MYSQL_QUERY("SELECT Name FROM $name_tabelle WHERE
Ort like 'Fritzhausen' LIMIT 0, 10");
... |
|
Erklärung: Hiermit werden alle Namen aufgerufen,
bei der der in der Spalte Ort "Fritzhausen" steht,
in unserem Fall genau einer. Gibt es jedoch mehrere mögliche
Ergebnisse, kann die Abfrage durch "LIMIT 0, 10" noch auf
maximal 10 beschränkt werden. Der Wert wird in einem
Array abgespeichert - Zur Ausgabe des Arrays weiter unten.
|
| Angaben: |
"FROM" um eine bestimmten Tabelle anzusprechen.
"WHERE" um eine bestimmte Zeile innerhalb einer Tabelle
anzusprechen. Dabei können die Platzhalter "%" (beliebig
lang) und "_" (ein Zeichen lang) benutzt werden.
"ORDER BY Spaltenname ASC oder DESC" um
bestimmte Angaben innerhalb einer Anfrage in aufsteigender (ASC)
oder absteigender (DESC) Reihenfolge nach einem Spaltennamen
zu sortieren.
"SELECT" um einen bestimmten Datensatz auszuwählen und somit auszulesen.
"LIMIT Anfangswert, Zeilenzahl" um einen SELECT-Abfrage
zu spezifizieren.
"DELETE" um einen bestimmten Datensatz zu löschen.
"INSERT" um einen bestimmten Datensatz einzufügen.
"UPDATE" um einen bestimmten Datensatz zu aktualisieren.
|
| d) Ausgabe der in einem Array abgespeicherten
Daten: |
...
while ($zeile = mysql_fetch_array($anfrage))
{
echo "$zeile[Name]";
}
... |
|
Erklärung: Da die Daten der Anfragen in
einem Array abgelegt werden, müssen sie in einer Schleife
ausgegeben werden. Anschließend können die Ergebnisse
durch den Spaltennamen (z.Bsp. "$zeile[Name]") ausgegeben
werden.
|
| e) evtl Löschen der Tabelle: |
...
MYSQL_QUERY( "DROP TABLE $name_tabelle");
... |
|
Erklärung: Da wir jetzt wissen, wie wir
Tabellen erstellen, ist es auch wichtig zu wissen, wie wir
sie wieder löschen. Dies geschieht durch den Befehl "DROP
TABLE", gefolgt vom vorher festgelegten Tabellennamen.
|
| f) Beenden der Verbindung zum MySQL-Server: |
|
Erklärung: Um die Verbindung zur Datenank
zu beenden, ist es sinnvoll, die vorher gestartete Verbindung
durch die "mysql_close()"-Funktion zu kappen. Allerdings ist
es nicht zwingend erforderlich, da sie spätestens nach
Beenden des PHP-Scripts sowieso geschlossen wird.
|
|
| Cookies sind kleine Text-Dateien, die auf der Festplatte
des Benutzers (wenn dieser die Funktion Cookies aktiviert hat)
abgelegt werden und nach einer definierten Zeit wieder gelöscht
werden. Sie speichern Informationen über Benutzer ab und
dienen dazu, gesammelte Benutzer-Informationen zu erhalten und
zuzuordnen - die Wiedererkennung eines Benutzers ist zur Zeit
nämlich noch nicht anders als über Cookies möglich. |
...
setcookie("testcookie", "Text", time()+(3600*24*7));
... |
|
Erklärung: Um ein Cookie zu erstellen,
bedienen wir uns der "setcookie()"-Funktion. Diese
speichert als erstes den eigenen Namen ab (in unserem Fall
"testcokie"). Als Zweites kann jede beliebige Text-Information,
z.Bsp. aus Variablen, diese darf jedoch 2048 Bytes nicht über
schreiten. Zu guter Letzt wird, der Zeitpunkt angegeben, an
dem es automatisch gelöscht wird, sofern es nicht schon
vorher entfernt wurde. Er wir dabei in Sekunden seit dem 01.01.1970
angegeben, am einfachsten ist dies also wenn wir die in 8b)
kennengelernte "time()"-Funktion benutzen, die schon
die Sekunden bis zum aktuellen Zeitpunkt ausgibt - wir brauchen
dann bloß noch die Zeitspanne vom Erstellungs- bis zum
Löschzeitpunkt (in Sekunden) dazu addieren. Um es uns
einfacher zu machen, hilft es uns, wenn wir es ein bisschen
auseinandernehmen und anschließend multiplizieren. Für
eine Woche müssten man also die Sekunden einer Stunde
(3600), die Stunden des Tages (24) und die Tage der Woche
(7) miteinander multiplizieren (3600*24*7).
|
| b) Abrufen der im Cookie abgespeicherten Infos |
...
echo "$testcookie";
... |
|
Erklärung: Um die vorher erstellten Informationen
wieder abrufen zu können, müssen wir nur dem zuvor
zugewiesenen Namen ein "$" voranstellen, um so den
Inhalt als String zur Verfügung zu haben.
|
...
setcookie("testcookie", "");
... |
|
Erklärung: Um ein Cookie manuell (ohne
Rücksicht auf das beim Erstellen festgelegte Löschdatum)
wieder zu löschen, müssen wir nur wieder vorher
benannten Cookienamen in die in a) kennengelernte "setcookie()"-Funktion
ohne weitere Parameter einsetzen.
|
|
|