PHP/ MySQL Gästebuch Tutorial - Verwaltung und Administration
Autor
Flitze
Klicks 134901
Keywords:
Gästebuch Tutorial, PHP Gästebuch erstellen, Guestbook, Gästebuch mit PHP und MySQL, Spamschutz für Gästebuch, Spam im Gästebuch, , Gästebuch, Verwaltung, Administration
Klicks 134901
Rating für PHP/ MySQL Gästebuch Tutorial
4.1 von 10
Bewertungen133
Stand
05.07.2010
4.1 von 10
Bewertungen133
Keywords:
Gästebuch Tutorial, PHP Gästebuch erstellen, Guestbook, Gästebuch mit PHP und MySQL, Spamschutz für Gästebuch, Spam im Gästebuch, , Gästebuch, Verwaltung, Administration
Breadcrumb:
Tutorials » PHP/ MySQL Gästebuch Tutorial » PHP/ MySQL Gästebuch Tutorial - Verwaltung und Administration
7. Verwaltung
[ADSENSE_LINE]Einem User die Möglichkeit zu geben, mit der Website zu interagieren, also in diesem Falle, einen Eintrag im Gästebuch zu hinterlassen, birgt auch immer die Gefahr, dass ein User Blödsinn anstellt. Den wirklich 'gefährlichen' Sachen, haben wir bereits entgegengewirkt, indem kein HTML Code eingefügt werden kann und somit kein Cross-Scripting (<script></script>,</table></table>. .) möglich ist. Außerdem sichern wir die Datenbankeingabe mit addslashes und verhindern damit SQL-Injection. Wenn jetzt ein User aber bewusst böswillig Mist bauen will, dann können wir das faktisch nicht verhindern. Beispiel:
Zitat:
Name: Looser
Nachricht:
SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam Spam
Nachricht:
SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam SpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpam Spam
Durch die IP-Sperre können wir zwar größeren Schaden ausschließen, da er das Spielchen nur maximal einmal in der Minute wiederholen kann und darauf irgendwann keine Lust mehr haben wird, aber dennoch sieht so ein Eintrag natürlich blöd aus und ist lästig. Außerdem kann es natürlich immer noch vorkommen, dass sich ein 'echter' Spambot in unser Gästebuch einträgt, weil es keinen 100%igen Schutz dagegen gibt.
Wie dem auch sei, als Administrator muss man natürlich eingreifen und diese Einträge löschen und/oder bearbeiten können. Aus diesem Grund benötigen wir ein paar Scripte mittels derer wir das verwirklich können.
Als erstes erstelle ich einen neuen Ordner namens 'gaestebuch'. Darin erstelle ich nun 3 Dateien, die folgendermaßen heißen könnten:
index.php
edit.php
delete.php
Die index.php ist so etwas wie ein Menu, durch das man auf die verschiedenen Bereiche des Gästebuchs zugreifen kann. Sie ist so aufgebaut
PHP:
<?php
echo "<h4>Gästebuch</h4>\n";
switch(isset($_GET['action'])?$_GET['action']:''){
case 'edit':
include 'gaestebuch/edit.php';
echo "»» <a href=\"admin.php?page=gaestebuch\">Zurück zum Gästebuch-Menu</a>\n";
break;
case 'delete':
include 'gaestebuch/delete.php';
echo "»» <a href=\"admin.php?page=gaestebuch\">Zurück zum Gästebuch-Menu</a>\n";
break;
default:
// Werte des action-Parameters und deren Anzeige im Menu
$actions = array('edit' => 'bearbeiten', 'delete' => 'löschen');
// Anzeigen des Menus
foreach($actions as $action => $name)
echo "• <a href=\"admin.php?page=gaestebuch&action=".$action."\">".$name."</a><br><br>\n";
break;
}
?>
Auf die verschiedenen Sektionen wird durch den $_GET-Parameter action zugegriffen. Ausgewertet wird dieser Parameter in der switch-Anweisung mittels
PHP:
<?php
switch(isset($_GET['action'])?$_GET['action']:'')
?>
Wird kein oder ein unbekannter Parameter übergeben, so wird der Standardfall default: aktiviert. Dieser zeigt ein Menu der verschiedenen Aktionen (in diesem Fall editieren und löschen) an. Um mir ein wenig Arbeit zu ersparen, speichere ich den Wert des action-Parameters und den Anzeigenamen des Links in einem Array und lasse sie durch eine foreach-Schleife ausgeben.
Wird 'edit' oder 'delete' durch den action-Parameter übergeben, wird die Datei includiert und am Ende ein Link angezeigt, durch den man zurück ins Menu gelangt.
So, nun müssen wir die Dateien edit.php und delete.php noch mit Inhalt füllen. Ich beginne mal mit der edit.php. Wie der Name erahnen lässt, wird sie zum Bearbeiten eines Eintrags benötigt. Um einen Eintrag auszuwählen, muss ich erstmal alle Einträge darstellen. Das sieht so aus:
PHP:
<?php
// Einträge auswählen und nach Datum sortieren
$sql = "SELECT
ID,
Datum,
Name
FROM
Gaestebuch
ORDER BY
Datum DESC
";
$result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
// Abbrechen wenn keine Einträge vorhanden sind
if(!mysql_num_rows($result))
echo "Es befinden sich keine Gästebucheinträge in der Datenbank\n";
else {
// Auswahlformular anzeigen
echo "<form ".
"action=\"admin.php?page=gaestebuch&action=edit\" ".
"method=\"post\" ".
"accept-charset=\"ISO-8859-1\">";
echo "<select name=\"ID\">\n";
echo " <option value=\"0\">Bitte einen Gästebucheintrag wählen</option>\n";
while($row = mysql_fetch_assoc($result)) {
echo " <option value=\"".$row['ID']."\">\n";
echo htmlentities($row['Name'], ENT_QUOTES)." (".$row['Datum'].")\n";
echo " </option>\n";
}
echo "</select>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Eintrag auswählen\">";
echo "</form>\n";
?>
Da man in der Regel nicht mehrere Einträge auf einmal bearbeiten bzw. editieren muss, reicht eine Select-Liste zur Darstellung der Einträge aus. Nach dem Datum absteigend sortiert werden dann die einzelnen Einträge angezeigt. Dabei wird die ID des Eintrages als Wert übergeben, mittels dem ich im nächsten Schritt alle Daten des Eintrages aus der Datenbank hole. Um auch den richtigen Eintrag zu erwischen, gebe ich auch den Namen des Erstellers sowie das Erstellungsdatum aus. Natürlich muss auch hier darauf geachtet werden, die HTML-spezifischen Zeichen umzuwandeln. Wenn man einen Eintrag ausgewählt hat und auf 'Eintrag auswählen' klickt, geht es weiter mit dem nächsten Schritt. Wie man dem action-Attribut des <form>-Tags entnehmen kann, sende ich die Daten (bzw. die ID des Eintrages) an die gleiche Seite. Deshalb muss ich die Datei nun folgendermaßen erweitern
PHP:
<?php
// Prüfen, ob eine ID ausgewählt wurde
if(isset($_POST['ID']) AND $_POST['ID'] != "0") {
if(isset($_POST['submit']) AND $_POST['submit'] == 'Eintrag auswählen') {
$sql = "SELECT
Name,
Homepage,
Email,
Nachricht
FROM
Gaestebuch
WHERE
ID = '".$_POST['ID']."'
";
$result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
?>
<form action="admin.php?page=gaestebuch&action=edit"
method="post"
accept-charset="ISO-8859-1">
<table>
<tr>
<td>
Name*
</td>
<td>
:
</td>
<td>
<?php
echo "<input type=\"text\" name=\"Name\" style=\"width:300px;\" value=\"".htmlentities($row['Name'], ENT_QUOTES)."\">\n";
?>
</td>
</tr>
<tr>
<td>
Email-Adresse
</td>
<td>
:
</td>
<td>
<?php
echo "<input type=\"text\" name=\"Email\" style=\"width:300px;\" value=\"".htmlentities($row['Email'], ENT_QUOTES)."\">\n";
?>
</td>
</tr>
<tr>
<td>
Homepage
</td>
<td>
:
</td>
<td>
<?php
echo "<input type=\"text\" name=\"Homepage\" style=\"width:300px;\" value=\"".htmlentities($row['Homepage'], ENT_QUOTES)."\">\n";
?>
</td>
</tr>
<tr>
<td>
Nachricht
</td>
<td>
:
</td>
<td>
<?php
echo "<textarea name=\"Nachricht\" style=\"width:300px; height:100px\">".htmlentities($row['Nachricht'], ENT_QUOTES)."</textarea>\n";
?>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
<?php
echo "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
?>
<input type="submit" name="submit" value="Eintrag bearbeiten" style="width:300px;">
</td>
</tr>
</table>
</form>
<?
}
else {
// Formular zum auswählen eines Eintrages anzeigen...
}
?>
Nachdem ich sichergestellt habe, dass eine ID ausgewählt und übergeben und der richtige Button gedrückt wurde, hole ich mir die Daten aus Datenbank. Dabei hilft mir die ID, mit der ich den Eintrag eindeutig identifizieren kann.
Danach werden die Daten in ein Formular eingetragen. Es handelt sich dabei um das gleiche Formular, durch das auch der User den Eintrag gemacht hat. Dieses Formular ist lediglich dadurch modifiziert, dass die einzelnen Felder bereits Vorbelegungen in Form der value-Attribute erhalten. Damit auch weiterhin bekannt ist, welchen Eintrag wir eigentlich bearbeiten, habe ich außerden ein hidden-Feld eingefügt, dass die ID des Eintrages enthält.
Zur Verdeutlichung dessen, was ich mit der Vorbelegung meine, nehme ich mal zwei Beispiele heraus
PHP:
<?php
echo "<input type=\"text\" name=\"Homepage\" style=\"width:300px;\" value=\"".htmlentities($row['Homepage'], ENT_QUOTES)."\">\n";
?>
...
<?php
echo "<textarea name=\"Nachricht\" style=\"width:300px; height:100px\">".htmlentities($row['Nachricht'], ENT_QUOTES)."</textarea>\n";
?>
...
<?php
// und hier das hidden-Feld, durch das die ID erhalten bleibt
echo "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
?>
Und bitte an htmlentities denken
So, nun haben wird die Daten vorliegen und können sie bearbeiten. Mit einem Klick auf 'Eintrag bearbeiten' werden diese Daten nun erneut an die gleiche Datei gesendet, weshalb wir diese auch ein letztes mal verarbeiten müssen.
PHP:
<?php
if(isset($_POST['ID']) AND $_POST['ID'] != "0") {
if(isset($_POST['submit']) AND $_POST['submit'] == 'Eintrag bearbeiten') {
$errors = array();
if(isset($_POST['Name']) AND trim($_POST['Name']) == "")
$errors[] = "Geben Sie Ihren Namen an.\n";
if(isset($_POST['Nachricht']) AND trim($_POST['Nachricht']) == "")
$errors[] = "Geben Sie Ihre Nachricht ein.\n";
if(count($errors)){
echo "Der Eintrag konnte nicht bearbeitet werden.<br>\n".
"<br>\n";
foreach($errors as $error)
echo $error."<br>\n";
}
else {
$Editierung = "Dieser Eintrag wurde am [b]".
date(JAHR, time()).
"[/b] um [b]".
date(UHRZEIT, time()).
"[/b] editiert.";
$sql = "UPDATE
Gaestebuch
SET
Name = '".addslashes(trim($_POST['Name']))."',
Email = '".addslashes(trim($_POST['Email']))."',
Homepage = '".addslashes(trim($_POST['Homepage']))."',
Nachricht = '".addslashes(trim($_POST['Nachricht']))."',
Editierung = '".addslashes(trim($Editierung))."'
WHERE
ID = '".$_POST['ID']."'
";
mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
echo "Der Beitrag wurde erfolgreich bearbeitet.<br>\n".
"Sie werden automatisch zum Gästebuch-Menu weitergeleitet.<br>\n".
"Sollte die automatische Weiterleitung nicht funktionieren, klicken sie bitte <a href=\"admin.php?page=gaestebuch\">hier</a>\n";
echo "<meta http-equiv=\"refresh\" content=\"1; URL=admin.php?page=gaestebuch\">\n";
}
}
elseif(isset($_POST['submit']) AND $_POST['submit'] == 'Eintrag auswählen') {
// Bearbeitungsformular anzeigen
}
}
else {
// Auswahlformular anzeigen
}
?>
Zunächst folgt die obligatorische Fehlerüberprüfung der Formulardaten, dann wird der Editierungstext generiert und letztendlich werden alle Daten geupdatet und es erfolgt eine Weiterleitung zum Gästebuchmenu.
Der Editierungstext wird automatisch generiert und enthält im obigen Beispiel nur das Datum der Änderung
PHP:
<?php
$Editierung = "Dieser Eintrag wurde am [b]".
date('d.m.Y', time()).
"[/b] um [b]".
date('H:i:s \U\h\r', time()).
"[/b] editiert.";
?>
Damit wäre die edit.php vollständig und wir können uns der delete.php zuwenden.
Zunächst werden wie alle Einträge aus der Datenbank geholt und angezeigt
PHP:
<?php
$sql = "SELECT
COUNT(*) as Anzahl
FROM
Gaestebuch
";
$result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
$anzahl = mysql_result($result, 0);
if (!$anzahl)
echo "Es befinden sich keine Einträge in der Datenbank\n".
else {
// Berechnung der Seitenzahlen
$start = isset($_GET['page_number'])?(int)$_GET['page_number']:1;
$num_pages = ceil($anzahl/25);
if ($start < 1)
$start = 1;
if ($start > $num_pages)
$start = $num_pages;
$offset = ($start-1)*25;
// Ausgabe der Seitenzahlen
echo "<table>\n";
echo " <tr>\n";
echo " <td>\n";
echo "Seite: \n";
echo " </td>\n";
echo " <td style=\"text-align:left\">\n";
for($i=1; $i<=$num_pages; $i++) {
if ($i==$start)
echo $i."\n";
else
echo "<a href=\"admin.php?page=gaestebuch&action=delete&page_number=".$i."\" style=\"text-decoration:underline;\">".$i."</a>\n";
}
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
// Start des eigentlichen Formulars
echo "<form ".
"name=\"Gaestebuch\" ".
"action=\"admin.php?page=gaestebuch&action=delete\" ".
"method=\"post\" ".
"accept-charset=\"ISO-8859-1\">";
echo "<table>\n";
echo " <tr style=\"font-weight:bold;\">\n";
echo " <td>\n";
echo " Datum\n";
echo " </td>\n";
echo " <td>\n";
echo " Autor\n";
echo " </td>\n";
echo " <td>\n";
echo " \n";
echo " </td>\n";
echo " </tr>\n";
$sql = "SELECT
ID,
Datum,
Name
FROM
Gaestebuch
ORDER BY
Datum DESC
LIMIT
".$offset.", 25
";
$result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
while ($row = mysql_fetch_assoc($result)) {
echo " <tr>\n";
echo " <td>\n";
echo date('d.m.Y. H:i \U\h\r', strtotime($row['Datum']))."\n";
echo " </td>\n";
echo " <td>\n";
echo htmlentities($row['Name'], ENT_QUOTES)."\n";
echo " </td>\n";
echo " <td>\n";
echo " <input type=\"checkbox\" name=\"ID[]\" value=\"".$row['ID']."\">\n";
echo " </td>\n";
echo " </tr>\n";
}
echo "</table>\n";
echo "<center><input type=\"submit\" name=\"submit\" value=\"Einträge löschen\"></center>";
echo "</form>\n";
?>
Im Gegensatz zur edit.php habe ich mich für eine Checkboxlösung entschieden. Dabei wird ein Array mit allen IDs erzeugt, die ich selektiere. Meine Entscheidung begründet sich darauf, dass es durchaus mal vorkommen kann, dass es ein Bot auf unser Gästebuch abgesehen hat und wir gerade in dieser Zeit im Urlaub sind.. oder so
Naja jedenfalls spammt dieser Bot dann fröhlich das Gästebuch zu und wenn wir zurückkommen sind dort ca. 100 Einträge, die da nicht sein sollten. Wenn ich nun jeden Eintrag einzeln auswählen müsste, würde das ganz schön lange dauern. Durch die Checkboxlösung selektiere ich einfach alle Einträge, die gelöscht werden sollen und lösche sie alle mit einem Klick.
Im obigen Beispiel kommen zudem noch Seitenzahlen zum Einsatz. Wie dieses Prinzip funktioniert, könnt ihr im Blätterfunktion mit Seitenzahlen - Tutorial nachlesen.
Mit einem Klick auf 'Einträge löschen' werden die IDs der selektierten Einträge abgesendet. Das Ziel ist auch in diesem Fall wieder die gleiche Datei, die ich nun folgendermaßen erweitere
PHP:
<?php
if (isset($_POST['ID'])) {
if(isset($_POST['submit']) AND $_POST['submit'] == 'Einträge löschen') {
foreach($_POST['ID'] as $value){
$sql= "DELETE FROM
Gaestebuch
WHERE
ID = '".$value."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
}
echo "Die Einträge wurden erfolgreich gelöscht.<br>\n".
"Sie werden automatisch zum Gästebuch-Menu weitergeleitet.<br>\n".
"Sollte die automatische Weiterleitung nicht funktionieren, klicken sie bitte <a href=\"admin.php?page=gaestebuch\">hier</a>\n";
echo "<meta http-equiv=\"refresh\" content=\"1; URL=admin.php?page=gaestebuch\">\n";
}
}
else {
// Formular zum auswählen anzeigen ..
}
?>
In diesem Fall reicht es, wenn ich die IDs mittels isset prüfe, da dieses Array nicht existieren würde, wenn keine Checkbox ausgewählt wurde.
In einer foreach-Schleife lösche ich dann alle ausgewählten Einträge, da ich ja deren ID kenne.
Damit wäre auch die delete.php komplett und das Tutorial an dieser Stelle beendet.
Zurück zur vorigen Seite:
PHP/ MySQL Gästebuch Tutorial - Ausgabe der Einträge Bewerten