PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : session wert überschreiben


jonatha n
11.12.2004, 14:41:26
hallo

ich hab jetzt zwar schon viele beiträge mit dem gleichen thema gefunden
aber keine der lösungen funktioniert bei mir.
ich hab mehrere formulare die mit session arbeiten und am ende eine zusammenfassung anzeigen. der benutzer kann dann nochmals zurück und korrigieren. die neuen werte werden aber nicht in die session übernommen. die register_globals sind bei mir auf on.
was mache ich falsch ?
hier die entsprechende stelle:

<?
$vars = array ("SEMESTER","JAHR","ABSCHNITT","FACH","VERANSTALTUNGSART");
$vars_size = count($vars);

while($vars_size > $i) {
if(isset($_POST[pos($vars)])){
$_SESSION[pos($vars)] = $_POST[pos($vars)];
next($vars);
}
$i++;
}
?>

vielen dank
jonathan

xabbuh
11.12.2004, 16:54:27
Versuch es mal so:

<?php
$vars = array ("SEMESTER","JAHR","ABSCHNITT","FACH","VERANSTALTUNGSART");
$vars_size = count($vars);

while($vars_size > $i) {
if(isset($_POST[$vars[$i])){
$_SESSION[$vars[$i]] = $_POST[$vars[$i]];
}
$i++;
}
?>

jonatha n
11.12.2004, 18:07:25
nein klappt auch nicht

was ich nicht verstehe:
nach der zeile

$_SESSION[pos($vars)] = $_POST[pos($vars)];

sind die $_SESSION alle richtig übernommen worden
sie werden dann aber nicht in die session übernommen
oder nochmals überschrieben.

xabbuh
11.12.2004, 19:49:32
Es steht aber schon in jeder der Dateien session_start() (http://www.php.net/session_start)?

jonatha n
11.12.2004, 20:12:15
ja.
gespeichert werden sie mit session_register().
wobei ich auch mal gelesen hab dass man nur mit
dem array $_SESSION arbeiten soll, aber das klappt
bei mir auch nicht.
in jeder datei die werte aus der session braucht
oder welche hinzufügen muss steht session_start().

xabbuh
12.12.2004, 12:51:32
Original geschrieben von jonatha n
gespeichert werden sie mit session_register().
Auf session_register() sollte man verzichten. Benutze stattdessen das $_SESSION-Array.

wobei ich auch mal gelesen hab dass man nur mit
dem array $_SESSION arbeiten soll, aber das klappt
bei mir auch nicht.

Benutze trotzdem mal das Session-Array und füge diese Zeile in dein Script, in dem du die Variablen speicherst, nach dem Speichern ein:

<?php
print '<pre>';
print_r($_SESSION);
print '</pre>';
?>

jonatha n
13.12.2004, 15:43:06
funktioniert.
aber nur in der datei die unmittelbar nach dem formular folgt also:<form action="CHECK_00.php" method="post">
ausgabe in CHECK_00.php:

Array
(
[SEMESTER] => Wintersemester
[JAHR] => 05/06
[ABSCHNITT] => Hauptstudium
)

aber in den darauffolgenden scripten ist $_SESSION leer.

xabbuh
13.12.2004, 15:46:53
Steht in den Dateien, die du nach CHECK_00.php aufrufst session_start() oder überschreibst du die Werte in der Session vielleicht in CHECK_00.php?

jonatha n
13.12.2004, 16:13:12
ja in den dateien danach steht immer session_start()

hier der ursprüglichecode von CHECK_00.php.
die werte werden nicht überschrieben:
<?
header("Location:Form_01.php");
session_start();
$vars = array ("SEMESTER","JAHR","ABSCHNITT","FACH","VERANSTALTUNGSART");
$vars_size = count($vars);

if(isset($_POST['SEND0']) && $_POST['SEND0']=='yes'){
if(isset($_SESSION['SEND0']) && $_SESSION['SEND0']=='yes'){
while($vars_size > $i) {
if(isset($_POST[$vars[$i]])){
$_SESSION[$vars[$i]] = $_POST[$vars[$i]];
}
$i++;
}
}
else {
session_register("SEND0",
"SEMESTER",
"JAHR",
"ABSCHNITT",
"FACH",
"VERANSTALTUNGSART");
}
}
else{
header("Location:Form_00.php");
}
?>

xabbuh
13.12.2004, 16:26:36
Setz das header('Location: ...') in der zweiten Zeile mal hinter das session_start().

jonatha n
13.12.2004, 17:13:21
hilft auch nix.
meiner ansicht nach werden die neuen werte nochmal mit den alten aus
der session überschrieben. aber wo ?

xabbuh
13.12.2004, 20:22:05
Original geschrieben von jonatha n
hilft auch nix.
meiner ansicht nach werden die neuen werte nochmal mit den alten aus
der session überschrieben. aber wo ?
Lass dir doch mal am Anfang der CHECK_00.php die Session ausgeben.

jonatha n
13.12.2004, 22:05:39
hab ich auch schon gemacht sieht dann ungefähr so aus

-----ALTE SESSION WERTE-----
[SEMESTER] => Wintersemester
[ABSCHNITT] => Grundstudium
-----ALTE SESSION WERTE-----



dann nochmal nach der while schleife

-----NEUE SESSION WERTE-----
[SEMESTER] => Sommersemester
[ABSCHNITT] => Hauptstudium
-----NEUE SESSION WERTE-----

werden dann aber nicht in die session übernommen.

meine PHP Version ist 4.0.4pl1

hab dazu noch folgendes auf php.net gefunden.
könnte das damit was zutun haben ?

...
Wenn register_globals aktiviert ist, dann referenzieren die globalen Variablen und die Einträge von $_SESSION automatisch die selben Werte, die in der vorherigen Instanz der Session registriert wurden.

Es gibt einen Fehler in PHP 4.2.3 und früheren Versionen. Wenn Sie eine neue Session-Variable mittels session_register() registrieren, referenzieren der Eintrag im globalen Bereich und der $_SESSION-Eintrag bis zum nächsten session_start() nicht den selben Wert. D.h. eine Änderung an der neu registrierten globalen Variablen wird nicht vom $_SESSION-Eintrag widergespiegelt. Dies wurde in PHP 4.3 korrigiert.
...


danke für die hilfe

xabbuh
13.12.2004, 22:33:01
Original geschrieben von jonatha n
hab ich auch schon gemacht sieht dann ungefähr so aus

-----ALTE SESSION WERTE-----
[SEMESTER] => Wintersemester
[ABSCHNITT] => Grundstudium
-----ALTE SESSION WERTE-----



dann nochmal nach der while schleife
Also in der CHECK_00.php sehe ich keine while-Schleife.

jonatha n
13.12.2004, 23:00:57
while($vars_size > $i) {
if(isset($_POST[$vars[$i]])){
$_SESSION[$vars[$i]] = $_POST[$vars[$i]];
}
$i++;
}

xabbuh
13.12.2004, 23:34:33
Okay, das habe ich übersehen. Aber ist das denn nicht auch die Datei, die du als erst aufrufst? Da können natürlich vorher noch keine Werte in der Session gespeichert sein.

jonatha n
14.12.2004, 00:48:28
das erste formular schickt die werte an check_00.php.
falls du das meintest.

xabbuh
14.12.2004, 09:31:52
Stell mal bitte beide Scripte jeweils in ein Nopaste (http://nopaste.php-q.net). So langsam blicke ich da nicht mehr durch, was du machst.

jonatha n
14.12.2004, 11:29:14
Form_00.php (http://nopaste.php-q.net/102355)
und
CHECK_00.php (http://nopaste.php-q.net/102356)

xabbuh
14.12.2004, 12:24:28
In der Form_00.php werden doch gar keine Werte in der Session gespeichert. Es können also auch keine Sessionwerte zur Verfügung stehen. Außerdem würde ich mit $_SESSION statt $HTTP_SESSION_VARS arbeiten.
Erst in der CHECK_00.php werden Werte in die Session geschrieben. Auch hier solltest du auf session_register verzichten und das $_SESSION-Array verwenden.

jonatha n
14.12.2004, 15:01:22
In der Form_00.php werden doch gar keine Werte in der Session gespeichert. Es können also auch keine Sessionwerte zur Verfügung stehen.
sollen ja auch gar nicht. erst nachdem sie gecheckt wurden werden sie
gespeichert also in CHECK_00.php.
Form_00.php --> CHECK_00.php -->
Form_01.php --> CHECK_01.php -->
Form_02.php --> CHECK_02.php -->
Form_03.php --> CHECK_03.php -->
Form_04.php --> CHECK_04.php --> preview.php
Auch hier solltest du auf session_register verzichten und das $_SESSION-Array verwenden.
das klappt bei mir nicht.
wie schon gesagt in der ersten datei nach check_00.php gibt
es den array $_SESSION noch in der zweiten und den darauffolgenden
dateien ist $_SESSION wieder leer. obwohl in jeder datei immer session_start() steht.
ich benutzte deshalb $HTTP_SESSION_VARS weil es in der php doku
von php.net für versionen unter 4.0.6 so empfolen wird.
wenn ich nicht mit session_register() arbeite ist es mir noch
nicht gelungen werte in die session zu schreiben und sie
ein paar dateien später wieder auszulesen.

xabbuh
14.12.2004, 15:02:35
Welche PHP-Version nutzt du denn bitte schön??

jonatha n
14.12.2004, 15:16:05
wie schon gesagt PHP Version ist 4.0.4pl1

xabbuh
14.12.2004, 15:18:34
Original geschrieben von jonatha n
wie schon gesagt PHP Version ist 4.0.4pl1
Willst du nicht vielleicht mal auf eine neuere Version (z.B. 4.3.8) updaten?

jonatha n
14.12.2004, 15:22:38
gerne !
das ist aber leider nicht mein server.

xabbuh
14.12.2004, 15:38:23
Original geschrieben von jonatha n
gerne !
das ist aber leider nicht mein server.
Was ist das denn für ein Server? ;-)

Aber zurück zu deinem Problem: Zeig mal den Code von Form_01.php.

jonatha n
14.12.2004, 15:44:26
Form_01.php (http://nopaste.php-q.net/102386 )
und
CHECK_01.php (http://nopaste.php-q.net/102388 )

xabbuh
14.12.2004, 15:58:01
Hast du dir in Form_01.php $HTTP_SESSION_VARS anzeigen lassen? Erhälst du Ausgaben?
Wie sind die Einstellungen in der php.ini für session.use_cookies, session.use_only_cookies und session.use_trans_sid?

jonatha n
16.12.2004, 17:49:59
ich hab jetzt einfach den server gewechselt
und siehe da: es funktioniert !

vielen dank für deine mühe

jonathan

xabbuh
16.12.2004, 21:04:34
Keine schlechte Entscheidung ;-)
Nur mal rein Interesse halber: Welche PHP Version läuft denn auf dem neuen Server und hast du dein Script ein wenig umgeschrieben oder einfach so beibehalten?

jonatha n
17.12.2004, 14:31:39
PHP Version 4.3.8

die scripte laufen. die musste ich nicht umschreiben.

das einzige was anders ist ist die kennung für php-code
<?php
...
?>

xabbuh
17.12.2004, 17:15:44
Original geschrieben von jonatha n
PHP Version 4.3.8

die scripte laufen. die musste ich nicht umschreiben.
Wenn du jetzt schon die Version 4.3.8 nutzen kannst, würde ich das Script auch so schreiben, dass du das $_SESSION-Array nutzt und session_register() bzw. $HTTP_SESSION_VARS vergisst.


das einzige was anders ist ist die kennung für php-code
<?php
...
?>
Das ist halt das Problem, wenn man seine Scripte vorher nur für aktivierte short_open_tags geschrieben hat ;-)