# Mehrere Werte speichern : SESSION



## corona (10. Oktober 2005)

Hallo,
ich habe es endlich geschafft Werte über mehrere Seiten in Variablen zu speichern und an die nächste Seite immer weiter zu geben. Sessions sei dank   

Nur eine Kleinigkeit habe ich nicht hinbekommen. Neben Textfeldern habe ich auch Mehrfachauswahl-Listen. Man kann also mehrere Sachen per Strg-Taste auswählen. Mir wird in der Variable aber nur ein Wert gespeichert.

Hier mal der Code der Seite 1:

```
<select name="art" size="3" multiple style="width:150px; height:60px;">
<option>Wert 1</option>
<option>Wert 2</option>
<option>Wert 3</option>
</select>
<?php
if (strlen($art)>0)
{
$lok_art=$art;
session_register('lok_art');
}
?>
```

Wenn ich jetzt bei Seite 2 folgendes schreibe:

```
Lokart: <?php echo $lok_art; ?><br>
```
erscheint dann immer nur der eine wert, ganz egal auch wenn ich 2 oder alle 3 ausgewählt habe.

Wer kann mir da helfen, damit alle Werte in die Variable $lok_art durch Komma getrennt gespeichert werden?

Vielen Dank,
Gruss!


----------



## nero_85 (10. Oktober 2005)

Diese Seite hat eine ganz praktische Suchfunktion. Bitte diese auch benützen!!


----------



## nero_85 (10. Oktober 2005)

Um dich nicht ganz im Regen stehen zu lassen:

1. Hat überhaupt jede Option einen wert? (<option value="wert1">)

2. Die Lösung deines Problems ist ein mehrdimensionales $_POST-Array:


```
//hierbei sind die eckigen klammern hinter 'art' wichtig
<select name="art[]" size="3" multiple style="width:150px; height:60px;">
```

3. Musst du Superglobale Arrays benutzen wie $_POST oder $_GET (für Sessions $_SESSION).

Wenn du diese Dinge alle befolgst dann rufst du die einzellnen Werte so ab:


```
//folgendes gibt 'wert1' aus:
echo $_POST['art'][1];
```

Danach kannst du ja die Werte in die Sessions schreiben lassen:


```
$x=1;
foreach($_POST['art'] as $auswahl){
     $_SESSION['lok_art'.$x]=$auswahl; //schreibt die Variable lok_art.$x(nummer der var) in die session
     $x++;
}
```

Die Variable zum wert1 rufst du dann von der Session so auf:

zb:

```
echo $_SESSION['lok_art1'];
```


----------



## corona (10. Oktober 2005)

Danke, danke für den Code. Allerdings bin ich jetzt etwas verunsichert, da der eigentliche Code etwas anders aussieht und ich nur aus Einfachheitsgründen so wie oben verfasst habe. Also hier der 1zu1-Code:

```
<td width="200" class="text11"><div align="left"> 
                <select name="lokalitaetart" size="3" multiple style="width:150px; height:60px;" value="<?php echo $lok_art; ?>">
<?php 
$result= mysql_query("SELECT sorte FROM art order by artid ASC");
while ($row = mysql_fetch_object($result)) 
{
print "<option value=".$row->primary_key.">".$row->sorte."</option>";
}
?>
</select>
<?php
if (strlen($lokalitaetart)>0)
{
$lok_art=$lokalitaetart;
session_register('lok_art');
}
?>
              </div></td>
```

Was und wo genau muss ich jetzt da ändern?

Danke und sorry dass ich es net verstanden habe  :-( 

Gruss!


----------



## nero_85 (10. Oktober 2005)

Auswahlmenü:


```
<td width="200" class="text11"><div align="left"> 
                <select name="lokalitaetart[]" size="3" multiple style="width:150px; height:60px;">
<?php 
$result= mysql_query("SELECT sorte FROM art ORDER BY artid ASC");
while ($row = mysql_fetch_object($result)) 
{
print "<option value=".$row->primary_key.">".$row->sorte."</option>";
}
?>
</select>
```

Script welches nach dem Senden des Formulars abgearbeitet wird:


```
<?php
if($_POST != NULL){

$x=1; 
foreach($_POST['loklitaetart'] as $auswahl){ 
     $_SESSION['lok_art'.$x]=$auswahl; //schreibt die Variable lok_art.$x(nummer der var) in die session 
     $x++; 
} 


}
?>
</div></td>
```
Hier werden in die Session genausoviele Variablen erzeugt, wie vor dem Absenden im Menü ausgewählt
waren. Jede dieser Variable bekam eine laufende Nummer hinten dran, und sind wie folgt im Script zu
verwenden:


```
echo "Wert1:".$_SESSION['lok_art1'];
echo "Wert2:".$_SESSION['lok_art2'];
echo "Wert3:".$_SESSION['lok_art3'];
.
.
.
```

d.h.: mit dem Array $_SESSION und der Variablenbezeichnung in Anführungsstrichen und eckigen Klammern
(z.B. für lok_art1: $_SESSION['lok_art1'])


----------



## corona (10. Oktober 2005)

Danke noch mal. Mein Code auf der Seite 1 sieht demnach so aus für das Auswahlmenü:

```
<td width="200" class="text11"><div align="left"> 
                <select name="lokalitaetart[]" size="3" multiple style="width:150px; height:60px;">
<?php 
$result= mysql_query("SELECT sorte FROM art order by artid ASC");
while ($row = mysql_fetch_object($result)) 
{
print "<option value=".$row->primary_key.">".$row->sorte."</option>";
}
?>
</select>
<?php 

if($_POST != NULL){ 

$x=1; 
foreach($_POST['loklitaetart'] as $auswahl){ 

$_SESSION['lok_art'.$x]=$auswahl;

$x++; 
} 
} 
?> 
              </div></td>
```

Folgende Fehlermeldung erscheint leider:
Parse error: parse error, unexpected T_VARIABLE in /h../admin/eintragen1.php on line 88

Line 88 ist 

```
$_SESSION['lok_art'.$x]=$auswahl;
```

Danke noch mal


----------



## nero_85 (10. Oktober 2005)

```
foreach($_POST['lokalitaetart'] as $auswahl){ 

$_SESSION['lok_art'.$x]=$auswahl; 

$x++; 
}
```

es hat das a bei lok*a*litaetsart gefehlt.


----------



## corona (10. Oktober 2005)

Stimmt. Das "a" hat gefehlt. Danke!

Der Fehler ist aber leider immer noch der gleiche auf line88 (s.o.)?


----------



## nero_85 (10. Oktober 2005)

schreib mal statt $_SESSION['..... das hier in die schleife:


```
echo $auswahl;
```


----------



## corona (10. Oktober 2005)

Hallo und danke.
Habe ich gemacht. Jetzt sieht mein Code so aus auf Seite 1:


```
<td width="200" class="text11"><div align="left"> 
                <select name="lokalitaetart[]" size="3" multiple style="width:150px; height:60px;">
<?php 
$result= mysql_query("SELECT sorte FROM art order by artid ASC");
while ($row = mysql_fetch_object($result)) 
{
print "<option value=".$row->primary_key.">".$row->sorte."</option>";
}
?>
</select>
<?php 
if($_POST != NULL){ 
$x=1; 
foreach($_POST['lokalitaetart'] as $auswahl) { 
echo $auswahl; 
} 
} 
?> 
              </div></td>
```

Zumindest erscheint keine Fehlermeldung mehr. Und wie rufe ich die Auswahl auf Seite 2 auf:
So:
Lokart: <?php echo $auswahl; ?>

und so:
echo "Wert1:".$_SESSION['lok_art1'];

jedenfalls nicht. Da wird nichts übergeben  

 

Danke für jede weitere Hilfe,
Gruss!


----------



## nero_85 (11. Oktober 2005)

Eigentlich meinte ich, dass du mir schreibst, was der Browser jetzt (also nach der Änderung) ausgibt! Nicht den Quellcode!

cya


----------



## corona (11. Oktober 2005)

Hi,
ja steht doch oben: Es erscheint keiner Fehlermeldung mehr. Auf Seite 1 ist also die Auswahlliste mit den Werten, klickt man da auf einen oder mehreren werden die auf Seite 2 nicht weiter übergeben.

Danke,
Gruss!


----------



## nero_85 (11. Oktober 2005)

Welchen action-Pfad hat den dein form-Tag?

Und wie schaut das Script auf Seite 2 aus?


----------



## corona (11. Oktober 2005)

Hallo,
mit dem Form-Tag hat es sicherlich nichts zu tun, da ich auf Seite 1 noch weitere Daten in die Session schreibe. Das klappt alles nur bis auf die Auswahlliste, die mehrere Werte speichern soll.
Hier trotzdem mal der Form-Tag:

```
<form name="start" method="post" action="<?php echo $PHP_SELF; ?>">
```

Auf Seite 2 habe ich es mit 
Lokart: <?php echo $auswahl; ?>

und 
echo "Wert1:".$_SESSION['lok_art1'];

versucht, doch nichts von dem klappt   :suspekt: 

Danke noch mal.


----------



## nero_85 (11. Oktober 2005)

ok mach mal statt deines 
	
	
	



```
echo $auswahl;
```
 in der Schleife das hier:


```
$name_var="lok_art".$x;
session_register($name_var);
$$name_var=$auswahl;
```

Wenn das auch nichts hilft Lass dir mal auf Seite eins nach dem Submit das Array $_POST ausgeben:


```
echo "<pre>";print_r($_POST['lokalitaetart']);
```


----------



## corona (11. Oktober 2005)

Hallo,
es funktioniert jetzt in sofern, dass keine Fehlermeldungen erscheinen und etwas übergeben wird. Es wird aber immer noch nur ein und nicht alle Werte ausgegeben.

Hier mal der aktuelle Code zum Verständnis:
Seite 1

```
<select name="lokalitaetart[]" size="3" multiple style="width:150px; height:60px;">
<?php 
$result= mysql_query("SELECT sorte FROM art order by artid ASC");
while ($row = mysql_fetch_object($result)) 
{
print "<option value=".$row->primary_key.">".$row->sorte."</option>";
}
?>
</select>
<?php 
if($_POST != NULL){ 
$x=1; 
foreach($_POST['lokalitaetart'] as $auswahl) { 
$name_var="lok_art".$x; 
session_register($name_var); 
$$name_var=$auswahl;
} 
} 
?>
```

Und auf Seite 2 rufe ich das ganze so auf:

```
Lokart: <?php echo $lok_art1; ?>
```

Wenn ich nur $lok_art, oder $auswahl oder $name_var mache, wird nichts übergeben. Genauso wie wenn ich $lok_art2 oder 3 mache. Bei $lok_art1 wird der Wert übergeben, egal ob es der erste Wert, zweite oder egal welcher ist. Nur wenn ich mehrere auswähle, wird trotzdem nur ein Wert übergeben und nicht alle durch Kommas getrennt  :suspekt: 

Danke für die weitere Hilfe!


----------



## nero_85 (11. Oktober 2005)

Lass dir irgenwo auf Seite 1 mal das $_POST['lokalitaetart'] ausgeben.

So wie ich es in meinem letzten Post beschrieben hab. (Formular absenden nicht vergessen)


----------



## corona (11. Oktober 2005)

Hallo,
wenn Du das meinst:

```
<?php echo $_POST['lokalitaetart']; ?>
```
dann passiert nichts. Wird also nichts ausgegeben. Das ganze ist auf Seite 1 und  Formular senden habe ich nicht vergessen.

Jetzt?


----------



## nero_85 (11. Oktober 2005)

Lad mal eine php-Datei (Name egal) auf deinen Webspace, welche folgenden Inhalt hat:


```
<?php 
 
phpinfo();
 
?>
```
 
Danach rufst du sie auf und suchst (mittels Strg+F) den begriff 'register_globals'.

Sag mir dann, was daneben in der Zeile steht (entweder 2x 'On' oder 2x 'Off').

Schön langsam bin ich am Ende meines Lateins.

//edit:
Was hast du überhaupt für eine PHP-Version Das hab ich ja noch gar nicht gefragt!! *lool*


----------



## corona (11. Oktober 2005)

Hallo,
neben register_globals steht bei mir 2x "ON". Und die Version ist "4.3.10".

Hey nero,
auch wenn wir es nicht schaffen, möchte ich mich noch mal wegen der Mühe bedanken. Cool wäre aber schon wenn wir das hinkriegen würden  

So weit davon entfernt sind wir nicht, oder? Hab im Netz die Funktion implode gefunden. Sagt Dir das was? Kann Soe uns weiter helfen?


----------



## nero_85 (11. Oktober 2005)

Ok das erklärt alles! (hoffe ich mal)


Du musst diese On's auf Off umstellen!

Dazu beachte folgendes:

1. Überprüfe ob du zugang zur php.ini-datei hast.





1.1. Wenn ja, dann machst du folgendes:öffne die php.ini Datei und durchsuche (Strg+F) diese nach folgenden ausdruck:


*register_globals*. (Wahrscheinlich musst du zweimal auf "Weitersuchen" klicken).
Danach stellst du den Wert von On auf Off. sollte dann so aussehen:

*register_globals = Off*

Danach speicherst du die Datei und probierst dein Formular nochmal aus.

​1.2. Wenn nein, dann gibst du auf Seite 1 folgendes ein:*ini_set('register_globals','Off');*


Danach probierst du dein Formular nochmal aus.

​Sollte Punkt 1.1 nicht möglich sein weil du keinen Zugang zur php.ini-Datei hast und sollte Punkt1.2 nicht funktioniert haben schreibst du überall anstatt *$_POST['lokalitaetart']* einfach* $lokalitaetart *.Ist zwar sehr unelegant aber was solls!



Zur Erklärung: 

register_globals aktiviert bzw. deaktiviert die $_POST, $_GET,....usw. -Arrays. Setz dich mit dem Thema bei Gelegenheit mal auseinander. Hier im Forum findest du bestimmt einiges und auch auf www.php.net sollten genug Infos stehen.


Sollte nach all diesen Maßnahmen immer noch nichts funktionieren, hab ich nur noch eine Lösung. Wenn die dann auch nicht geht tuts mir wirklich leid!


----------



## corona (11. Oktober 2005)

Ja, ok. Ich probiers mal aus.
Vielen Dank noch mal für Deine Mühe


----------

