Christian Kruse: Problem mit $_SESSION

Beitrag lesen

Hallo Bernd,

Ich habe etwas umgebaut


$_SESSION['berechtigungen'] = 1;
$_SESSION['berechtigungenVorname'] = $_POST["vorname"];
$_SESSION['berechtigungenName'] = $_POST["name"];
    
header("Location: $extra");
exit();

if (isset($_SESSION['berechtigungen'])) {

	if ($_SESSION['berechtigungen'] === 1) { ?>
		<div> Berechtigungen wurden für <strong><?php echo $_SESSION['berechtigungenVorname'] . " " . $_SESSION['berechtigungenName'] ?></strong> erfolgreich aktualisiert.</div>
		<?php 
		$_SESSION['berechtigungen'] = 2;
		$_SESSION['berechtigungenVorname'] = NULL;
		$_SESSION['berechtigungenName'] = NULL;
		unset($_SESSION['berechtigungen']);
		unset($_SESSION['berechtigungenVorname']);
		unset($_SESSION['berechtigungenName']);
	}
}

Komischerweise funktioniert es jetzt 😨 Keine Ahnung was los war.

Wenn der Code oben der ist, den du tatsächlich einsetzt, dann glaube ich das nicht.

Was ich jetzt wieder nicht verstehe ist das exit(); Exit heißt doch abbrechen? Warum wird mir dann mein HTML etwas weiter unten dennoch angezeigt? Oder hat ein ein exit nichts mit der Darstellung zu tun?

Unter der Annahme, dass du deinen Code oben nur verkürzt gepostet hast und er tatsächlich funktioniert: generell hast du es ja mit zwei Aufrufen zu tun. Ein Aufruf, bei dem du deine Datenbank-Operationen machst und an dessen Ende du deinen Redirect machst. Hier muss das exit() ausgeführt werden, damit die Verarbeitung abbricht und du deine Session nicht im gleichen Durchlauf wieder zurück setzt.

Der zweite Aufruf passiert durch den Redirect. Hier hast du andere Parameter, deshalb geht der Programmablauf an deinen Datenbank-Einträgen vorbei und schickt dir die richtige Ausgabe.

Das kannst du im Netzwerk-Tab der Entwickler-Tools deines Browsers auch nachvollziehen.

Ich würde dir aber raten, die Erfolgsmeldung nicht im gleichen Script zu erzeugen in dem du auch deine Datenbank-Operationen machst. Da passieren zu schnell Fehler.

LG,
CK