Zurücknavigieren mit vorbelegten Feldern

Sobald die PHP-Sessions aktiviert sind, werden die Felder nicht mehr automatisch vom Browser vorbelegt, wenn man durch eine Feldermeldung oder anderes zu einem Formular zurückgeleitet werde.

Dies muss man nun selbst für jedes Formular programmieren. Allerdings hat dies auch den Vorteil, dass man besser auf Fehleingaben reagieren kann. (Z.B. das nicht ausgefüllte Feld gelb oder rot hinterlegen usw.)

Anhand des Pflegedialogs der Ankündigungen wird nun das Vorgehen beschrieben:

Als erstes muss man am Anfang von announcements_function.php, welches die Benutzereingaben aus dem Formular verarbeitet, diese Eingaben in einer Session-Variablen sichern. Um jetzt nicht alle $_GET oder $_POST getrennt zu bearbeiten gibt es eine PHP-Variable $_REQUEST welches die Inhalte beider Array und des $_COOKIE-Arraybeinhaltet. Der Name der $_SESSION-Variable sollte hierbei pro Formular eindeutig sein und mit _request enden, damit man weiß, was gemeint ist und sich verschiedene Formulare die Daten nicht überschreiben.

$_SESSION['announcements_request'] = $_REQUEST;

Nun muss der Inhalt in announcements_new.php verarbeitet werden.

Arbeitet man hier mit einer Tabellenklasse, so gibt es eine sehr einfache Möglichkeit die Felder wieder zu belegen:

if(isset($_SESSION['announcement_request']))
{
    foreach($_SESSION['announcement_request'] as $key => $value)
    {
        if(strpos($key, "ann_") == 0)
        {
            $announcement->setValue($key, stripslashes($value));
        }        
    }
    unset($_SESSION['announcement_request']);
}

Wichtig ist bei dieser Lösung, dass jedes Feld in dem Formular als Namen den Datenbankfeldnamen bekommt ! Ansonsten funktioniert die Zuweisung nicht korrekt.

Arbeitet man ohne Tabellenzugriffsklasse muss mann folgenden Weg nehmen:

Dazu sollte man am Besten für jedes Feld im Formular eine Variable anlegen. Falls nun $_SESSION['announcements_request'] existiert, belegt man die Variablen mit dem alten Inhalt vor, im anderen Fall werden sie einfach initialisiert und falls eine

if(isset($_SESSION['announcements_request']))
{
	$form_values = strStripSlashesDeep($_SESSION['announcements_request']);
	unset($_SESSION['announcements_request']);
}
else
{
	$form_values['headline']    = " ";
	$form_values['description'] = " ";
	$form_values['global']      = 0;	
	if ($_GET["ann_id"] != 0)
	{
	... Einlesen des Id-Satzes und vorbelegen der $field-Variablen mit den Daten aus der Datenbank ...
	}
}

Nun kann man später einfach die Formular-Felder mit den entsprechenden Variablen belegen.

Allerdings muss man sich nun noch Gedanken machen, wann man die Variable $_SESSION['announcements_request'] löscht, da sonst bei jedem Aufruf von announcements_new.php die Felder aus dieser Variablen vorbelegt werden. Sinnvoll ist dies, sobald die neue oder geänderte Ankündigung gespeichert wurde. Also in announcements_function.php. Aber auch sobald man zurücknavigiert ist und die Variable ausgelesen hat, sollte sie gelöscht werden.

unset($_SESSION['announcements_request']);

Zur Sicherheit sollte man sie aber auch noch in announcements.php löschen, da das Anlegen oder Bearbeiten auch vom Nutzer abgebrochen werden kann.