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