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 &auml;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=\"&Auml;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&ouml;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\">&nbsp;</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 &auml;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=\"&Auml;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&ouml;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\">&nbsp;</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%\">&nbsp;&nbsp;&nbsp;"
.$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