Admin-Bereich für die Umfrage auf MySQL-Basis
In diesem Tutorial erkläre ich euch, wir ihr einen Admin-Bereich für die Umfrage auf MySQL-Basis (
zum Tutorial ) machen könnt.
Die Grundlage ist erstmal ein neuer Ordner. Dieser Ordner muss in dem Ordner der Umfrage erstellt werden. Der Name spielt keine Rolle, ich habe bei mir den Namen
admin gewählt.
Nachdem wir den Ordner erstellt haben, müssen wir die Datei
config.inc.php öffnen und eine neue Variable hinzufügen:
$ntable
$ntable enthält den Wert der Admin-Tabelle. Bei meinem Beispiel also
admin:
| PHP: |
<?php $ntable = "admin"; ?>
|
Nachdem wir die Config angepasst haben, richten wir eine neue Tabelle in der MySQL-Datenbank ein:
Feld (Name) Typ (Datentyp) Null Extras
id INT (11) not null auto_increment, PRIMARY_KEY
name VARCHAR (255) not null -
pass VARCHAR (255) not null -
Hier nocheinmal der MySQL-Befehl: (Der Tabellen-Name muss natürlich angepasst werden)
| Code: |
CREATE TABLE `admin` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`pass` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) |
Diese Tabelle benötigen wir für den Login zum Admin-Bereich. Für den Login nutze ich den aus Code aus meinem Tutorial
Ein einfacher Login auf MySQL-Basis , daher werde ich auf die beiden Datein auch nicht näher eingehen, sondern nur Ihren Inhalt zeigen.
Die Datei
index.php, das Loginformular:
| Code: |
<form action="check.php" method="post">
<table width="200" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Name:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="pass"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="login" value="Login">
</td>
</tr>
</table>
</form> |
Die Datei
check.php, die Datei zum prüfen der Eingabe:
| PHP: |
<?php
include("../config.inc.php");
session_start();
if(isset($_POST['login']))
{
$name = $_POST['name'];
$pass = $_POST['pass'];
$pass = md5($pass);
$check = "SELECT * FROM `".$ntable."` WHERE name LIKE '".$name."' AND pass = '".$pass."'";
$check_result = mysql_query($check);
$result = mysql_num_rows($check_result);
if($result > 0)
{
$logedin = TRUE;
$_SESSION['logedin'] = $logedin;
echo "Login erfolgreich!<br>Bitte klicken Sie <a href=\"admin.php\">hier</a> um zum Admin-Bereich zu gelangen..";
}
else
{
echo "Die Daten waren falsch.";
}
}
?>
|
Nun kommt das Kernstück des Admin-Bereichs, die Datei admin.php.
Zuerst prüfen wir in der Datei, ob der Admin auch eingeloggt ist:
| PHP: |
<?php
session_start();
if(isset($_SESSION['logedin']) && $_SESSION['logedin'])
{ ?>
|
Als nächstes folgt der eigentliche Inhalt der
admin.php, die Administration.
Zuerst binden wir unsere Datei
config.inc.php ein, damit wir eine Verbindung zum MySQL-Server haben.
Jetzt beginnen wir mit der Ausgabe der Seite. Zu der Grund-HTML-Struktur kommen noch 3 Links zum einfacheren Navigieren.
| PHP: |
<?php include("../config.inc.php");
echo "<html>
<head>
<title>Umfragen-Administrations-Bereich.</title>
</head>
<body>
<a href=\"".$_SERVER['PHP_SELF']."\">zur Startseite</a><br>
<a href=\"".$_SERVER['PHP_SELF']."?action=add\">Frage hinzufügen</a><br>
<a href=\"".$_SERVER['PHP_SELF']."?action=add_ant\">Antwort hinzufügen</a><br><br>"; ?>
|
Da wir nun die Grundlagen erstellt haben, beginnen wir mit den Funktionen. Die Funktionen sind in einzelne IF-Blöcke eingeteilt. Insgesamt sind es 6 IF-Blöcke und 1 ELSE-Block.
Die IF-Blöcke sind folgende Funktionen zuständig:
Fragen hinzufügen, Fragen editieren, Fragen löschen, Antworten hinzufügen, Antworten editieren und Antworten löschen.
Der ELSE-Block ist für die Auflistung der Fragen und Antworten zuständig.
Wir beginnen nur mit den IF-Blöcken, der erste Block ist zum Editieren der Fragen:
| PHP: |
<?php if($action == "edit")
{
if (isset($_POST['edit']))
{
$sql = "UPDATE `fragen` SET frage = '".$_POST['frage_neu']."' WHERE id = '".$_GET['fid']."'";
$result = mysql_query($sql);
if ($result) echo "Daten erfolgreich geändert!";
}
else
{
$sql = "SELECT * FROM `fragen` WHERE id = '".$_GET['fid']."'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$frage = $row['frage'];
echo "<form action=\"".$_SERVER['PHP_SELF']."?action=edit&fid=".$_GET['fid']."\" method=\"post\">
<strong>
Frage ändern
</strong>
<table width=\"400\" align=\"center\">
<tr>
<td>
Frage:
</td>
<td>
<input type=\"text\" name=\"frage_neu\" value=\"".$frage."\" size=\"50\">
</td>
</tr>
<tr>
<td colspan=\"2\">
<input name=\"edit\" type=\"submit\" value=\"Änderung vornehmen\">
</td>
</tr>
</table>
</form>";
}
} ?>
|
Als ersten prüfen wir, ob das Formular abgeschickt wurde, ist dies nicht der Fall, geben wir das Formular mit der ausgewählten Frage aus. Um zu bestimmen, welche Frage editiert werden soll, übergeben wir über die URL eine Variable namens
fid. Das ist unsere so genannte
Fragen-ID.
Wenn das Formular abgeschickt wurde, "erneuern" wir einfach die alten Daten durch den UPDATE-Befehl.
Jetzt folgt der IF-Block zum Löschen der Fragen:
| PHP: |
<?php elseif($action == "del")
{
if (isset($_POST['del']))
{
$sql = "DELETE FROM `fragen` WHERE id = '".$_GET['fid']."'";
$result = mysql_query($sql);
$sql = "DELETE FROM `antworten` WHERE fid = '".$_GET['fid']."'";
$result1 = mysql_query($sql);
if ($result && $result1) echo "Daten erfolgreich gelöscht!";
else echo "Keine Daten geschrieben!";
}
else
{
$sql = "SELECT * FROM `fragen` WHERE id = '".$_GET['fid']."'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$frage = $row['frage'];
echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."?action=del&fid=".$_GET['fid']."\">
<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"582\">
<tr>
<td align=\"center\">".$frage."</td>
</tr>
<tr>
<td align=\"center\"><b>Info:</b> Alle Antworten und Ergebnisse zu dieser Frage werden auch gelöscht</td>
</tr>
</table>
<br>
<input name=\"del\" type=\"submit\" value=\"Eintrag löschen\">
</form>";
}
} ?>
|
Auch bei diesem IF-Block wird geprüft, ob das Formular abgesendet wurde, wenn nicht, wird auch hier ein Formular ausgegeben. Dieses Formular besitzt jedoch keine Eingabe-Felder, sondern gibt nur noch einmal die Frage aus, bevor sie gelöscht wird. Wird nun das Formular abgeschickt, löschen wir die Frage und alle dazugehörigen Antworten, da diese sonst unnötigen Platz der Datenbank belegen würden.
Als nächstes kommt der IF-Block zum Hinzufügen der Fragen:
| PHP: |
<?php elseif($action == "add")
{
if (isset($_POST['add']))
{
$sql = "INSERT INTO `fragen` (id, frage, ergebnis) VALUES ('', '$frage', '0')";
$result = mysql_query($sql);
if ($result) echo "Daten erfolgreich hinzugefügt!";
}
else
{
echo "<form action=\"".$_SERVER['PHP_SELF']."?action=add\" method=\"post\">
<table width=\"500\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
<tr>
<td>
Frage:
</td>
<td>
<input type=\"text\" name=\"frage\">
</td>
</tr>
<tr><td colspan=\"2\"> </td></tr>
<tr>
<td colspan=\"2\" align=\"center\">
<input type=\"submit\" name=\"add\" value=\"Frage eintragen\">
</td>
</tr>
</table>
</form>";
}
} ?>
|
Hierbei wird, wenn das Formular noch nicht abgesendet wurde, ein Eingabefeld ausgegeben. Sobald in dieses Eingabefeld die Frage eingegeben wurde, kann dieses abgeschickt werden und die Frage wird durch dir MySQL-Funktion INSERT in die Datenbank eingetragen.
Damit sind unsere Funktionen für die Fragen komplett. Jetzt fehlen noch die Funktionen für die Antworten.
Auch hierbei macht der Anfang die Funktion zum Editieren der Antworten:
| PHP: |
<?php elseif($action == "edit_ant")
{
if (isset($_POST['edit']))
{
$sql = "UPDATE `antworten` SET antwort = '".$_POST['antwort_neu']."' WHERE fid = '".$_GET['fid']."' AND id = '".$_GET['aid']."'";
$result = mysql_query($sql);
if ($result) echo "Daten erfolgreich editiert!";
}
else
{
$sql = "SELECT * FROM `antworten` WHERE fid = '".$_GET['fid']."' AND id = '".$_GET['aid']."'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$antwort = $row['antwort'];
echo "<form action=\"".$_SERVER['PHP_SELF']."?action=edit_ant&fid=".$_GET['fid']."&aid=".$_GET['aid']."\" method=\"post\">
<strong>
Antwort ändern
</strong>
<table width=\"400\" align=\"center\">
<tr>
<td>
Antwort:
</td>
<td>
<input type=\"text\" name=\"antwort_neu\" value=\"".$antwort."\">
</td>
</tr>
<tr>
<td colspan=\"2\">
<input name=\"edit\" type=\"submit\" value=\"Änderung vornehmen\">
</td>
</tr>
</table>
</form>";
}
} ?>
|
In diesem Code-Teil wird auch geprüft, ob das Formular abgesendet wurde, wenn nein, wir ein Formular ausgegeben. In diesem Formular gibt es ein Eingabe-Feld, in welchem die zu ändernde Antwort steht. Sobald das Formular abgesendet wurde, wird auch, wie bei dem Editieren der Fragen, über die MySQL-Funktion UPDATE die Antwort editiert. Damit dies reibungslos klappt, benötigen wir nun nicht nur unsere Hilfs-Variable
fid sondern auch noch eine weitere Hilfs-Variable
aid (Antwort-ID). Diese beiden ID's werden an alle URL drangehängt, die etwas mit Antwortn zu tun haben.
Nun folgt der Code-Teil zum Löschen der Antworten:
| PHP: |
<?php elseif($action == "del_ant")
{
if (isset($_POST['del']))
{
$sql = "DELETE FROM `antworten` WHERE fid = '".$_GET['fid']."' AND id = '".$_GET['aid']."'";
$result = mysql_query($sql);
if ($result) echo "Daten erfolgreich gelöscht!";
}
else
{
$sql = "SELECT * FROM `antworten` WHERE fid = '$fid' AND id = '$aid'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$antwort = $row['antwort'];
echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."?action=del_ant&fid=".$_GET['fid']."&aid=".$_GET['aid']."\">
<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"582\">
<tr>
<td align=\"center\">".$antwort."</td>
</tr>
</table>
<br>
<input name=\"del\" type=\"submit\" value=\"Eintrag löschen\">
</form>";
}
} ?>
|
Auch hier findet, wie bei den Fragen, eine Ausgabe statt. Diese Ausgabe zeigt noch einmal die Antwort an, bevor bestätigt wird, dass die Antwort gelöscht werden soll. Nach dem Bestätigen wird auch hier der Befehl DELETE genutzt, um die Antwort zu entfernen.
Jetzt folgt noch der letzte IF-Block zum Hinzufügen von Antworten:
| PHP: |
<?php elseif($action == "add_ant")
{
if (isset($_POST['add']))
{
$sql = "INSERT INTO `antworten` (id, fid, antwort, ergebnis) VALUES ('', '".$_POST['fid']."', '".$_POST['antwort']."', '0')";
$result = mysql_query($sql);
if ($result) echo "Daten erfolgreich hinzugefügt!";
}
else
{
echo "<form action=\"".$_SERVER['PHP_SELF']."?action=add_ant\" method=\"post\">
<table width=\"500\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
<tr>
<td>
Frage:
</td>
<td>
<select name=\"fid\">";
$f_sql = "SELECT * FROM `fragen` ORDER BY id DESC";
$f_res = mysql_query($f_sql);
while($f_row = mysql_fetch_array($f_res))
{
$fid = $f_row['id'];
$frage = $f_row['frage'];
echo "<option value=\"".$fid."\">".$frage."</option>";
}
echo "</select>
</td>
</tr>
<tr>
<td>
Antwort:
</td>
<td>
<input type=\"text\" name=\"antwort\">
</td>
</tr>
<tr><td colspan=\"2\"> </td></tr>
<tr>
<td colspan=\"2\" align=\"center\">
<input type=\"submit\" name=\"add\" value=\"Antwort eintragen\">
</td>
</tr>
</table>
</form>";
}
} ?>
|
Dieser Teil ist etwas umfangreicher, da man als Admin auch bestimmen muss, zu welcher Frage man eine Antwort erstellen möchte. Dies geschieht über ein Drop-Down-Feld, in das vorher per SELECT alle Fragen eingelesen wurden. Nach dem Auswählen der Frage und dem Eintippen der dazugehörigen Antwort kann das Formular abgeschickt werden. Nach dem Abschicken wird per INSERT die neue Antwort hinzufügt.
Beim Hinzufügen benötigen wir nicht unsere beiden Hilfs-Variablen
fid und
aid, da die Fragen-ID mit über das Formular (Drop-Down-Feld) übergeben wir und die Antwort-ID noch gar nicht existiert.
Damit wären unsere Haupt-Funktionen fertig. Nun fehlt nur noch der ELSE-Block, der alle Fragen und Ihre dazugehörigen Antworten ausgibt:
| PHP: |
<?php else
{
$sql = "SELECT * FROM `fragen` ORDER by id DESC";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
$fid = $row['id'];
$frage = $row['frage'];
$a_sql = "SELECT * FROM `antworten` WHERE fid = '".$fid."'";
$a_res = mysql_query($a_sql);
echo "<table width=\"600\" border=\"0\" cellpadding=\"1\" cellspacing=\"0\">
<tr>
<td width=\"65%\"><b>".$frage."</b></td>
<td width=\"35%\"><a href=\"".$_SERVER['PHP_SELF']."?action=edit&fid=".$fid."\">Frage Editieren</a> | <a href=\"".$_SERVER['PHP_SELF']."?action=del&fid=".$fid."\">Frage Löschen</a>
</tr>
</table>";
while($a_row = mysql_fetch_array($a_res))
{
$aid = $a_row['id'];
$antwort = $a_row['antwort'];
echo "<table width=\"600\" border=\"0\" cellpadding=\"1\" cellspacing=\"0\" style=\"background-color: ".$color."; color: ".$color1."\">
<tr>
<td width=\"65%\"> ".$antwort."</td>
<td width=\"35%\"><a href=\"".$_SERVER['PHP_SELF']."?action=edit_ant&fid=".$fid."&aid=".$aid."\" style=\"color: ".$color1."\">Antwort Editieren</a> | <a href=\"".$_SERVER['PHP_SELF']."?action=del_ant&fid=".$fid."&aid=".$aid."\" style=\"color: ".$color1."\">Antwort Löschen</a>
</tr>
</table>";
}
echo "<br><br>";
}
} ?>
|
Auf den ersten Blick sieht dieser Teil vielleicht kompliziert aus, jedoch beim genaueren Hinsehen ist es gar nicht mehr so schwer.
Als ersten lesen wir alle Fragen aus der Datenbank aus. Dies machen wir mit der Funktion
mysql_fetch_array() und einer while-Schleife. Da wir aber nicht nur die Fragen ausgeben möchten, sondern auch die passenden Antworten, müssen wir in dieser while-Schleife noch eine 2. while-Schleife einbauen. Bei der MySQL-Abfrage zum Auslesen der Antworten müssen wir jedoch die durch die erste MySQL-Abfrage ausgelesene Fragen-ID mit übergeben, da die Antwort sonst nicht weiß, zu welcher Frage sie gehört.
Jetzt geben wir nur noch unsere ausgelesenen Daten in einer Tabelle aus. Natürlich dürfen die Links zu den Admin-Funktionen nicht fehlen. Bei den Links ist darauf zu achten, dass auch wirklich immer die
fid und falls nötig auch die
aid angehängt wird.
Damit wäre die Administration abgeschlossen und wir können alle offenen IF- und ELSE-Blöcke schließen:
| PHP: |
<?php echo "</body>
</html>";
}
else
{
echo "Sie sind nicht eingeloggt.";
}
?>
|
Da diese Datei etwas umfangreich ist, habe ich sie zur Not nocheinmal mit den anderen beiden Datein zum Login angehängt. Auch liegt dem Zip-Archiv eine SQL-Datei mit der Datenbank-Struktur für die Tabelle
admin bei.
Download des ZIP-Archivs