Ich bin gerade dabei ein kleines Gästebuch mit PHP und MySQL zu programmieren.
Bisher habe ich ein Gästebuch, in das man sich Eintragen kann. Jetzt fehlen mir noch ein paar Kenntnisse, um spezielle Features einzubauen.
Die Datenbank-Tabelle sieht so aus:
id -> Jeder Eintrag hat eine ID, die automatisch ansteigt
name -> Der Name des Eintragers
email -> Die E-Mail-Adresse des Eintragers
eintrag -> Der Eintrag selber
Ich stelle die Verbindung mit zur Datenbank mit einer Function her:
function db_connect() { include 'variables.php'; # Host, Benutzer, Passwort mysql_connect($dbhost, $dbuser, $dbpass) or die ("Keine Verbindung zum Server möglich!"); # Datenbankname mysql_select_db($dbname) or die ("Die Datenbank existiert nicht!"); }
Diese Funktion ist in einer externen Datei "functions.php". Die Daten (Passwort, Datenbankname,...) sind in einer externen Datei "variables.php" gespeichert.
Ich rufe in der "gb.php" (einzige Hauptdatei) die Function auf und dann folgt der gesamte Code für das Gästebuch.
Es kommt ein Formular zum Eintragen, die Ausgabe und das Einfügen in die Tabelle.
Der Code der "gb.php" sieht folgendermaßen aus:
<? include 'functions.php'; db_connect(); $action = $_GET["action"]; $seite = $_GET["seite"]; // Die Startseite ist automatisch die erste Seite if(!isset($seite)) { $seite = 1; } // Wieviele Einträge pro Seite angezeigt werden sollen $eintraege_pro_seite = 15; $start = $seite * $eintraege_pro_seite - $eintraege_pro_seite; // Das aktuelle Datum und die aktuelle Uhrzeit werden ermittelt $timestamp = time(); $datum = date("d.m.Y",$timestamp); $uhrzeit = date("H:i",$timestamp); // Die Tabelle der Datenbank wird selektiert // Die Einträge werden nach der ID geordnet (neueste zuerst) $dbabfrage = "SELECT * FROM gaestebuch ORDER BY id DESC LIMIT $start,$eintraege_pro_seite"; $dbergebnis = mysql_query($dbabfrage); // Die Variablen werden aus dem Formular übernommen $name = $_POST["name"]; $email = $_POST["email"]; $eintrag = $_POST["eintrag"]; // Der Header vom Gästebuch echo '<title>Gästebuch</title><center><font size="6"><b>Gästebuch</b></font><br><br> <a href="?">Gästebuch-Startseite</a><br> <a href="?action=eintragen">Eintragen ins Gästebuch</a><br><br>'; #*********************************** #* ANFANG - abschicken #*********************************** if($action == "abschicken") { // Fehlermeldungen if($name == '' or $eintrag == '') { $fehler = 1; echo '<b>Fehler!</b> <br><br>';} if($name == '') { $fehler = 1; echo 'Sie haben keinen Namen eingegeben. <br>'; } if($eintrag == '') { $fehler = 1; echo 'Sie haben keinen Eintrag eingegeben. <br>'; } if($fehler == 1) { echo '<br>Bitte gehen Sie zurück und korrigieren Sie Ihre Eingaben!<br><br> <form action="javascript:history.back()"><input type="submit" value="Zurück"></form>'; } // Wenn keine Fehler vorhanden sind, wird der Eintrag in die Datenbank gespeichert if($fehler != 1) { $dbeintrag = "INSERT INTO gaestebuch (name, email, eintrag, datum) VALUES ('$name', '$email', '$eintrag', '$datum | $uhrzeit')"; $gb_eintrag = mysql_query($dbeintrag); echo '<br>Erfolgreich eingetragen!<br><br>Vielen Dank für Ihren Eintrag.<br><br> <form action="?"><input type="submit" value="Zurück zum Gästebuch"></form>'; } if($dbeintrag == true) { echo "Eintrag war erfolgreich!"; } else { echo "Fehler beim Eintragen!"; } } #*********************************** #* ENDE - abschicken #*********************************** #*********************************** #* ANFANG - eintragen #*********************************** elseif($action == "eintragen") { echo ' <form action="?action=abschicken" method="post"> Name:<br><input size="20" name="name"><br> E-Mail:<br><input size="20" name="email"><br> Eintrag:<br><textarea cols="40" rows="10" name="eintrag"></textarea> <br><br> <input type="submit" value="Abschicken"> <input type="reset" value="Zurücksetzen"> </form> <br><br> <a href="?">Zurück zum Gästebuch</a> '; } #*********************************** #* ENDE - eintragen #*********************************** #*********************************** #* ANFANG - Gästebuch Startseite #*********************************** else { // Es werden alle Einträge aus der Datenbank gelesen und in eine Variable gespeichert while($dbinhalt = mysql_fetch_object($dbergebnis)) { echo ' <table width="60%" align="center" cellpadding="2" cellspacing="1" style="border:1px solid #000000; background-color:F0F0F0;"> <tr> <td width="20%" align="left">('.$dbinhalt->id.') <b>'.$dbinhalt->name.'</b></td> <td width="20%" align="center"><a href="mailto:'.$dbinhalt->email.'">'.$dbinhalt->email.'</a></td> <td width="20%" align="right"><small>'.$dbinhalt->datum.'</small></td> </tr> </table> <br> <table width="60%" align="center" cellspacing="1" style="border:0px solid #000000;"> <tr> <td width="100%" align="center">'.nl2br($dbinhalt->eintrag).'</td> </table> <br><br> '; } } #*********************************** #* ENDE - Gästebuch Startseite #*********************************** #*********************************** #* ANFANG - Blätterfunktion #*********************************** // Die Einstellungen für die Blätterfunktion $seiten_auswahl = mysql_query("SELECT id FROM gaestebuch"); $seiten_menge = mysql_num_rows($seiten_auswahl); $seiten_anzahl = $seiten_menge / $eintraege_pro_seite; echo '<br><br><hr noshade color="#000000" size="1" width="60%">', 'Es befinden sich <b>'.$seiten_menge.'</b> Einträge im Gästebuch <br><br>', '<b>Seite:</b>'; // Die Anzahl der Seiten werden mit dieser Schleife ermittelt for($a=0; $a < $seiten_anzahl; $a++) { $b = $a + 1; // Für die ausgewählte Seite wird kein Link angezeigt if($seite == $b) { echo ' <b>'.$b.'</b> '; } // Alle nicht ausgewählten Seiten werden mit einem Link dazu angezeigt else { echo ' <a href="?seite='.$b.'">'.$b.'</a> '; } } #*********************************** #* ENDE - Blätterfunktion #*********************************** ?>
WICHTIG: Es ist noch ganz am Anfang und es können Fehler vorhanden sein, also bitte (falls ihr was findet), schreibt es mir. Natürlich ist noch nichts am Aussehen getan werden, das folgt auch noch.
So nun meine Fragen:
1.) Ich will nun noch, dass bei jedem Beitrag die richtige Uhrzeit steht, wann der Beitrag eingetragen worden ist. Muss ich da noch etwas in meine Datenbank-Tabelle hinzufügen oder geht das mit PHP? Wichtig dabei ist natürlich, dass immer die Uhrzeit, wann der Beitrag eingetragen worden ist, angezeigt werden soll und nicht die aktuelle.
2.) Ich will nun noch einen "Admin-Bereich" einbauen. Quasi eine Unterseite, die mit einem Passwort geschützt ist. Meine erste Frage dazu ist, wie ich am besten diese Unterseite mit einem Passwort schütze? Ich habe mir es so vorgestellt, dass man sich mit einem "Formular" einloggen muss und das Passwort dann in einer Externen Datei (oder DB) gespeichert wird. Wie mache ich das am Besten? So und dann wollte ich noch fragen, wie das mit dem Löschen geht. Mit "DELETE FROM gaestebuch WHERE id = 1" lösche ich dein Eintrag mit der ID 1. Aber ich will die Einträge auch (wie auf der Startseite) auflisten und anwählen können (via Input type="checkbox") und dann nur den angewählten löschen. Wie kann ich das erreichen?
3.) So wie es bisher ist, werden ALLE Einträge auf der Seite "gb.php" aufgelistet. Ich will nun aber, dass immer nur 20 Einträge pro Seite angezeigt werden. Wie das mit dem SQL-PHP-Code funktioniert, ist mir bekannt. Aber ich will dann nicht manuell programmieren, wie viele Seiten es gibt und dann immer nur 20 angezeigt werden. Kann ich es auch machen, dass auf der ersten Seite 20 angezeigt werden und falls mehr, dann soll unten Seite 2 mit einem Link angezeigt werden und falls dann auf Seite 2 mehr als 20 sind soll Seite drei erscheinen und immer so weiter... Wie würde das funktionieren?
4.) Ich will überprüfen, ob der Eintrager in den letzten 10 Minuten schon einmal eingetragen hat. Also quasi eine IP-Sperre. Wie das ungefähr mit Textdateien geht weiß ich, aber ist es auch möglich, die IP in die DB zu speichern (für jeden Eintrag) und dann "falls ip = schon einmal eingetragen in den letzten 10 Minuten" soll eine Fehlermeldung kommen.
5.) Das ist wichtig: In meiner DB ist das Feld "eintrag" als "longtext" und im Formular hab ich normal "textarea". Wenn ich nun aber dort einen Absatz mache oder einfach mehrere Absätze, dann wird es zwar in der DB so richtig abgespeicehrt aber in der Ausgabe ist es alles hintereinander ohne Absatz. Brauche ich da einen speziellen Wert oder eine Zeichenänderung via PHP oder wie mache ich das am Besten?
Also erstmal ich bin noch ein SQL und PHP n00b und deswegen stelle ich vielleicht für euch total simple Fragen.
Wäre wirklich nett, wenn mir jemand behilflich sein könnte.
Falls ihr noch Fragen dazu habt (wie die DB-Tabelle) genau aufgebaut ist usw. kann ich euch das beantworten.
Wenn ich das GB dann fertig habe, kann ich es auch OpenSource hier anbieten (falls jemand daran Interesse haben sollte).
Danke schon mal im Voraus und ich bin mir sicher, dass mir hier freundliche Checker helfen können ;-)
Schönen Tag noch bis später.
Grüße,
Adi.
Dieser Beitrag wurde von Corey bearbeitet: 10. März 2005 - 15:38