Mehrere Werte speichern : SESSION

corona

Erfahrenes Mitglied
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:
Code:
<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:
Code:
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!
 
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:

PHP:
//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:

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

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

PHP:
$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:
PHP:
echo $_SESSION['lok_art1'];
 
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:
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!
 
Auswahlmenü:

PHP:
<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:
<?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:

PHP:
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'])
 
Danke noch mal. Mein Code auf der Seite 1 sieht demnach so aus für das Auswahlmenü:
PHP:
            <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
PHP:
$_SESSION['lok_art'.$x]=$auswahl;

Danke noch mal :rolleyes:
 
PHP:
foreach($_POST['lokalitaetart'] as $auswahl){ 

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

$x++; 
}

es hat das a bei lokalitaetsart gefehlt.
 
Hallo und danke.
Habe ich gemacht. Jetzt sieht mein Code so aus auf Seite 1:

PHP:
            <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

:confused:

Danke für jede weitere Hilfe,
Gruss!
 
Zurück