noch eine PHP_SESSION frage.
olli
- programmiertechnik
Hallo,
ich habe folgendes Problem.
Ich habe eine Formular, wo ich auswahlkriterien für eine Datenbankabfrage mitgebe.
Diese übergebenen Variablen möchte ich in eine Session speichern und die Ergebnisse schon mal anzeigen.
Das funzt bis dahin auch.
Nur ich bekomme die Session nicht wieder leer. Oder ich habe sie leer, und bekomme Sie nicht wieder gefüllt. Ich habe es mit versucht:
session_register("Variable1","Variable2");
$Variable1=$Variable1;
$Variable2=$Variable2;
Damit bekomme ich die Variablen in die Session.
Nur dann bleiben die immer drin. Auch bei einer neuen Suchanfrage, werden die alten Werte genommen. Wenn ich vorher mir einem
if (session_register("Variable1","Variable2")) session_unset("Variable1","Variable2");
wirden die ganzen Variablen gelöscht, und meine Suchabfrage ist keine mehr, denn ich bekomme alle Sätze angezeigt.
Dann hab das aus selfphp probiert. Das funzt aber auch nicht.
session_register("Variable1","Variable2");
$Variable1=$Variable1;
$Variable2=$Variable2;
$suchanfrage = session_encode();
session_unset(Variable1,Variable2);
session_decode($suchanfrage);
echo $Variable1,$Variable2;
Ich habe immer die gleiche Variablen.
Ich hoffe ich habe mich einigermassen verständlich ausgedrückt, dass Ihr mir helfen könnt.
Gruss
Olli
Moin olli,
session_register("Variable1","Variable2");
$Variable1=$Variable1;
$Variable2=$Variable2;
hier ein Schnellschuß:
das unregister sollte so aussehen;
unset($_SESSION['Variable1']);
session_register ist nicht nötig und in der PHP.INI sollte register auto auf off sein.
Wie gesagt: Schnellschuß
Gruß
Mike
Hello Olli,
session_register("Variable1","Variable2");
$Variable1=$Variable1;
$Variable2=$Variable2;
Die alten Funktionen solltest Du nicht mehr verwenden, sondern einfach eine Zuweisung verwenden:
$_SESSION['var1'] = 'wert';
$_SESSION['var2'] = 'anderer wert';
Und das Löschen der Variablen aus der Session geth dann mit
unset($_SESSION['var1'])
aber das hatte Mike ja schon geschrieben.
Der interessantere Teil Deiner Frage zielt auf ein Konzept für eine Vorgangsverarbeitung.
Du führst eine Abrage durch, deren Ergebnis Du später noch benötigst. Erst am Ende des gesamten Vorganges sollen die Vars gelöscht werden. Es könnte aber passieren, dass der User den Vorgang nicht bis zu Ende durchführt, und die Variablen daher in der Sessiondatei vergammeln.
Da aber auch andere Vorgänge des Users in der Sessiondatei gespeichert sein können, darf auch nicht die gesamte Datei gelöscht werden. Da haben wir also ein Problem, dass durch HTTP zustande kommt: verbindungslos, zustandslos. Wenn man an diesen Protokolleigenschaften jetzt nicht mit einer Vergewaltigung etwas ändern will, dann benötigt man ein Konzept, wie man Vorgangsdaten abspeichert und von Zeit zu Zeit prüft, ob diese noch benötigt werden.
Dazu kannst Du erst einmal alle Daten eines Vorganges in einem Array binden. Außerdem merkst Du Dir, wann der Vorgang angefangen wurde und wann er zuletzt benutzt wurde. Immer, wenn Du einen neuen Vorgang beginnst, schaust Du nach, ob es noch alte gibt, deren maximale Lebensdauer überschritten ist. Das ist dann quasi eine art 'Garbage Control' im Kleinen.
Beschäftige Dich also ein bisschen mit mehrdimensionalen Arrays, lege eine sinnvolle Struktur fest und schreib Dir dann eine Funktion für das Eröffenen von Vorgängen.
Die VG-ID gibt man dann auch im jeweiligen Formular als hidden-field mit aus; dadurch kann man dann auch Multi-Posts abfangen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom