quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von progman @ 2003/12/20 19:15:48

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Eigenes Member-Script

  1. Die Member eines Clans anzeigen
  2. Adminbereich einstellen
  3. Member hinzufügen
  4. Member löschen
  5. Member bearbeiten
  6. Memberscript

1. Die Member eines Clans anzeigen

Die ganzen Scripte sind sehr ähnlich zueinander, z.B. was die Administrations betrifft. Ich schreibe nun das Member-Script weil das Clanwar-Script auf die Clanmember zugreift. Aber natürlich möchte man zeigen, welche Member im Clan sind.

Nun müssen wir uns überlegen, was wir alles von einem Member speichern möchten. Natürlich wollen wir Name und Email speichern. Dann noch die ICQ Nummer, sein Geburtsdatum, seit wann er im Clan ist und seine Rechnerdaten. Von denen speichere ich nur Prozessor und Grafikkarte. Und als letzes speichern wir die bisherige Laufbahn des Members. Es kann ja sein, das er schonmal in einem anderen Clan mitgespielt hat. Dies sollte man ja vielleicht auch mit festhalten. Die Tabellenstruktur sieht dann so aus.

member(ID,Name,Email,Geburtstag,ICQ,Joined,Prozessor,Grafikkarte)
member_laufbahn(ID,MemberID,Von,Bis,Clan,Clanurl)
        

Die Spalten Geburtstag, Joined, Von und Bis sollten nur vom Typ DATE sein. Wir müssen nicht auf die Sekunde genau speichern, wann er jetzt z.B. den Clan beigetreten ist.

2. Adminbereich einstellen

Nachdem wir das Array $admin_site erweitert und die Datei admin_menu.php bearbeitet haben, setzen wir uns an die admin_member.php. Dort fügen wir wieder unser Grundgerüst ein.

<?php
    $rights
= getRights();
    if(!
in_array("Member", $rights))
    {
        
no_rights();
    }
    else
    {
        switch(@
$_GET['action'])
        {
            case
"add":
                break;
            case
"edit":
                break;
            case
"del":
                break;
            default:
                echo(
"<p>\n");
                echo(
"    Bitte benutzen sie nur einen Link aus dem Adminmenu.\n");
                echo(
"</p>\n");
                
back2admin();
                break;
        }
    }
?>

3. Member hinzufügen

Das Script zum hinzufügen eines Members wird in mehrere Schritte aufgegliedert. Zuerst gibt man im ersten Formular die Daten wie Name und Email an. Im nächsten Formular gibt man dann die bisherige Laufbahn des Members an, falls vorhanden. Nach dem Absenden dieses Formulares wird dann der Member in die Datenbank geschrieben. Insgesammt sind das dann 4 Bereiche. 2 Formulare, eine Übersicht und ein Programmteil um den Member hinzuzufügen.

<?php
    
case 'add':
        if(isset(
$_POST['submit']) AND "Weitere Memberdaten hinzufügen" == $_POST['submit'])
        {
        }
        else
        {
            echo(
"<form action=\"index.php?section=admin&amp;site=member&amp;action=add\" ");
            echo(
"      method=\"post\"");
            echo(
"      class=\"formular\">\n");
            echo(
"    <p>\n");
            echo(
"        Neuen Member hinzufügen\n");
            echo(
"    </p>\n");
            echo(
"    <ol>\n");
            echo(
"        <li>\n");
            echo(
"           <label for=\"name\">Name</label>\n");
            echo(
"           <input type=\"text\" name=\"name\" id=\"name\"/>\n");
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"           <label for=\"email\">Email</label>\n");
            echo(
"           <input type=\"text\" name=\"email\" id=\"email\"/>\n");
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"               <label for=\"ICQ\">ICQ</label>\n");
            echo(
"               <input type=\"text\" name=\"ICQ\" id=\"ICQ\"/>\n");
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"               Geburtstag\n");
            echo(
"               ...\n"); // Spezielles Formular kommt noch
            
echo("        </li>\n");
            echo(
"        <li>\n");
            echo(
"               Clan beigetreten\n");
            echo(
"               ...\n"); // s.o.
            
echo("        </li>\n");
            echo(
"        <li>\n");
            echo(
"               <label for=\"prozessor\">Prozessor</label>\n");
            echo(
"               <input type=\"text\" name=\"prozessor\" id=\"prozessor\"/>\n");
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"               <label for=\"grafikkarte\">Grafikkarte</label>\n");
            echo(
"               <input type=\"text\" name=\"grafikkarte\" id=\"grafikkarte\"/>\n");
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"<input type=\"submit\" name=\"submit\" value=\"Weitere Memberdaten hinzufügen\" />\n");
            echo(
"<input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n");
            echo(
"<input type=\"hidden\" name=\"".session_name()."\"");
            echo(
"                          value=\"".session_id()."\" />");
            echo(
"        </li>\n");
            echo(
"    </ol>\n");
            echo(
"</form>\n");

        }
        break;
?>

Die Formulare für die Zeitangaben habe ich erstmal weggelassen. Wir müssen ja das Datum in der Form YYYY-MM-DD speichern. Doch das können wir dem Benutzer nicht abverlangen, dass er die Daten genauso angibt. Er möchte lieber die Daten im "Klicki-Bunti"-Style angeben, mit vordefinierten Formulare wo man Tag, Monat und Jahr angibt. Die Formularelemente Jahr und Tag sind kein Problem. Doch bei dem Monat sollten dort Monatsnamen und keine Zahlen stehen. Es gibt nun verschiedene Möglichkeiten, wie man diese Monatsnamen ausgibt.

  1. Mit der Funktion date können wir uns einen String zurückliefern, der z.B. den Monatsnamen enthält. Probleme gibt es da mit der Timestamp angabe. Dieses Timestamp müssen wir 12 mal mit mktime erstellen lassen.

  2. Die Funktion strftime funktioniert so wie die Funktion date. Doch in Verbindung mit setlocale können wir uns da den deutschen Monatsnamen ausgeben lassen. Die Funktion date hingegen liefert immer die englischen Monatsnamen zurück.

  3. Da wir mit Sicherheit die Monatsnamen öfters brauchen, wir aber nicht immer das Timestamp errechnen wollen und die Monatsnamen mit date holen wollen, sollten wir die Monatsnamen in einem Array schreiben. Die Schlüssel der Arrayelemente sind dann die Monatszahlen, die Werte der Arrayelemente die Monatsnamen. Dies könnte dann z.B. so aussehen.

    <?php
        $monate
    = array();
        
    $monate[1] = "Januar";
        
    $monate[2] = "Februar";
        
    // ...
    ?>

Wir entscheiden uns nicht für einen Punkt, sondern für alle. Wir speichern die Monatsnamen global in einem Array ab, aber die Monatsnamen selber lassen wir mit den Funktionen strftime und setlocale erstellen. Das Timestamp für die Funktion erstellen wir mit der Funktion mktime. Das Array definieren wir, wie üblich, in der variablen.php.

<?php
    $monate
= array();
    for(
$i=1; $i<=12; $i++)
    {
        
$monate[$i] = strftime("%B", mktime(0, 0, 0, $i, 0, 2000));
    }
?>

Damit er auch die deutschen Monatsnamen ins Array speichert, müssen wir auch noch die Funktion setlocale aufrufen. Dies machen wir direkt in der config.php

<?php
    
// config.php

    
setlocale(LC_TIME, 'de_DE');
    
// LC_* sind spezielle Konstanten für setlocale,
    // bei 'LC_TIME' würde PHP meckern

    
include("inc/constant.php");
    include(
"inc/functions.php");
    include(
"inc/variablen.php");
?>

Nun können wir unsere Formularelemente für die Datumseingabe schreiben.

<?php
    
// ...

    
echo("        <li>\n");
    echo(
"            Geburtstag\n");
    
// Formularfeld für den Tag
    
echo("                <select name=\"geb[tag]\">\n");
    for(
$i=1; $i<=31; $i++)
    {
        echo(
"<option value=\"".$i."\">\n");
        echo(
$i.".\n");
        echo(
"</option>\n");
    }
    echo(
"                </select>\n");

    
// Formularfeld für den Monat
    
echo("                <select name=\"geb[monat]\">\n");
    for(
$i=1; $i<=12; $i++)
    {
        echo(
"<option value=\"".$i."\">\n");
        echo(
$monate[$i].".\n");
        echo(
"</option>\n");
    }
    echo(
"                </select>\n");

    
// Formularfeld für das Jahr
    
echo("                <input type=\"text\" name=\"geb[jahr]\" />\n");

    echo(
"        </li>\n");
    echo(
"        <li>\n");
    echo(
"            Clan beigetreten\n");

    
$now = getdate();
    
// Formularfeld für den Tag
    
echo("                <select name=\"join[tag]\">\n");
    for(
$i=1; $i<=31; $i++)
    {
        echo(
"<option value=\"".$i."\"");
        if(
$i == $now['mday'])
            echo(
" selected=\"selected\"");
        echo(
">\n");
        echo(
$i.".\n");
        echo(
"</option>\n");
    }
    echo(
"                </select>\n");

    
// Formularfeld für den Monat
    
echo("                <select name=\"join[monat]\">\n");
    for(
$i=1; $i<=12; $i++)
    {
        echo(
"<option value=\"".$i."\"");
        if(
$i == $now['mon'])
            echo(
" selected=\"selected\"");
        echo(
">\n");
        echo(
$monate[$i].".\n");
        echo(
"</option>\n");
    }
    echo(
"                </select>\n");

    
// Formularfeld für das Jahr
    
echo("                <input type=\"text\" name=\"join[jahr]\" value=\"".$now['year']."\"/>\n");

    echo(
"        </li>\n");
    
// ...
?>

Die Überprüfung, ob er jetzt ein richtiges Datum und nicht 31. Februar eingegeben hat, wird später noch gemacht. Nun kommt der Programmteil, mit dem wir die Eingaben prüfen und eine Übersicht anzeigen. Die Daten speichern wir dazu noch in die Session.

<?php
    
// ...
    
if(isset($_POST['submit']) AND "Weitere Memberdaten hinzufügen" == $_POST['submit'])
    {
        
$error = 0; // Wächterstruktur
        
if(isset($_POST['geb']['jahr'],
                 
$_POST['join']['jahr']))
        {
            
// wenn die Daten von dem Formular kommen, prüfen
            
if(!checkdate($_POST['geb']['monat'],
                          
$_POST['geb']['tag'],
                          
$_POST['geb']['jahr']))
            {
                echo(
"<p>\n");
                echo(
"    Bitte geben sie ein gültiges Geburtsdatum an.\n");
                echo(
"</p>\n");
                
$error++;
            }
            if(!
checkdate($_POST['join']['monat'],
                          
$_POST['join']['tag'],
                          
$_POST['join']['jahr']))
            {
                echo(
"<p>\n");
                echo(
"    Bitte geben sie ein gültiges Beitrittsdatum an.\n");
                echo(
"</p/gt;\n");
                
$error++;
            }
        }
        if(!
$error)
        {
            
// Session Variablen checken und initialisieren
            
if(!isset($_SESSION['Name']))
                
$_SESSION['Name'] = trim($_POST['name']);
            if(!isset(
$_SESSION['Email']))
                
$_SESSION['Email'] = trim($_POST['Email']);
            if(!isset(
$_SESSION['ICQ']))
                
$_SESSION['ICQ'] = trim($_POST['ICQ']);
            if(!isset(
$_SESSION['GrafikKkarte']))
                
$_SESSION['Grafikkarte'] = trim($_POST['grafikkarte']);
            if(!isset(
$_SESSION['Prozessor']))
                
$_SESSION['Prozessor'] = trim($_POST['prozessor']);
            if(!isset(
$_SESSION['geb']))
                
$_SESSION['geb'] = sprintf('%04d-%02d-%02d',
                                           
$_POST['geb']['jahr'],
                                           
$_POST['geb']['monat'],
                                           
$_POST['geb']['tag']);
            if(!isset(
$_SESSION['join']))
                
$_SESSION['join'] = sprintf('%04d-%02d-%02d',
                                           
$_POST['join']['jahr'],
                                           
$_POST['join']['monat'],
                                           
$_POST['join']['tag']);
            if(!isset(
$_SESSION['history']))
                
$_SESSION['history'] = array();

            
// Übersicht anzeigen
            
echo("<form action=\"index.php?section=admin&amp;site=admit&amp;action=add\"");
            echo(
"    method=\"post\"");
            echo(
"    class=\"formular\">\n");
            echo(
"    <p>\n");
            echo(
"        Neuen Member hinzufügen\n");
            echo(
"    </p>\n");
            echo(
"    <ol>\n");
            echo(
"        <li>\n");
            echo(
"            Name:\n");
            echo(
htmlspecialchars($_SESSION['Name']));
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"            Email:\n");
            echo(
htmlspecialchars($_SESSION['Email']));
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"                Geburtstag:\n");
            echo(
$_SESSION['geb']);
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"                Clan beigetreten:\n");
            echo(
$_SESSION['join']);
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"                Grafikkarte:\n");
            echo(
htmlspecialchars($_SESSION['Grafikkarte']));
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"                Prozessor:\n");
            echo(
htmlspecialchars($_SESSION['Prozessor']));
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"                Laufbahn des Members:\n");
            if(
count($_SESSION['history']))
            {
                echo(
"<ol>\n");
                foreach(
$_SESSION['history'] as $key => $value)
                {
                    echo(
"<li>\n");
                    echo(
"    <input type=\"checkbox\" name=\"clans[]\"\n");
                    echo(
"           value=\"".$key."\" />\n");
                    if(empty(
$value['Link']))
                    {
                        echo(
$value['Clan']);
                    }
                    else
                    {
                        echo(
"<a href=\"".$value['Link']."\">\n");
                        echo(
$value['Clan']);
                        echo(
"</a>\n");
                    }
                    echo(
"    <br />\n");
                    echo(
"    (".$value['Von']." - ".$value['Bis'].")\n");
                    echo(
"</li>\n");
                }
            }
            else
            {
                echo(
"        Member war in keinen anderen Clan\n");
            }
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"            <input type=\"submit\" name=\"submit\"");
            echo(
"                   value=\"Clan hinzufügen\" />\n");
            if(
count($_SESSION['history']))
            {
                echo(
"<input type=\"submit\" name=\"submit\" value=\"Löschen\" />");
            }
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"            <input type=\"submit\" name=\"submit\"");
            echo(
"                   value=\"Member hinzufügen\" />\n");
            echo(
"            <input type=\"hidden\"");
            echo(
"                   name=\"".session_name()."\"");
            echo(
"                   value=\"".session_id()."\" />\n");
            echo(
"        </li>\n");
            echo(
"    </ol>\n");
            echo(
"</form>\n");
            
back2admin();

        }
    }
    
// ...
?>

Wie ihr seht ist es so ähnlich aufgebaut wie das Newsscript. Nur mit dem Unterschied, dass man die Daten nicht nachträglich ändern kann. Man müsste zum Formular zurückkehren und neue Daten eingeben. Die Scripte zum hinzufügen und löschen der bisherigen Clans sehen wie folgt aus.

<?php
    
//...
    
}
    elseif(isset(
$_POST['submit']) AND "Clan hinzufügen" == $_POST['submit'])
    {
        echo(
"<form action=\"index.php?section=admin&amp;site=member&amp;action=add\" ");
        echo(
"      method=\"post\" class=\"formular\">\n");
        echo(
"    <p>\n");
        echo(
"        Clan hinzufügen\n");
        echo(
"    </p>\n");
        echo(
"    <ol>\n");
        echo(
"        <li>\n");
        echo(
"            <label for=\"name\">Clanname</label>\n");
        echo(
"            <input type=\"text\" name=\"name\" id=\"name\" />\n");
        echo(
"        </li>\n");
        echo(
"        <li>\n");
        echo(
"            <label for=\"url\">Homepage (falls vorhanden)</label>\n");
        echo(
"            <input type=\"text\" name=\"url\" id=\"url\" />\n");
        echo(
"        </li>\n");
        echo(
"        <li>\n");
        echo(
"                Clan beigetreten\n");
        
// Formularfeld für den Tag
        
echo("                <select name=\"join[tag]\">\n");
        for(
$i=1; $i<=31; $i++)
        {
                echo(
"<option value=\"".$i."\">\n");
                echo(
$i.".\n");
                echo(
"</option>\n");
        }
        echo(
"                </select>\n");

        
// Formularfeld für den Monat
        
echo("                <select name=\"join[monat]\">\n");
        for(
$i=1; $i<=12; $i++)
        {
                echo(
"<option value=\"".$i."\">\n");
                echo(
$monate[$i].".\n");
                echo(
"</option>\n");
        }
        echo(
"                </select>\n");

        
// Formularfeld für das Jahr
        
echo("                <input type=\"text\" name=\"join[jahr]\" />\n");
        echo(
"        </li>\n");
        echo(
"        <li>\n");
        echo(
"                Clan verlassen\n");
        
// Formularfeld für den Tag
        
echo("                <select name=\"left[tag]\">\n");
        for(
$i=1; $i<=31; $i++)
        {
                echo(
"<option value=\"".$i."\">\n");
                echo(
$i.".\n");
                echo(
"</option>\n");
        }
        echo(
"                </select>\n");

        
// Formularfeld für den Monat
        
echo("                <select name=\"left[monat]\">\n");
        for(
$i=1; $i<=12; $i++)
        {
                echo(
"<option value=\"".$i."\">\n");
                echo(
$monate[$i].".\n");
                echo(
"</option>\n");
        }
        echo(
"                </select>\n");

        
// Formularfeld für das Jahr
        
echo("                <input type=\"text\" name=\"left[jahr]\" />\n");
        echo(
"        </li>\n");
        echo(
"        <li>\n");
        echo(
"            <input type=\"submit\" name=\"submit\"");
        echo(
"                   value=\"Clandaten hinzufügen\"\n");
        echo(
"            <input type=\"hidden\"");
        echo(
"                  name=\"".session_name()."\"");
        echo(
"                  value=\"".session_id()."\" />\n");
        echo(
"        </li>\n");
        echo(
"    </ol>\n");
        echo(
"</form>\n");
    }
?>

Das ist schonmal das Formular. Die Verarbeitung dieses Formular und das Löschen der angeklickten Clans werden wir woanders durchführen. Da nach dem Löschen und nach dem Formular wieder die Übersicht gezeigt werden soll, schreiben wir mit ein paar If-Abfragen die Verarbeitung vor dem Programmteil, der die Übersicht erzeugt. Da aber dieser Bereich nur erreicht werden kann, wenn die Variable $_POST['submit'] den Wert Weitere Memberdaten hinzufügen hat, müssen wir diese If-Abfrage etwas umschreiben.

<?php
    
if(isset($_POST['submit']) AND ("Weitere Memberdaten hinzufügen" == $_POST['submit'] OR
                                    
"Löschen" == $_POST['submit'] OR
                                    
"Clandaten hinzufügen" == $_POST['submit']))
    {
        
// Übersicht
    
}
?>

Nun können wir die If-Abfragen für die Verarbeitung des Formulars hinschreiben.

<?php
    
if(isset($_POST['submit']) AND /* ... */)
    {
        if(
"Löschen" == $_POST['submit'])
        {
            if(isset(
$_POST['clans']))
            {
                foreach(
$_POST['clans'] as $value)
                {
                    unset(
$_SESSION['history'][$value]);
                }
                echo(
"<p>\n");
                echo(
"    Clans gelöscht\n");
                echo(
"</p>\n");
            }
            else
            {
                echo(
"<p>\n");
                echo(
"    Keine Clans zum löschen angegeben\n");
                echo(
"</p>\n");
            }
        }
        if(
"Clan hinzufügen" == $_POST['submit'])
        {
            
$error = 0;
            if(!
checkdate($_POST['join']['monat'],
                          
$_POST['join']['tag'],
                          
$_POST['join']['jahr']))
            {
                echo(
"<p>\n");
                echo(
"    Bitte geben sie ein gültiges Datum an, wann der\n");
                echo(
"    Member diesem Clan beigetreten war.\n");
                echo(
"</p>\n");
                
$error++;
            }
            if(!
checkdate($_POST['left']['monat'],
                          
$_POST['left']['tag'],
                          
$_POST['left']['jahr']))
            {
                echo(
"<p>\n");
                echo(
"    Bitte geben sie ein gültiges Datum an, wann der\n");
                echo(
"    Member diesen Clan verlassen hat.\n");
                echo(
"</p/gt;\n");
                
$error++;
            }
            if(!
$error)
            {
                if(
mktime(0, 0, 0, $_POST['join']['monat'],
                                   
$_POST['join']['tag'],
                                   
$_POST['join']['jahr']) >
                   
mktime(0, 0, 0, $_POST['left']['monat'],
                                   
$_POST['left']['tag'],
                                   
$_POST['left']['jahr']))
                {
                    echo(
"<p>\n");
                    echo(
"    Das Beitrittsdatum kann nicht nach dem\n");
                    echo(
"    Datum des Verlassens liegen\n");
                    echo(
"</p>\n");
                }
                else
                {
                    
$tmp = array();
                    
$tmp['Clan'] = $_POST['name'];
                    
$tmp['Link'] = $_POST['url'];
                    
$tmp['Von'] = sprintf('%04d-%02d-%02d',
                                           
$_POST['join']['jahr'],
                                           
$_POST['join']['monat'],
                                           
$_POST['join']['tag']);
                    
$tmp['Bis'] = sprintf('%04d-%02d-%02d',
                                           
$_POST['left']['jahr'],
                                           
$_POST['left']['monat'],
                                           
$_POST['left']['tag']);
                    
$_SESSION['history'][] = $tmp;
                }
            }
        }
        
$_SESSION['history'] = array_values($_SESSION['history']);
        
// Schlüssellücken löschen

        // ... Übersicht
    
}
?>

Wenn man nun ein paar Clans löscht, dann wieder hinzufügt, löscht, hinzufügt, kann es sein, dass die Angaben nicht sortiert sind. Wir müssen also die Daten besser sortieren. Mit der Funktion sort können wir da nix machen. Wir müssen uns eine eigene Sortierfunktion schreiben. Dies müssen wir aber nicht komplett machen, sondern wir benutzen die Funktion usort (das u kommt wahrscheinlich von User-Sort). Für diese Funktion müssen wir eine eigene Compare-Funktion schreiben (Compare = Vergleich). Diese sieht so aus.

<?php
    
function datum_cmp($a, $b)
    {
        
// Die Beitrittsdaten vergleichen
        
return strcmp($a['Von'], $b['Von']);
    }
?>

Wir können hier zum Glück die Funktion strcmp benutzen, da zuerst nach dem Jahr, dann nach den Monat und dann nach dem Tag sortiert wird. Das geht auch deshalb weil bei einstelligen Monat und Tag-angaben eine führende Null steht. Mit dieser Funktion, die wir natürlich in der function.php definiert haben, können wir nun unser spezielles Array sortieren.

<?php
    
// ...
    
$_SESSION['history'] = array_values($_SESSION['history']);
    
usort($_SESSION['history'], 'datum_cmp');

    
// ... Übersicht
?>

Dies brauchen wir auch nur hier, denn in MySQL können wir die Daten mit ORDER BY Von ASC sortiert ausgeben.

Nun schreiben wir den Programmteil, der den Member in die Datenbank hinzufügt. Da alle Daten in der Session sind, brauchen wir auf POST oder GET-Variablen nicht reagieren, abgesehen vom Submit-Knopf.

<?php
    
// ...
    
}
    elseif(isset(
$_POST['submit']) AND "Member hinzufügen" == $_POST['sumbit'])
    {
        
$sql = "INSERT INTO
                    member
                SET
                    Name = '"
.addslashes($_SESSION['Name'])."',
                    Email = '"
.addslashes($_SESSION['Email']."',
                    Geburtstag = '"
.addslashes($_SESSION['geb']."',
                    ICQ = '"
.addslashes($_SESSION['ICQ'])."',
                    Joined = '"
.addslashes($_SESSION['join']."',
                    Prozessor = '"
.addslashes($_SESSION['Prozessor']."',
                    Grafikkarte = '"
.addslashes($_SESSION['Grafikkarte']."';";
        
$result = new Query($sql);
        if(
$result->error())
        {
            die(
"<pre>".$result->getError()."</pre>\n");
        }
        unset(
$result);
        
$id = mysql_insert_id();
        foreach(
$_SESSION['history'] as $value)
        {
            
$sql = "INSERT INTO
                        member_laufbahn
                    SET
                        MemberID = '"
.$id."',
                        Von = '"
.$value['Von']."',
                        Bis = '"
.$value['Bis']."',
                        Clan = '"
.addslashes($value['Clan'])."',
                        Clanlink = '"
.addslashes($value['Link'])."';";
            
$result = new Query($sql);
            if(
$result->error())
            {
                die(
"<pre>".$result->getError()."</pre>\n");
            }
            unset(
$result);
        }
        echo(
"<p>\n");
        echo(
"    Der Member wurde hinzugefügt.");
        echo(
"</p>\n");
        
back2admin();
    }
    
// ...
?>

Wie ihr seht habe ich die INSERT INTO ... SET schreibweise benutzt. Ich wollte mal gucken wie die so geht.

Wie bei den News erstellen wir erst den Member selber und dann seine Clan-Laufbahn. Dies machen wir deswegen, weil wir die MemberID für die Laufbahn-Einträge brauchen.

4. Member löschen

Beim löschen brauchen wir nur die entsprechenden Einträge aus der Datenbank löschen. Wie üblich erstellen wir ein Formular, wo der Admin den Member auswählen kann, denn er löschen möchte.

<?php
    
// ...
    
case 'del':
        if(isset(
$_POST['submit']) AND "Member löschen" == $_POST['submit'])
        {
            
// Datensätze löschen
        
}
        else
        {
            echo(
"<form action=\"index.php?section=admin&amp;site=member&amp;action=del\"");
            echo(
"       method=\"post\" class=\"formular\">\n");
            echo(
"    <p>\n");
            echo(
"        Member löschen\n");
            echo(
"    </p>\n");
            echo(
"    <ol>\n");
            echo(
"        <li>\n");
            echo(
"            <label for=\"name\">Member</label>\n");
            
$sql = "SELECT
                        Name,
                        ID
                    FROM
                        member
                    ORDER BY
                        Name ASC;"
;
            
$member = new Query($sql);
            if(
$member->error())
            {
                die(
"<pre>".$member->getError()."</pre>\n");
            }
            echo(
"<select id=\"name\" name=\"MemberID\">\n");
            echo(
"    <option value=\"0\">Bitte Member wählen>/option>\n");
            while(
$row = $member->fetch())
            {
                 echo(
"<option value=\"".$row['ID']."\"</option>\n");
            }
            echo(
"</select>\n");
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"            <input type=\"submit\" name=\"submit\"");
            echo(
"                  value=\"Member löschen\"\n");
            echo(
"            <input type=\"hidden\"");
            echo(
"                  name=\"".session_name()."\"");
            echo(
"                  value=\"".session_id()."\" />\n");
            echo(
"        </li>\n");
            echo(
"    </ol>\n");
            echo(
"</form>\n");
        }
        break;
?>

Der Programmteil zum löschen der Datensätze ist easy.

<?php
    
// ...
    
if(isset($_POST['submit']) AND "Member löschen" == $_POST['submit'])
    {
        if(
$_POST['MemberID'])
        {
            
$sql = "DELETE FROM
                        member_laufbahn
                    WHERE
                        MemberID = '"
.$_POST['MemberID']."';";
            
$result = new Query($sql);
            if(
$result->error())
            {
                die(
"<pre>".$error->getError()."</pre>\n");
            }
            
$sql = "DELETE FROM
                        member
                    WHERE
                        ID = '"
.$_POST['MemberID']."';";
            
$result = new Query($sql);
            if(
$result->error())
            {
                die(
"<pre>".$error->getError()."</pre>\n");
            }
            echo(
"<p>\n");
            echo(
"    Der Member wurde gelöscht\n");
            echo(
"</p>\n");
        }
        else
        {
            echo(
"<p>\n");
            echo(
"    Bitte geben sie einen gütligen Member an.\n");
            echo(
"</p>\n");
            
back2admin();
        }
    }
?>

5. Member bearbeiten

Der Programmteil, der einen Member bearbeitet, ist wieder am längste. Das ist auch der Grund warum ich ihn immer ungerne schreibe. Der ist so ähnlich aufgebaut wie das Newsscript. Deswegen kopiere ich diesen Programmteil aus dem Newsscript und änder es entsprechend ab.

<?php
    
// ...
    
case "edit":
        if(isset(
$_POST['submit']) AND "ändern" == $_POST['submit'])
        {
            echo(
"<form action=\"index.php?section=admin&amp;site=member&amp;action=edit\"");
            echo(
"      method=\"post\" class=\"formular\">\n");
            echo(
"    <p>\n");
            echo(
"        Memberdaten bearbeiten.\n");
            echo(
"    </p>\n");
            echo(
"    <ol>\n");
            
$felder = array('Name', 'Email', 'ICQ', 'Prozessor', 'Grafikkarte');
            foreach(
$felder as $value)
            {
                echo(
"        <li>\n");
                echo(
"<label for=\"".strtolower($value)."\">".$value."</label>\n");
                echo(
"                <input type=\"text\" id=\"".strtolower($value)."\"");
                echo(
" name=\"".strtolower($value)."\"");
                echo(
" value=\"".htmlspecialchars($_SESSION[$value])."\" />\n");
                echo(
"        </li>\n");
            }
            echo(
"        <li>\n");
            echo(
"                Geburtstag\n");
            
$tmpdate = explode('-', $_SESSION['geb'];
            
$Tag = (int)$tmpdate[2];
            
$Monat = (int)$tmpdate[1];
            
$Jahr = (int)$tmpdate[0];
            
// Formularfeld für den Tag
            
echo("                <select name=\"geb[tag]\">\n");
            for(
$i=1; $i<=31; $i++)
            {
                echo(
"<option value=\"".$i."\"");
                if(
$i == $Tag)
                    echo(
" selected=\"selected\"");
                echo(
">".$i.".\n");
                echo(
"</option>\n");
            }
            echo(
"                </select>\n");

            
// Formularfeld für den Monat
            
echo("                <select name=\"geb[monat]\">\n");
            for(
$i=1; $i<=12; $i++)
            {
                echo(
"<option value=\"".$i."\"");
                if(
$i == $Monat)
                    echo(
" selected=\"selected\"");
                echo(
">".$monate[$i].".\n");
                echo(
"</option>\n");
            }
            echo(
"                </select>\n");

            
// Formularfeld für das Jahr
            
echo("            <input type=\"text\" name=\"geb[jahr]\"");
            echo(
"                   value=\"".$Jahr."\" />\n");
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"                Beitrittsdatum\n");
            
$tmpdate = explode('-', $_SESSION['join'];
            
$Tag = (int)$tmpdate[2];
            
$Monat = (int)$tmpdate[1];
            
$Jahr = (int)$tmpdate[0];

            
// Formularfeld für den Tag
            
echo("                <select name=\"join[tag]\">\n");
            for(
$i=1; $i<=31; $i++)
            {
                echo(
"<option value=\"".$i."\"");
                if(
$i == $Tag)
                    echo(
" selected=\"selected\"");
                echo(
">".$i.".\n");
                echo(
"</option>\n");
            }
            echo(
"                </select>\n");

            
// Formularfeld für den Monat
            
echo("                <select name=\"join[monat]\">\n");
            for(
$i=1; $i<=12; $i++)
            {
                echo(
"<option value=\"".$i."\"");
                if(
$i == $Monat)
                    echo(
" selected=\"selected\"");
                echo(
">".$monate[$i].".\n");
                echo(
"</option>\n");
            }
            echo(
"                </select>\n");

            
// Formularfeld für das Jahr
            
echo("                <input type=\"text\" name=\"join[jahr]\"");
            echo(
"                       value=\"".$Jahr."\" />\n");

            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"            <input type=\"submit\" name=\"submit\" value=\"Memberdaten speichern\" />\n");
            echo(
"            <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n");
            echo(
"            <input type=\"hidden\" name=\"".session_name()."\"");
            echo(
"                   value=\"".session_id()."\" />\n");
            echo(
"        </li>\n");
            echo(
"    </ol>\n");
            echo(
"</form>\n");
            
back2admin();
        }
        elseif(isset(
$_POST['submit']) AND "Clan hinzufügen" == $_POST['submit'])
        {
            echo(
"<form action=\"index.php?section=admin&amp;site=member&amp;action=edit\"");
            echo(
"       method=\"post\" class=\"formular\">\n");
            echo(
"    <p>\n");
            echo(
"        Clan hinzufügen\n");
            echo(
"    </p>\n");
            echo(
"    <ol>\n");
            echo(
"        <li>\n");
            echo(
"            <label for=\"name\">Clanname</label>\n");
            echo(
"            <input type=\"text\" name=\"name\" id=\"name\" />\n");
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"            <label for=\"url\">Homepage (falls vorhanden)</label>\n");
            echo(
"            <input type=\"text\" name=\"url\" id=\"url\" />\n");
            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"            Clan beigetreten\n");
            
// Formularfeld für den Tag
            
echo("                <select name=\"join[tag]\">\n");
            for(
$i=1; $i<=31; $i++)
            {
                echo(
"<option value=\"".$i."\">\n");
                echo(
$i.".\n");
                echo(
"</option>\n");
            }
            echo(
"                </select>\n");

            
// Formularfeld für den Monat
            
echo("                <select name=\"join[monat]\">\n");
            for(
$i=1; $i<=12; $i++)
            {
                echo(
"<option value=\"".$i."\">\n");
                echo(
$monate[$i].".\n");
                echo(
"</option>\n");
            }
            echo(
"                </select>\n");

            
// Formularfeld für das Jahr
            
echo("                <input type=\"text\" name=\"join[jahr]\" />\n");

            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"            Clan verlassen\n");
            
// Formularfeld für den Tag
            
echo("                <select name=\"left[tag]\">\n");
            for(
$i=1; $i<=31; $i++)
            {
                echo(
"<option value=\"".$i."\">\n");
                echo(
$i.".\n");
                echo(
"</option>\n");
            }
            echo(
"                </select>\n");

            
// Formularfeld für den Monat
            
echo("                <select name=\"left[monat]\">\n");
            for(
$i=1; $i<=12; $i++)
            {
                echo(
"<option value=\"".$i."\">\n");
                echo(
$monate[$i].".\n");
                echo(
"</option>\n");
            }
            echo(
"                </select>\n");

            
// Formularfeld für das Jahr
            
echo("                <input type=\"text\" name=\"left[jahr]\" />\n");

            echo(
"        </li>\n");
            echo(
"        <li>\n");
            echo(
"            <input type=\"submit\" name=\"submit\"");
            echo(
"                  value=\"Clan hinzufügen\"\n");
            echo(
"            <input type=\"hidden\"");
            echo(
"                  name=\"".session_name()."\"");
            echo(
"                  value=\"".session_id()."\" />\n");
            echo(
"        </li>\n");
            echo(
"    </ol>\n");
            echo(
"</form>\n");
            
back2admin();
        }
        elseif(isset(
$_POST['submit']) AND "Member speichern" == $_POST['submit'])
        {
            
$sql = "UPDATE
                        member
                    SET
                        Name = '"
.addslashes($_SESSION['Name'])."',
                        Email = '"
.addslashes($_SESSION['Email'])."',
                        ICQ = '"
.addslashes($_SESSION['ICQ'])."',
                        Prozessor = '"
.addslashes($_SESSION['Prozessor'])."',
                        Grafikkarte = '"
.addslashes($_SESSION['Grafikkarte'])."',
                        Geburtstag = '"
.addslashes($_SESSION['geb'])."',
                        Joined = '"
.addslashes($_SESSION['join'])."'
                    WHERE
                        ID = '"
.$_SESSION['MemberID']."';";
            
$memupd = new Query($sql);
            if(
$memupd->error())
            {
                die(
"<pre>".$memupd->getError()."</pre>\n");
            }
            unset(
$memupd);
            
$sql = "DELETE FROM
                        member_laufbahn
                    WHERE
                        MemberID = '"
.$_SESSION['MemberID']."';";
            
$clandel = new Query($sql);
            if(
$clandel->error())
            {
                die(
"<pre>".$clandel->getError()."</pre>\n");
            }
            unset(
$clandel);
            foreach(
$_SESSION['history'] as $value)
            {
                
$sql = "INSERT INTO
                            member_laufbahn
                        SET
                            MemberID = '"
.$_SESSION['MemberID']."',
                            Clan = '"
.$value['Clan']."',
                            Clanurl = '"
.$value['Link']."',
                            Von = '"
.$value['Von']."',
                            Bis = '"
.$value['Bis']."';";
                
$clanins = new Query($sql);
                if(
$clanins->error())
                {
                    die(
"<pre>".$clanins->getError()."</pre>\n");
                }
            }
            echo(
"<p>\n");
            echo(
"    Member wurde bearbeitet\n");
            echo(
"</p>\n");
        }
        else
        {
            if(isset(
$_POST['submit']) AND "Member auswählen" == $_POST['submit'])
            {
                if(
$_POST['MemberID'])
                {
                    
// MemberID in der Session speichern
                    
$_SESSION['MemberID'] = $_POST['MemberID'];
                    
// Memberdaten holen
                    
$sql = "SELECT
                                Name,
                                Email,
                                ICQ,
                                Geburtstag,
                                Joined,
                                Prozessor,
                                Grafikkarte
                            FROM
                                member
                            WHERE
                                ID = '"
.$_POST['MemberID']."';";
                    
$Member = new Query($sql);
                    if(
$Member->error())
                    {
                        die(
"<pre>".$Member->getError()."</pre>\n");
                    }
                    
$row = $Member->fetch();
                    
$Member->free();
                    unset(
$Member);
                    
// Memberdaten in Session speichern
                    
$_SESSION['Name'] = $row['Name'];
                    
$_SESSION['Email'] = $row['Email'];
                    
$_SESSION['ICQ'] = $row['ICQ'];
                    
$_SESSION['Prozesor'] = $row['Prozessor'];
                    
$_SESSION['Grafikkarte'] = $row['Grafikkarte'];
                    
$_SESSION['geb'] = $row['Geburtstag'];
                    
$_SESSION['join'] = $row['Joined'];
                    
// Newslinks holen
                    
$sql = "SELECT
                                Clan,
                                Clanurl,
                                Von,
                                Bis
                            FROM
                                member_laufbahn
                            WHERE
                                MemberID = '"
.$_POST['MemberID']."'
                            ORDER BY
                                Von ASC;"
;
                    
$history = new Query($sql);
                    if(
$history->error())
                    {
                        die(
"<pre>".$history->getError()."</pre>\n");
                    }

                    
$_SESSION['history'] = array();
                    while(
$row = mysql_fetch_assoc($result))
                    {
                        
$_SESSION['links'][] = array('Clan' => $row['Clan'],
                                                     
'Link' => $row['Clanurl'],
                                                     
'Von' => $row['Von'],
                                                     
'Bis' => $row['Bis']);
                    }
                }
                else
                {
                    echo(
"<p>\n");
                    echo(
"    Bitte wählen sie einen gültigen Member aus\n");
                    echo(
"</p>\n");
                }

            }
            if(isset(
$_POST['submit']) AND "Clan hinzufügen" == $_POST['submit'])
            {
                
$error = 0;
                if(!
checkdate($_POST['join']['monat'],
                              
$_POST['join']['tag'],
                              
$_POST['join']['jahr']))
                {
                    echo(
"<p>\n");
                    echo(
"    Bitte geben sie ein gültiges Datum an, wann der\n");
                    echo(
"    Member diesem Clan beigetreten war.\n");
                    echo(
"</p>\n");
                    
$error++;
                }
                if(!
checkdate($_POST['left']['monat'],
                              
$_POST['left']['tag'],
                              
$_POST['left']['jahr']))
                {
                    echo(
"<p>\n");
                    echo(
"    Bitte geben sie ein gültiges Datum an, wann der\n");
                    echo(
"    Member diesen Clan verlassen hat.\n");
                    echo(
"</p/gt;\n");                         
                    
$error++;
                }
                if(!
$error)
                {
                    if(
mktime(0, 0, 0, $_POST['join']['monat'],
                                       
$_POST['join']['tag'],
                                       
$_POST['join']['jahr']) >
                       
mktime(0, 0, 0, $_POST['left']['monat'],
                                       
$_POST['left']['tag'],
                                       
$_POST['left']['jahr']))
                    {
                        echo(
"<p>\n");
                        echo(
"    Das Beitrittsdatum kann nicht nach dem\n");
                        echo(
"    Datum des Verlassens liegen\n");
                        echo(
"</p>\n");
                    }
                    else
                    {
                        
$tmp = array();
                        
$tmp['Clan'] = $_POST['name'];
                        
$tmp['Link'] = $_POST['url'];
                        
$tmp['Von'] = sprintf('%04d-%02d-%02d',
                                              
$_POST['join']['jahr'],
                                              
$_POST['join']['monat'],
                                              
$_POST['join']['tag']);
                        
$tmp['Bis'] = sprintf('%04d-%02d-%02d',
                                              
$_POST['left']['jahr'],
                                              
$_POST['left']['monat'],
                                              
$_POST['left']['tag']);
                        
$_SESSION['history'][] = $tmp;                                           
                    }
                }
            }
            if(isset(
$_POST['submit']) AND "Memberdaten speichern" == $_POST['submit'])
            {
                
$_SESSION['Name'] = trim($_POST['Name']);
                
$_SESSION['Email'] = trim($_POST['Email']);
                
$_SESSION['ICQ'] = trim($_POST['ICQ']);
                
$_SESSION['Prozessor'] = trim($_POST['Prozessor']);
                
$_SESSION['Grafikkarte'] = trim($_POST['Grafikkarte']);
                if(!
checkdate($_POST['geb']['monat'],
                              
$_POST['geb']['tag'],
                              
$_POST['geb']['jahr']))
                {
                    echo(
"<p>\n");
                    echo(
"    Bitte geben sie ein gültiges Geburtsdatum an.\n");
                    echo(
"</p>\n");
                }
                else
                {
                    
$_SESSION['geb'] = sprintf('%04d-%02d-%02d',
                                               
$_POST['geb']['jahr'],
                                               
$_POST['geb']['monat'],
                                               
$_POST['geb']['tag']);            
                }
                if(!
checkdate($_POST['join']['monat'],
                              
$_POST['join']['tag'],
                              
$_POST['join']['jahr']))
                {
                    echo(
"<p>\n");
                    echo(
"    Bitte geben sie ein gültiges Beitrittsdatum an.\n");
                    echo(
"</p/gt;\n");
                }
                else
                {
                    
$_SESSION['join'] = sprintf('%04d-%02d-%02d',
                                               
$_POST['join']['jahr'],
                                               
$_POST['join']['monat'],
                                               
$_POST['join']['tag']);            
                }
            }
            if(isset(
$_POST['submit']) AND "Löschen" == $_POST['submit'])
            {
                if(isset(
$_POST['clans']))
                {
                    foreach(
$_POST['clans'] as $value)
                    {
                        unset(
$_SESSION['history'][$value]);
                    }
                }
            }
            if(!isset(
$_SESSION['MemberID']))
            {
                echo(
"<form action=\"index.php?section=admin&amp;site=member&amp;action=edit\"");
                echo(
"      method=\"post\" class=\"formular\">\n");
                echo(
"    <p>\n");
                echo(
"        Member auswählen.\n");
                echo(
"    </p>\n");
                echo(
"    <ol>\n");
                echo(
"        <li>\n");
                echo(
"            <label for=\"memberid\">Member</label>\n");
                
$sql = "SELECT
                            ID,
                            Name
                        FROM
                            member
                        ORDER BY
                            Name ASC;"
;
                
$Member = new Query($sql);
                if(
$Member->error())
                {
                    die(
"<pre>".$Member->getError()."</pre>\n");
                }
                echo(
"<select id=\"memberid\" name=\"MemberID\">\n");
                echo(
"    <option value=\"0\">Bitte einen Member wählen</option>\n");
                while(
$row = $Member->fetch())
                {
                    echo(
"    <option value=\"".$row['ID']."\">\n");
                    echo(
$row['Name']."\n");
                    echo(
"    </option\n");
                }
                echo(
"</select>\n");
                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            <input type=\"submit\" name=\"submit\" value=\"Member auswählen\" />\n");
                echo(
"            <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n");
                echo(
"            <input type=\"hidden\" name=\"".session_name()."\" ");
                echo(
"                                      value=\"".session_id()."\" />\n");
                echo(
"        </li>\n");
                echo(
"    </ol>\n");
                echo(
"</form>\n");
            }
            else
            {
                
$_SESSION['history'] = array_values($_SESSION['history']);
                
usort($_SESSION['history'], 'datum_cmp');
                echo(
"<form action=\"index.php?section=admin&amp;site=admit&amp;action=edit\" ");
                echo(
"     method=\"post\" class=\"formular\">\n");
                echo(
"    <p>\n");
                echo(
"        Member bearbeiten.\n");
                echo(
"    </p>\n");
                echo(
"    <ol>\n");
                echo(
"        <li>\n");
                echo(
"            Name\n");
                echo(
htmlspecialchars($_SESSION['Name']));
                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            Email\n");
                echo(
htmlspecialchars($_SESSION['Email']));
                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            Geburtstag\n");
                echo(
$_SESSION['geb']);
                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            Clan beigetreten\n");
                echo(
$_SESSION['join']);
                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            Grafikkarte\n");
                echo(
htmlspecialchars($_SESSION['Grafikkarte']));
                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            Prozessor\n");
                echo(
htmlspecialchars($_SESSION['Prozessor']));
                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            Memberdaten\n");
                echo(
"            <input type=\"submit\" name=\"submit\"");
                echo(
"                   value=\"ändern\"\n");
                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            Laufbahn des Members\n");
                if(
count($_SESSION['history']))
                {
                    echo(
"<ol>\n");
                    foreach(
$_SESSION['history'] as $key => $value)
                    {
                        echo(
"<li>\n");
                        echo(
"    <input type=\"checkbox\" name=\"clans[]\"\n");
                        echo(
"           value=\"".$key."\" />\n");
                        if(empty(
$value['Link']))
                        {
                            echo(
$value['Clan']);
                        }
                        else
                        {
                            echo(
"<a href=\"".$value['Link']."\">\n");
                            echo(
$value['Clan']);
                            echo(
"</a>\n");
                        }
                        echo(
"        <br />\n");
                        echo(
"        (".$value['Von']." - ".$value['Bis'].")\n");
                        echo(
"</li>\n");
                    }
                    echo(
"</ol>\n");
                }
                else
                {
                    echo(
"<br />\n");
                    echo(
"        Member war in keinen anderen Clan\n");
                }

                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            <input type=\"submit\" name=\"submit\"");
                echo(
"                   value=\"Clan hinzufügen\" />\n");
                if(
count($_SESSION['history']))
                {
                        echo(
"<input type=\"submit\" name=\"submit\" value=\"Löschen\" />");
                }
                echo(
"        </li>\n");
                echo(
"        <li>\n");
                echo(
"            <input type=\"submit\" name=\"submit\"");
                echo(
"                   value=\"Member speichern\" />\n");
                echo(
"            <input type=\"hidden\"");
                echo(
"                   name=\"".session_name()."\"");
                echo(
"                   value=\"".session_id()."\" />\n");
                echo(
"        </li>\n");
                echo(
"    </ol>\n");
                echo(
"</form>\n");
             }
             
back2admin();
        }
        break;
    
// ...
?>

Somit sind wir im Adminbereich fertig.

6. Memberscript

Nun können wir die Übersicht der Member schreiben. Diese soll man mit dem Link index.php?section=member erreichen. Also müssen wir das Array $dateien wie bekannt um ein neues Element erweitern. Dies wird so erweitert, dass dann später die Datei members.php includet wird. Damit der User auch diese Datei öffnen kann, sollte man auch die Datei menu_links.php erweitern.

In der members.php werden dann alle Member alphabetisch aufgelistet. Über einen speziellen Link gelangt man an die Details der Member.

<?php
    $sql
= "SELECT
                ID,
                Name,
                DAYOFMONTH(Joined) as JoinDay,
                MONTH(Joined) as JoinMonth,
                YEAR(Joined) as JoinYear
            FROM
                member
            ORDER BY
                Name ASC;"
;
    
$member = new Query($sql);
    if(
$member->error())
    {
        die(
"<pre>".$member->getError()."</pre>\n")
    }
    if(
$member->numRows())
    {
        echo(
"<table class=\"member\">\n");
        echo(
"    <tr>\n");
        echo(
"        <th>\n");
        echo(
"            Name\n");
        echo(
"        </th>\n");
        echo(
"        <th>\n");
        echo(
"            Beigetreten\n");
        echo(
"        </th>\n");
        echo(
"        <th>\n");
        echo(
"            Details\n");
        echo(
"        </th>\n");
        echo(
"    </tr>\n");
        while(
$row = $member->fetch())
        {
            echo(
"<tr>\n");
            echo(
"    <td>\n");
            echo(
htmlspecialchars($row['Name'])."\n");
            echo(
"    </td>\n");
            echo(
"    <td>\n");
            echo(
$row['JoinDay'].". ".$monat[$row['JoinMonth']]." ".$row['JoinYear']."\n");
            echo(
"    </td>\n");
            echo(
"    <td>\n");
            echo(
"        <a href=\"index.php?section=member&amp;MemberID=".$row['ID']."\">\n");
            echo(
"            Info\n");
            echo(
"        </a>\n");
            echo(
"    </td>\n");
            echo(
"</tr>\n");
        }
        echo(
"    <tr>\n");
        echo(
"        <td colspan=\"3\">\n");
        echo(
"            &nbsp;\n");
        echo(
"        </td>\n");
        echo(
"    </tr>\n");
        echo(
"</table>\n");
        
$member->free();
        unset(
$member);
    }
    else
    {
        echo(
"<p>\n");
        echo(
"    Es sind keine Member im Clan vorhanden\n");
        echo(
"</p>\n");
    }
?>

Die Details der Member kann man über einen Link mit der Member-ID als Parameter erfahren. Auf diesen GET-Parameter reagieren wir dann mit einer If-Abfrage. Wenn dieser gesetzt und gültig ist, sollen die Details zu diesem Member angezeigt werden. Wenn der Parameter nicht gesetzt ist, soll normal die Übersicht angezeigt werden. Dies sieht dann schonmal so aus

<?php
    
if(isset($_GET['MemberID']))
    {
        
// Zeige (ggf.) die Details des Members
    
}
    else
    {
        
// Zeige Memberübersicht
    
}
?>

Das Script zum Anzeigen des Members sieht so aus. Dies ist dabei immernoch die member.php. Den Programmcode für die Memberübersicht packen wir dabei in den Else-Teil der If-Abfrage.

<?php
    
if(isset($_GET['MemberID']))
    {
        
$sql = sprintf("SELECT
                            Name,
                            Email,
                            ICQ,
                            Geburtstag,
                            Joined,
                            Prozessor,
                            Grafikkarte
                        FROM
                            member
                        WHERE
                            ID = '%u';"
, $_GET['MemberID']);
        
$member = new Query($sql);
        if(
$member->error())
        {
            die(
"<pre>".$member->getError()."</pre>\n");
        }
        if(
$daten = $member->fetch())
        {
            echo(
"<table class=\"member\">\n");
            echo(
"    <tr>\n");
            echo(
"        <th colspan=\"2\">\n");
            echo(
"            Details zu ".htmlspecialchars($daten['Name'])."\n");
            echo(
"        </th>\n");
            echo(
"    </tr>\n");
            echo(
"    <tr>\n");
            echo(
"        <td>\n");
            echo(
"            Name\n");
            echo(
"        </td>\n");
            echo(
"        <td>\n");
            echo(
"            ".htmlspecialchars($daten['Name'])."\n");
            echo(
"        </td>\n");
            echo(
"    </tr>\n");
            echo(
"    <tr>\n");
            echo(
"        <td>\n");
            echo(
"            Email\n");
            echo(
"        </td>\n");
            echo(
"        <td>\n");
            echo(
"            ".htmlspecialchars($daten['Email'])."\n");
            echo(
"        </td>\n");
            echo(
"    </tr>\n");
            echo(
"    <tr>\n");
            echo(
"        <td>\n");
            echo(
"            ICQ\n");
            echo(
"        </td>\n");
            echo(
"        <td>\n");
            echo(
"            ".$daten['ICQ']."\n");
            echo(
"        </td>\n");
            echo(
"    </tr>\n");
            echo(
"    <tr>\n");
            echo(
"        <td>\n");
            echo(
"            Geburtstag\n");
            echo(
"        </td>\n");
            echo(
"        <td>\n");
            
$tmp = explode("-", $daten['Geburtstag']);
            
$Tag = (int)$tmp[2];
            
$Monat = (int)$tmp[1];
            
$Jahr = (int)$tmp[0];
            echo(
"            ".$Tag.". ".$monate[$Monat]." ".$Jahr."\n");
            echo(
"        </td>\n");
            echo(
"    </tr>\n");
            echo(
"    <tr>\n");
            echo(
"        <td>\n");
            echo(
"            Beigetreten\n");
            echo(
"        </td>\n");
            echo(
"        <td>\n");
            
$tmp = explode("-", $daten['Joined']);
            
$Tag = (int)$tmp[2];
            
$Monat = (int)$tmp[1];
            
$Jahr = (int)$tmp[0];
            echo(
"            ".$Tag.". ".$monate[$Monat]." ".$Jahr."\n");
            echo(
"        </td>\n");
            echo(
"    </tr>\n");
            echo(
"    <tr>\n");
            echo(
"        <td>\n");
            echo(
"            Bisherigen Clans");
            echo(
"        </td>\n");
            echo(
"        <td>\n");
            
$sql = "SELECT
                        Clan,
                        Clanurl,
                        Von,
                        Bis
                    FROM
                        member_laufbahn
                    WHERE
                        MemberID = '"
.$_GET['MemberID']."'
                    ORDER BY
                        Von ASC;"
;
            
$history = new Query($sql);
            if(
$history->error())
            {
                die(
"<pre>".$history->getError()."</pre>\n");
            }
            if(
$history->numRows())
            {
                echo(
"    <ol>\n");
                while(
$row = $history->fetch())
                {
                    echo(
"    <li>\n");
                    if(
"" == trim($row['Clanurl']))
                    {
                        echo(
$row['Clan']);
                    }
                    else
                    {
                        echo(
"<a href=\"".$row['Clanurl']."\">\n");
                        echo(
$row['Clan']);
                        echo(
"</a>\n");
                    }
                    echo(
"<br />\n");

                    
$tmp = explode("-", $row['Von']);
                    
$von['Jahr'] = (int)$tmp[0];
                    
$von['Monat'] = (int)$tmp[1];
                    
$von['Tag'] = (int)$tmp[2];

                    
$tmp = explode("-", $row['Bis']);
                    
$bis['Jahr'] = (int)$tmp[0];
                    
$bis['Monat'] = (int)$tmp[1];
                    
$bis['Tag'] = (int)$tmp[2];

                    echo(
"Vom ".$von['Tag'].". ".$monate[$von['Monat']]." ".$von['Jahr']."\n");
                    echo(
"Bis ".$bis['Tag'].". ".$monate[$bis['Monat']]." ".$bis['Jahr']."\n");
                    
// Kann man HTML-mäßig bestimmt besser Strukturieren
                    
echo("    </li>\n");
                }
                echo(
"    </ol>\n");
            }
            else
            {
                echo(
"Member war vorher in keinem anderen Clan\n");
            }
            echo(
"        </td>\n");
            echo(
"    </tr>\n");
            echo(
"    <tr>\n");
            echo(
"        <th colspan=\"2\">\n");
            echo(
"            &nbsp;\n");
            echo(
"        </th>\n");
            echo(
"    </tr>\n");
            echo(
"</table>\n");
        }
        else
        {
            echo(
"<p>\n");
            echo(
"    Kein Member mit dieser ID gefunden.\n");
            echo(
"</p>\n");
        }
    }
    else
    {
        
// Zeige Memberübersicht
    
}
?>

Nun kann der Besucher sich die Member genauer angucken.

Fragen zum aktuellen Thema

  1. Was macht explode?
  2. Wie veränder ich die Spracheinstellungen für das aktuelle Script?
Was macht explode?

Die Funktion explode dient dazu, einen String in ein Array umzuwandeln. Das Gegenstück dazu ist implode.

Wie veränder ich die Spracheinstellungen für das aktuelle Script?

Mit der Funktion setlocale kann man die Spracheinstellung für das aktuelle Script verändert. Mit bestimmten Funktionen kann man dann Texte in der entsprechende Sprache ausgeben, wie z.B. die Funktion strftime.

Nach oben