Ulimativ: Ich verzweifle noch mit den Sessions

Ich poste jetzt mal hier wild meinen abgespeckten Quelltext und beschreibe dann mein Problem.

seite1.php
-----------------------------------------------------
<?php
//Session wird gestartet
@session_start();

//diese arrays werden am ende des scripts der session hinzugefügt
//die Werte der Session werden upgedated. Sonst gibts Probleme
session_register(array("required", "optional"));
?>
<html>
...
<body>
<form name="seite1" method="post" action="seite2.php">
  <p>Ihr Firmenname: <input type="text" name="required[Firma]" value="<?echo $required[Firma]?>">
    <br>
Email: <input type="text" name="required[Email]" value="<?echo $required[Email]?>">
    <br>
Telefon: <input type="text" name="required[Telefon]" value="<?echo $required[Telefon]?>">
    <br>
Webseite: <input type="text" name="optional[Website]" value="<?echo $optional[Website]?>">
    <br>
Version
   <select name="required[Version]">
    <option value="">- - - - - - - - - - - - </option>
    <option value="1" <? if($required[Version]==1) echo "selected" ?>>Version 1</option>
    <option value="2" <? if($required[Version]==2) echo "selected" ?>>Version 2</option>
</select>
<input type="submit" value="weiter..">
</form>
</body>
</html>
----------------------------------------------------------

seite2.php
----------------------------------------------------------
<?php
//die session wird wieder aktiv
@session_start();
var_dump($HTTP_SESSION_VARS);
echo "<br><br> ";

//der formüberprüfer wird included
include("validate.php");

// die Werte der Session werden upgedated. Stimmt das so?
foreach ($HTTP_POST_VARS as $key => $elem) {
   trim($elem);
   $$key = $elem;
   }
//Daten werden überprüft
$miss=validate($required, $miss);

//bei Fehler fehlende Felder angeben und stoppen
if (is_array($miss)){
 echo "Sie haben folgende Felder nicht ausgefüllt.<br>";
 foreach($miss as $v){
   echo "- $v<br>";
 }
 echo "Gehen Sie <a href="javascript:history.back()">zurück</a> und korrigieren Sie den Fehler";
 exit();
}

//Falls alles ok, gehts weiter
?>
<html>
...
<body>
<form name="seite2" method="post" action="seite3.php">
Logo: <input type="file" name="required[Logo]" value="<?echo $required[Logo]?>">
<br>
Textfarbe: <input type="text" name="optional[Textfarbe]" value="<?echo $optional[Textfarbe]?>">
<br>
Slogan: <input type="text" name="required[Slogan]" value="<?echo $required[Slogan]?>">
<input type="submit" value="weiter...">
</form>
<a href="seite1.php">zurück</a>
</body>
</html>
----------------------------------------------------------

seite3.php

<?
//die session wird wieder aktiv
@session_start();
include("validate.php");
// die Werte der Session werden upgedated. Stimmt das so?
foreach ($HTTP_POST_VARS as $key => $elem) {
   trim($elem);
   $$key = $elem;
   }
   var_dump($required);

$miss=validate($required, $miss);
if (is_array($miss))
{
 echo "Sie haben folgende Felder nicht ausgefüllt.<br>";
 foreach($miss as $v)
 {
   echo "- $v<br>";
 }
 echo "Gehen Sie <a href="javascript:history.back()">zurück</a> und korrigieren Sie den Fehler";
 exit();
}
?>
hier wird noch ein drittes formular folgen...
-------------------------------------------------
validate.php
<?php
//überprüft formularfelder auf werte email besonders

function validate($required, $miss){
    foreach ($required as $key => $val){
          if ($key=="Email"){
             if (!ereg("^([a-zA-Z0-9.\_-]+)@([a-zA-Z0-9.-]+.[A-Za-z][A-Za-z]+)$", $val))
               $miss[]= $key;
          }
          if (empty($val)) {
   $miss[] = $key;
       }
  }
  return $miss;
}
?>
---------------------------------------------
So nun zu meinem Problem. Also der Übergang von Seite 1 zu Seite 2 klappt, wenn man nun auf Seite 2 Werte eingibt und diese submitted wird irgendwie das array $required[] in der session überschrieben. Ich denke der Fehler liegt an dieser Stelle.
foreach ($HTTP_POST_VARS as $key => $elem) {
   trim($elem);
   $$key = $elem;
}
Aber kann mir jemand von Euch Erfahrungen mit Sessions und Arrays mitteilen?
Wie update ich ein Array in einer Session anstatt es zu überschreiben?
Danke mal Uli

  1. Hi!

    var_dump($HTTP_SESSION_VARS);

    Wozu das? Damit kannst Du doch nur sehen was in dere Session gespeichert wird, oder?

    foreach ($HTTP_POST_VARS as $key => $elem) {
       trim($elem);
       $$key = $elem;
    }

    Wieso verwendest Du $$? Was bedeutet das?
    Wieso glaubst Du so den Array in der Session aktualisieren zu können?????? Soweit ich das verstehe passiert hier gar nichts, nur das die per Formular übergebenen Werte wieder in diese Variablen geschrieben werden, also was PHP eigentlich (noch) automatisch macht! Um die Sessionvariablen zu aktualisieren brauchst Du wieder

    session_register(array("required", "optional"));

    Dann müßtest Du die neuen Werte z.B. mit push() an die Arrays anhängen und es wird gespeichert. Aber ich bin weder ein Session Experte, noch einer für Arrays. Sessions bringen mich immer noch regelmäßig zur Verzweifelung :-)

    Aber zurück zum Problem - warum willst Du die variablen überhaupt über die Session übergeben, wenn Du sie gleichzeitig per POST übergibst? Mach das doch einfach am Ende?

    Grüße
    Andreas

    1. Hi!
      Weil es mich selbst interessiert habe ich gerade nochmal probiert. Was mit nicht gewußt hatte, mit $_SESSION (entspricht $HTTP_SESSION_VARS, was aber austerben wird) kannst Du direkt Variablen in der Session speichern und aktualisieren, sehr interessant wie ich finde!

      Das heißt (grob):

      Seite1-------------------------------

      session_start();
      $_SESSION["Variable1"]="Wert1";

      Seite2-------------------------------

      session_start();
      $_SESSION["Variable1"]="Wert2";

      -------------------------------------

      Das reicht schon aus um einer Variable zu registrieren, und auf der nächsten Seite zu aktualisieren!

      Das mußt Du jetzt nur noch für Arrays und Deine Seite ummodeln.

      Im Klartext:

      Genau wie die Variable1 kannst Du Deinen Array speichern, Du mußt nur auf der 2. Seite an den Array die neuen Werte anhängen, da weiß ich nicht geanu wie man das in deisem Fall am besten macht, womöglicht kannst Du $_SESSION["Array"] direkt als name bei den Inputs nehmen, aber ich weiß nicht ob das geht, ich denke eher nicht. Dann mußt Du halt mit $temp_array=$_SESSION["Array"] die eigentlichen Array aus dem $_SESSION-Array holen, und dann halt an $temp_array die Daten anhängen und am Ende wieder mit $_SESSION["Array"] = $temp_array die Sessionvariable aktualisiern.

      Oder war das jetzt falsch gedacht? Sag mal obs geklappt hat oder wie Du es gemacht hast!

      Grüße
      Andreas

      1. Etwas dumm von mir, sorry! Natürlich mußt Du die Daten erst per Formular an den Server schicken, dann kannst Du erst den Array in die Session schreiben, der Rest sollte wie beschreiben funktionieren!

        Grüße
        Andreas