Einfaches Gästebuch basierend auf php4 und MySQL
In diesem Tutorial lernt Ihr wie einfach es ist, ein Gästebuch mit php4 und MySQL zustellen.
2002-08-22 17:35:41 2002-08-22 17:35:41 webmaster1@
Was brauche ich ?
Naja, als erstesmal brauche ich php und MySQL, ich gehe mal davon aus dass jeder weiss was das ist, falls nicht dann schaut zuerstmal hier www.php.net , www.mysql.com und www.vogelgesang-berlin.de/server/apache vorbei und kehrt dann zu diesem Tutorial zurück. Wenn jetzt alles eingerichtet ist müssen wir uns Gedanken machen was alles von Besucher eingeben werden soll und was alles in die Datenbank kommt. Ich beschränke mich hier so ziemlich auf das absolute Minimum, wir brauchen eine Tabelle in der Datenbank die folgende Felder beinhaltet :
Feldname | Typ | Default | NULL ? | extras |
Id | Int(11) | Not Null | Auto_inc , primär Schlüssel | |
Name | Varchar(50) | 0 | No | |
Varchar(50) | 0 | No | ||
Titel | Varchar(100) | 0 | No | |
Beitrag | Text | No | ||
Datum | Datetime | Yes |
So, was bedeutet das im einzelnen ?
id ist einfach die Nummer des Eintrags
in der Tabelle, die ID, diese ist eifach dazu da damit etwas Ordnung in die DB
reinkommt, Puristen können sie weglassen.
Name ist der Name des Users der einen Beitrag
erstellen will, 50 Zeichen sollten reichen für einen Namen, deshalb varchar(50)
als Typ.
Email, die eMail Adresse zum
Namen
Titel, eine Überschrift zum
Beitrag, sieht schön aus, kann aber weg gelassen werden.
Beitrag, der Beitrag an sich. Ist ein Textfeld,
das sollte von der Dimension her reichen.
Datum, ist ein datetime Feld in dem das Datum
gespeichert wird wann der Beitrag erstellt wurde.
Die Scripte
Nachdem wir uns einen Plan gemacht haben kommen wir zu den Scripten. Zuerst ist es einmal immer sinnvoll sich eine 'var.inc.php' an zu legen in der alle Variablen gespeichert werden die man immerwieder braucht, diese Datei included man dann einfach und die Basisvariablen stehen einem zur Verfüng. Man sollte bei der Namensgebung darauf achten das man erkennt um was für eine Datei es sich handelt. Ich benenne solchen include-Dateien immer mit der Endung .inc.php, dies hat den Vorteil das die Datei nicht auselesen werden kann, was nämlcih der Fall wäre wenn man sie nur mit .inc benennt. Denn .php Dateien werden immer ausgeführt und unser Script besteht dann aus einer leeren Seite. Damit hat man die Möglichkeit auch sensible Daten darin unter zu bringen, was man bei .inc nicht machen könnte. In diesem kleinen Projekt ist das noch nicht wirklich wichtig, aber wenn man grössere Sachen schreibt dann wird man es zu schätzen wissen wenn man immer nur eine Variable ändern muss anstatt ein komplettes Script zu durchforsten. Also unser erstes Script sieht so aus : ?
var.inc.php
<?php
// Datenbank Variablen
$dbserver = "localhost";
$dbname = "testgb";
$dbuser = "";
$dbpass = "";
// Sonstige Variablen
$beitraege = 5;
?>
So, was steht drin ?
Also, die ersten 4 Variablen die mit $db beginnen sind die Verbindungsvariablen zur MySQL Datenbank, sie müssen entsprechend editiert werden, je nachdem wo das GB laufen soll. Bei den sonstigen Variablen brauchen wir momentan nur eine Variable und zwar $beitraege, sie gibt an wieviele Beiträge pro Seite angezeigt werden soll. Mehr brauchen wir nicht an Variablen.
So jetzt brauchen wir ein Script dass uns die Datenbank erzeugt :
install.php
<?php
include('var.inc.php');
$conn = @mysql_connect($dbserver,$dbuser,$dbpass);
if (!$conn)
{ die("Sorry, keine Verbindung zur Datenbank"); }
$result = @mysql_create_db($dbname,$conn);
if (!$result)
{ die("Sorry, Datenbank konnte nicht angelegt werden!"); }
mysql_select_db($dbname,$conn);
$query = "CREATE TABLE `gb` (`id` INT (11) UNSIGNED DEFAULT '0' NOT NULL AUTO_INCREMENT, ".
"`name` VARCHAR (50) DEFAULT '0' NOT NULL, `email` VARCHAR (50) DEFAULT '0' NOT NULL, ".
"`titel` VARCHAR (100) DEFAULT '0' NOT NULL, `beitrag` TEXT NOT NULL, `datum` DATETIME,".
" PRIMARY KEY(`id`))";
$result = mysql_query($query,$conn);
if (!$result)
{ die ("Sorry, die Tabelle konnte nicht angelegt werden."); }
echo "Es wurde alles angelegt.";
mysql_close($conn);
?>
Dieses Script erzeugt die Datenbank samt Tabelle. Dieses Script brauchen sie nur einmal, dann sollten sie es wieder löschen vom Server damit es niemand anders missbraucht, denn böse Menschen sind überall. Es kann zwar schlimmstenfalls nur die DB gelöscht werden aber das muss ja auchnicht sein. Jetzt das Script im einzelnen :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//DE"> <html> <head> <title>Install</title> </head> <body>
dieser Teil sollte ja klar sein, ist einfaches HTML
include('var.inc.php');
Hier werden per include die Variablen geladen bzw. das gesammte var.inc.php Script wird in das install.php Script reingeladen als wäre es ein Teil davon.
<?php
$conn =@mysql_connect($dbserver,$dbuser,$dbpass);
if (!$conn){ die("Sorry, keine Verbindung zur Datenbank"); }
?>
Hier wird die Verbindung zum Datenbankserver aufgebaut, ist sie nicht erfolgreich kommt ein die(). Dies hört sich böse an aber trifft es ganz gut, denn das Script ?stirbt' weil ohne Datenbank halt nix geht. Man sollte immer mit dem die Befehl arbeiten wenn man sicherstellen will das ein Script nimmer weiterlaufen soll falls es zu einem Fehler kommt.
<?php
$result = @mysql_create_db($dbname,$conn);
if (!$result){ die("Sorry, Datenbank konnte nicht angelegt werden!"); }
?>
So, nachdem der Kontakt da ist Erstellen wir einmal die Datenbank. Auch hier wieder der 'die' Abbruch wenn es funktioniert, warum auch immer.
<?php
mysql_select_db($dbname,$conn);
?>
Dieser Befehl teilt dem Server mit welche Datenbank es sein soll, dies ist wichtig wenn mehrere Datenbanken vom Server verwaltet werden oder man mehrere Verschiedene Verbindungen aufrecht erhält zu verschiedenen Datenbanken.
<?php
$query = "CREATE TABLE `gb` (`id` INT (11) UNSIGNED DEFAULT '0' NOT NULL AUTO_INCREMENT, ".
"`name` VARCHAR (50) DEFAULT '0' NOT NULL, `email` VARCHAR (50) DEFAULT '0' NOT NULL, ".
"`titel` VARCHAR (100) DEFAULT '0' NOT NULL, `beitrag` TEXT NOT NULL, `datum` DATETIME,".
" PRIMARY KEY(`id`))";
?>
Dieser SQL-QUERY erzeugt die Tabelle die wir in Abschnitt 1 besprochen haben, mehr dazu bei www.mysql.com???
<?php
$result = mysql_query($query,$conn);
if (!$result){ die ("Sorry, die Tabelle konnte nicht angelegt werden."); }
?>
s.o. , es wird geschaut ob $result flase ist, ist dies der Fall hat das erzeugen der Tabelle nicht hingehauen und man bekommt dies angezeigt.
<?php
echo "Es wurde alles angelegt.";
mysql_close($conn);
?>
Ansonsten kommt die Erfolgsmeldung und die Verbindung zur DB wird abgebrochen. Es ist nicht al zu schlimm wenn man den mysql_close Befehl weglässt, denn wenn das Script beendet ist wird die Verbindung eh abgebaut, allerdings kann es ja sein dass das Script noch einige Zeit läuft aber die Verbindung garnichtmehr gebraucht wird, da ist es durchaus sehr sinnvoll die Verbindung zu trennen, denn Datenbank Server sind oft ziemlich gestresst und da macht sich sowas gut für die Performance.
So das war das Installscript. Ist garkeine Hexerei gewesen, oder ? Naja und nun hexen wir ein wenig weiter und kommen zum Arbeitstier.
<?php
include('var.inc.php');
if (!isset($aktion))
{
$aktion = "show";
}
if (!isset($seite))
{
$seite = 1;
}
if ($aktion == "show")
{
echo"<html>".
"<head>".
"<title>Joel's GästeBuch v0.0.1</title>".
"</head>".
"<body>";
$conn = mysql_connect($dbserver,$dbuser,$dbpass);
mysql_select_db($dbname,$conn);
$anfang = ($seite-1)*$beitraege+1;
$ende = $anfang+$beitraege-1;
$query = "SELECT * FROM gb ORDER BY datum DESC";
$result = mysql_query($query,$conn);
$gesamt = mysql_num_rows($result);
if ($gesamt == 0)
{
echo "Keine Beiträge vorhanden !";
}
$counter = 1;
if ($ende > $gesamt) { $ende = $gesamt; }
echo"<table cellspacing="2" cellpadding="2" border="1" align="center">";
while ($zeileholen = mysql_fetch_array($result,MYSQL_ASSOC))
{
if (($counter >= $anfang) AND ($counter <= $ende))
{
echo"<tr width="25%">".
"<td>geschrieben von :<br>".stripslashes($zeileholen["name"])."<br>eMail :".stripslashes($zeileholen["email"])."</td>".
"<td colspan="2" width="75%">Titel : ".stripslashes($zeileholen["titel"])."</td>".
"</tr>".
"<tr>".
"<td>am ".$zeileholen["datum"]."</td>".
"<td colspan="2">".stripslashes(nl2br(htmlentities($zeileholen["beitrag"])))."</td>".
"</tr>";
}
$counter++;
}
echo "<tr><td>";
if ($seite == 1)
{
echo" ";
}
else
{
echo"<a href="gb.php?aktion=show&seite=".($seite-1)."">zurück</a>";
}
echo"</td><td><a href="gb.php?aktion=edit">neuer Beitrag</a></td><td>";
if ($ende >= $gesamt)
{
echo" ";
}
else
{
echo"<a href="gb.php?aktion=show&seite=".($seite+1)."">weiter</a>";
}
echo "</td></tr>";
echo"</table>";
}
if ($aktion == "edit")
{
echo"<html>".
"<head>".
"<title>Joel's GästeBuch v0.0.1</title>".
"</head>".
"<body>";
echo"Neuer Beitrag schreiben :";
echo"<form action="gb.php?aktion=insert" method="post">".
"<table cellspacing="2" cellpadding="2" border="0">".
"<tr>".
"<td>Name : </td>".
"<td><input type="text" name="name" size="30" maxlength="50"></td>".
"</tr>".
"<tr>".
"<td>eMail : </td>".
"<td><input type="text" name="email" size="30" maxlength="50"></td>".
"</tr>".
"<tr>".
"<td>Titel :</td>".
"<td><input type="text" name="titel" size="30" maxlength="100"></td>".
"</tr>".
"<tr>".
"<td>Beitrag :</td>".
"<td><textarea cols="70" rows="20" name="beitrag"></textarea></td>".
"</tr>".
"<tr>".
"<td><input type="submit" name="sub" value="Eintragen"></td>".
"<td><input type="reset" name="res" value="Reset"></td>".
"</tr>".
"</table>".
"</form>";
}
if ($aktion == "insert")
{
$conn = mysql_connect($dbserver,$dbuser,$dbpass);
mysql_select_db($dbname,$conn);
$datum = date("Y-m-d H:i:s",time());
$query = "INSERT INTO gb VALUES ('', '".addslashes($name)."', '".addslashes($email)."', '".addslashes($titel)."', '".addslashes($beitrag)."' ,'".$datum."')";
$result = mysql_query($query,$conn);
if (!$result)
{
die ("Sorry, Datenbankeintrag hat nicht funktioniert");
}
mysql_close($conn);
header("Location:gb.php");
}
?>
So, diese 120 Zeilen sind das einfache Gästebuch, noch ohne Adminfunktionen aber die braucht man ja nicht wirklich, das kann man auch einfach per phpMyAdmin oder so erledigen. Natürlich ist auch das Design noch sehr schwach, aber es geht ja hier um das ?php-Herz' des ganzen und nicht um den ?HTML-Körper' .
Das Script ist in 3 einzelne Abschnitte zu untergliedern, einmal die Aktion show die das GB anzeigt, dann die Aktion edit ,dass ist das Eingabeformular und dann noch die Aktion insert, die das Eingabeformular in die Datenbank schreibt und wieder show aufruft. Das ist alles, fangen wir mal vorne an :
<?php
include('var.inc.php');
if (!isset($aktion))
{
$aktion = "show";
}
if (!isset($seite)
{
$seite = 1;
}
?>
Dieser Abschnitt läd wieder die Variablen ein mit include und prüft dann ob die Variablen $aktion bzw. $seite gesetzt sind. Diese Abfrage macht immer dann Sinn wenn man Variablen übergibt die irgendetwas steuern, damit vermeidet man Fehler die bei falschen URL Übergaben entstehen können. Zum Beispiel kann man das Script einfach mit gb.php aufrufen und landet trotzdem in der show Funktion. Die Variable $seite gibt an auf welcher Seite nach sich befindet, dies sollte an Anfang die 1 sein.
<?php
if ($aktion == "show")
?>
Kommen wir zur Aktion show
<?php
{
echo"<html>".
"<head>".
"<title>Joel's GästeBuchv0.0.1</title>".
"</head>".
"<body>";
?>
Zuersteinmal wird ein HTML Kopf ausgegeben
<?php
$conn = mysql_connect($dbserver,$dbuser,$dbpass);
mysql_select_db($dbname,$conn);
?>
Wieder wird eine Verbindung zur Datenbank hergestellt.
<?php
$anfang =($seite-1)*$beitraege+1;
$ende = $anfang+$beitraege-1;
?>
Jetzt kommt die Variable $beitraege ins Spiel, $anfang gibt an, an welcher Stelle der Tabelle die Ausgabe der Daten beginnen soll. $ende gibt das Ende der Ausgabe an.
Hierzu zwei Rechenbeispiele :
$seite = 1 und $beitraege = 5, dann ist $anfang = 1 und $ende = 5 bei $seite = 2 ist $anfang = (2-1)*5+1 = 6 und $ende = 6+5-1 = 10. Genau so wollen wir es haben
<?php
$query = "SELECT * FROM gb ORDER BY datum DESC";
$result = mysql_query($query,$conn);
?>
So, hier wird jetzt der SQL-Query erzeugt der alle Datensätze aus der Datenbank ausliest. ORDER BY datum DESC gedeutet dass er nach Datum sortiert und zwar absteigend, wir wollen ja dass die neusten Beiträge am Anfang stehen.
<?php
$gesamt = mysql_num_rows($result);
?>
Es wird die Anzahl der Datensätze ausgelesen und in $gesamt gespeichert.
<?php
if ($gesamt == 0)
{
echo "Keine Beiträge vorhanden !";
}
?>
Naja, wenn keine Beiträge da sind, sind halt keine da, da kann man nix machen.
<?php
$counter = 1;
?>
Ansonsten wird ein Zähler gesetzt der mitzählt welcher Datensatz gerade gelesen wird.
<?php
if
($ende > $gesamt) { $ende = $gesamt; }
?>
Hier wird geprüft ob $ende grösser als $gesamt ist, dies kann bzw. darf nicht sein, denn wenn keine Beiträge mehr da sind kann man auch keine mehr ausgeben, also wird im Fall des Falles $ende auf $gesamt gesetzt.
<?php
echo"<table cellspacing="2" cellpadding="2" border= "1"align="center">";
?>
Der Tabellen Kopf, muss ich ja nicht weiter kommentieren, ist HTML
<?php
while ($zeileholen =mysql_fetch_array($result,MYSQL_ASSOC))
{
?>
Hier beginnt die Schleife die die Datensätze aus der Datenbank einliest, hier wird ein nettes Feature der Funktion mysql_fetch_array angewendet, die Funktion schreibt im Erfolgsfall die Daten in das assoziative Array $zeileholen, ist aber kein Datensatz mehr vorhanden dann wird ein FALSE zurückgegeben und die while-Schleife bricht ab.
<?php
if (($counter >= $anfang) AND ($counter <= $ende))
{
?>
Hier wird überprüft ob der aktuell eingelesene Datensatz innerhalb von $anfang und $ende liegt, ist dies der Fall wird er ausgegeben, ansonsten wird die Ausgabe übersprungen. Hierzu eine Anmerkung, man kann auch in der $query Anweisung mit dem MySQL Befehl LIMIT arbeiten und nur auslesen was auch gebraucht wird, allerdings ist dies nicht sehr kompatibel zu anderen Datenbanksystemen da LIMIT eine MySQL Spezialität ist, ausserdem kann man dann nicht erkennen ob das Ende erreicht ist. Es gibt eigentlich folgende Regel : ?Alles was man direkt mit SQL lösen soll, sollte man auch damit lösen, da es schneller ist.'. Aber es gibt auch Sachen wo man entscheiden muss was sinnvoller ist. Ich kann besser php als SQL also mach ich lieber in php denn da fühle ich mich besser.
<?php
echo"<trwidth="25%"><td>geschriebenvon :<br>".stripslashes($zeileholen["name"])."<br>eMail:".stripslashes($zeileholen["email"])."</td>".
"<td colspan= "2"width= "75%">Titel :".stripslashes($zeileholen["titel"])."</td>".
"</tr>".
"<tr><td>am".$zeileholen["datum"]."</td>".
"<tdcolspan="2">".stripslashes(nl2br(htmlentities($zeileholen["beitrag"])))."</td>".
"</tr>";
}
?>
Schreibt alles in die HTML Tabelle rein. Der Befehl stripslashes entfernt die Backslashes die ich in die einzelnen Felder mit einfüge durch addslashes wie wir weiter unten sehen werden. Dies hat den Sinn dass Sonderzeichen für die Datenbank nicht zum Killer werden können. Das kann relativ leicht passieren aber addslashes und stripslashes bieten dagegen einen guten Schutz. Besonders hervor zu heben ist vielleicht noch : stripslashes(nl2br(htmlentities($zeileholen["beitrag"]))) Der Befehl nl2br wandelt Zeilenumbrüche in <br> Zeichen um und htmlentities verhindert das HTML Code ausgeführt wird. Dies kann nämlich zu so manchen Schabernack genutzt werden, der nicht immer nett sein muss.
class="STDFont8" $counter++;}
Jetzt erhöhen wir noch den $counter und springen zum Beginn der while Schleife.
<?php
class="STDFont8" echo"<tr><td>";
if ($seite == 1)
{
echo" ";
}
else
{
echo"<ahref="gb.php?aktion=show&seite=".($seite-1)."">zurück</a>";
}
?>
So, jetzt muss man ja Blättern können, dies wird hier in die Tabelle reingeschrieben, wenn $seite > 1 ist dann kann man zurückblättern , ansonsten eben nicht. Ist andersrum implementiert denn es ist so rum leichter zu erklären aber andersrum schneller zu Programmieren ;) Nicht alles was für Menschen gut verständlich ist muss für Computer auch gut sein.
<?php
echo"</td><td><ahref="gb.php?aktion=edit">neuerBeitrag</a></td><td>";
?>
Dann noch ein Button wenn man einen neuen Beitrag erstellen will. Wir sehen als Aktion edit, was als nächstes erklärt wird.
<?php
if ($ende >= $gesamt)
{
echo" ";
}
else
{
echo"<ahref="gb.php?aktion=show&seite=".($seite+1)."">weiter</a>";
}
?>
s.o. , genau wie beim zurück Button nur wird hier das Vorblättern überprüft, dabei wird geschaut ob $ende == $gesamt ist, ist dies so gibt es keine weiteren Seiten und der link wird weggelassen.
<?php
echo"</td></tr>";
echo"</table>";
}
?>
Jetzt noch die HTML Tabelle zugemacht und das war's. Der grösste Teil ist schon geschafft.
Kommen wir zur nächsten Aktion die aufgerufen werden kann. Es ist die Aktion edit, sie beinhaltet das Eingabeformular.
<?php
if ($aktion =="edit")
{
?>
Wenn $aktion == edit dann gehe hier in diese Abfrage rein.
<?php
echo"<html>".
"<head>".
"<title>Joel's GästeBuchv0.0.1</title>".
"</head>".
"<body>";
echo"Neuer Beitrag schreiben :";
?>
Wieder das Kopfteil, sie werden sich fragen warum sich dies wiederholt, dazu weiter unten mehr, es hat mit dem header Befehl zu tun.
<?php
echo"<formaction="gb.php?aktion= insert"method="post">"
?>
Der Formularkopf, wieder wird gb.php aufgerufen wenn das Formular abgesendet wird diesesmal aber mit der Aktion insert, diese schreibt die Daten dann in die Datenbank.
<?php
"></td>".
"</tr>".
"<tr>"."<td>Beitrag:</td>".
"<td><textarea cols= "70"rows="20"name="beitrag"></textarea></td>".
"</tr>".
"<tr>".
"<td><input type="submit" name="sub"value="Eintragen"></td>".
"<td><input type="reset" name="res"value="Reset"></td>".
"</tr>".
"</table>".
"</form>";
}
?>
Dieser ganze Teil sollte eigentlich keinem Probleme bereiten, es sind einfach die Eingabefelder und die Textarea für den Beitrag mit den entsprechenden maximal Längen. Muss ich ja nicht weiter kommentieren, ist ja nur HTML Code, zwar in ein php echo Befehl eingefangen, dies dient aber nur der Übersicht, es gibt hier auch wieder zwei Programmierstile. Ich persönlich bevorzuge es alles in php zu coden, sprich ich komme mit einem <?php Tag am anfang des Scriptes aus und mit einem ?> an Ende, meist ist nur der <HEAD> Teil ausserhalb der php Tags und dann wieder das Ende der Datei. Ich finde das hebt die Übersicht. Ist zwar etwas difizilier wenn man ? Zeichen im Code drin hat, aber immerhin weiss ich dafür immer das ich php Code verwenden muss. Der andere Stil ist immer wieder zu wechsel, hier zB. Das ganze Formular als HTML Abschnitt aus den php Tags raus zu nehmen und wieder nach den </form> Tag wieder einen neuen <?php Tag ein zu bauen. Damit spart man sich zwar einige Sachen aber man muss auch immer Aufpassen ob gerade php oder HTML angesagt ist. Vor allem kann man das sehr exzessiv machen mit mehrfach wechseln in einer Programmzeile, dies ist aber wirklich kein schöner Code und man sollte daran denken dass das nach ein paar Tagen nichtmehr gut lesbar ist.
Dies war jetzt schon der Eingebeteil, jetzt kommt noch der Teil der alles in die DB schreibt und dann ist das GB schon fertig, also auf ans Werk :
<?php
if ($aktion == "insert")
{
?>
Aktion insert, wird ja in der Aktion edit im Formularkopf verwendet.
<?php
$conn = mysql_connect($dbserver,$dbuser,$dbpass);
mysql_select_db($dbname,$conn);
?>
Sollte klar sein, wieder connect zur DB herstellen.
<?php
$datum = date("Y-m-d H:i:s",time());
?>
Das Datum wird erzeugt und in das MySQL Format gebracht.
<?php
$query = "INSERT INTO gb VALUES ('', '".addslashes($name)."', '".addslashes($email)."', '".addslashes($titel)."', '".addslashes($beitrag)."' ,'".$datum."')";
?>
Hier sehen wir wie alles was Übertragen wurde in die DB eingetragen wird, wie schon besprochen verhindern die addslashes dass Fehler durch Sonderzeichen entstehen.
<?php
$result = mysql_query($query,$conn);
if (!$result)
{
die ("Sorry, Datenbankeintrag hat nicht funktioniert");
}
?>
Der Query wird abgesendet und es wird geschaut ob er durchgegangen ist.
<?php
mysql_close($conn);
?>
Die Verbindung wird abgebaut. Die Daten sind angekommen.
<?php
header("Location:gb.php");
?>
Der ebenfalls erwähnte header Befehl, er erzeugt einen HTML Header, das schöne an diesem Befehl ist dass sich so eine einfache Weiterleitung bewerkstelliggen lässt, hier wird einfach gb.php wieder aufgerufen und damit die Aktion show, wie wir ganz zu Beginn gelernt haben. Es gibt allerdings einen Pferdefuss an header, es darf vorher keinerlei HTML Ausgabe erzeugt werden, dies ist auch der Grund warum in den beiden anderen Funktionen jeweils der <HTML><HEAD> Teil mit eingebaut war.
<?php
}
?>
?>
Klappe zu, Affe tot" . Das wars, das Gästebuch ist komplett.
</body> </html>
Ratings
Here you can write a comment
Related topics
Login mit Hilfe von PHP und mySQL
Dieses Tutorial soll die Grundzüge eines Login-Systems auf der Basis von PHP und mySQL unter Zuhilfenahme von Sessions klären. ...
Autor :
razorblade
Category:
PHP-Tutorials
Gewichtete SQL-Abfragen
Gewichtete Abfragen werde häufig im Banner-Umfeld benötigt. Also überall da, wo Banner nach bestimmten Kriterien einblendet werden sollen. Wenn man davon ausgeht, das Banner unterschiedlichen Klick-Erfolg haben, dann liegt der Gedanke nahe, genau diese Ba ...
Autor :
admin
Category:
mySQL-Tutorials
Objektorientiertes Programmieren
Dieses Tutorial beschreibt sehr gut die Wirkunsweise von objektorientiertes Programmieren. Also bestens geeignet um das objektorientierte Programmieren zu verstehen. ...
Autor :
phpsven
Category:
PHP-Tutorials
Midjourney Tutorial - Instructions for beginners
There is an informative video about Midjourney, the tool for creating digital images using artificial intelligence, entitled "Midjourney tutorial in German - instructions for beginners" ...
Autor :
Mike94
Category:
KI Tutorials
Variablen über mehrere Seiten hinweg verwenden - der Session-Befehl macht 's möglich!
Oberste Voraussetzung um Session-Befehle korrekt auszuführen ist, dass der Provider a) PHP und b) das speichern von Sessions auf dem Server überhaupt erlaubt. Wird der Session-Befehl unterstützt jedoch nicht das direkte speichern von Sessions bzw. Sess ...
Autor :
ndo@
Category:
PHP-Tutorials
Umfragenscript
Dieses Tutorial zeigt wie man mit eine Umfragescript mit einen TXT-Datenbank erstellen kann. ...
Autor :
kiliandreissig@
Category:
PHP-Tutorials