Von MySQL, Schleifen und POST-Daten ...

whisp3r

Grünschnabel
Huhu,

nachdem ich weder mit der Forumsuche noch Google etwas nützliches für mich finden konnte, versuch ich mein Glück mal in einem eigenen Post :)

Vermutlich absolut simpel, für mich aber nicht machbar:
Ich habe ein Dropdownmenu in welchem zu jeder id, die zugehörigen Datensätze aus der MySQL-Datenbank, mittels for-Schleife als <option> ausgegeben werden. Ausgewählt(selected) ist das Datenfeld mit einer id die in der Session abgespeichert ist.
Wenn ich nun eine der Datensatzscharen auswähle und per Submit bestätige brauche ich die Werte der ausgewählten Schar, als einzelne Variablen. (Um zum Beispiel die Werte in der Session zu überschreiben)

Um es vielleicht etwas verständlicher zu machen was ich überhaupt erreichen möchte, im nachfolgendem einfach mal mein bisheriger Ansatz:

PHP:
<?php
$zahlen = mysql_query("SELECT id, zahl_1, zahl_2, zahl_3, zahl_4 FROM tolle_zahlen WHERE id = '$_SESSION[id]'");
?>
<form method="POST" >
<select name="select" >
	<option selected>
			<?php echo $_SESSION['zahl_1'].$_SESSION['zahl_2'].$_SESSION['zahl_3'].$_SESSION['zahl_4']; ?>
	</option>
<?php 
$rows = mysql_num_rows($zahlen);
for($i = 1; $i<= $rows; $i++)
{
?>
	<option>
	<?php 
		$res_zahl = mysql_fetch_array($zahlen);
		$arr = array(
			"id" => $res_zahl[0], 
			"zahl_1" => $res_zahl[1], 
			"zahl_2" => $res_zahl[2], 
			"zahl_3" => $res_zahl[3], 
			"zahl_4" => $res_zahl[4]
		);
				
		echo ($arr['zahl_1'].'-'.$arr['zahl_2'].'-'.$arr['zahl_3'].'-'.$arr['zahl_4']);
 	?>
	</option>
<?php } ?>
</select>
<br>
<input type="submit" value="wechseln" name="choose">

<?php 


if ($_POST['id der ausgewälten zahlenschar'] != $_SESSION['zahl_id'])

{
$_SESSION['zahl_id']	= 	$_POST['id der ausgewälten zahlenschar'];
$_SESSION['zahl_1'] 	=	$_POST['zahl 1 der ausgewälten zahlenschar'];
$_SESSION['zahl_2'] 	= 	$_POST['zahl 2 der ausgewälten zahlenschar'];
$_SESSION['zahl_3'] 	= 	$_POST['zahl 3 der ausgewälten zahlenschar'];
$_SESSION['zahl_4'] 	= 	$_POST['zahl 4 der ausgewälten zahlenschar'];
}
?>


Ich bin wirklich für jede Hilfe Dankbar !
 
Hallo whisp3r,

ich denke die Optionen benötigen einen value-Parameter, müsste dann so aussehen:
Code:
    <?php 
        $res_zahl = mysql_fetch_array($zahlen);
        $arr = array(
            "id" => $res_zahl[0], 
            "zahl_1" => $res_zahl[1], 
            "zahl_2" => $res_zahl[2], 
            "zahl_3" => $res_zahl[3], 
            "zahl_4" => $res_zahl[4]
        );
                
        echo "<option value='.$arr['id'].'>" .$arr['zahl_1'].'-'.$arr['zahl_2'].'-'.$arr['zahl_3'].'-'.$arr['zahl_4']";
     ?>
    </option>

Das kann man z.B. hier nachlesen listen_absendewert

Gruß
Markus

edit: Dein IF um die Variablen abzuholen würde ich auch nicht ans Ende der Datei setzen, sondern ganz am Anfang. So wird die Datei aufgerufen, der alte Stand wird geladen und dann, unsichtbar für dich, die übergebenen Werte in die $_Session Variablen geschrieben.
 
Zuletzt bearbeitet:
Das hier:
PHP:
        $arr = array(
            "id" => $res_zahl[0], 
            "zahl_1" => $res_zahl[1], 
            "zahl_2" => $res_zahl[2], 
            "zahl_3" => $res_zahl[3], 
            "zahl_4" => $res_zahl[4]
        );
Kannst du weglassen. Du hast doch deine Datensätze schon in einem Array $res_zahl.
So sollte das auch funktionieren:
PHP:
        $res_zahl = mysql_fetch_array($zahlen);
        echo ($res_zahl['zahl_1'].'-'.$res_zahl['zahl_2'].'-'.$res_zahl['zahl_3'].'-'.$res_zahl['zahl_4']);
Oder es gibt einen Grund für das zweite Array den ich nicht sehe :)
 
Huhu,

ersteinmal danke für die schnelle und konstruktive Hilfe!
Das Array kann man tatsächlich weglassen, ich hatte es allerdings in der Hofnung eingebaut um per
PHP:
print_r("<pre>");
print_r($arr/$_POST[select]);
print_r("</pre>");

meinen (Logik)Fehler etwas eingrenzen zu können. Die Lösung war tatsächlich, wie Homer Simpson richtig sagte, der fehlende value-Wert in der <option>; dadurch kann ich dann zwar nur die id auslesen, gekoppelt mit einer SQL-Abfrage komm ich aber auch an die restlichen Daten.
Sicherlich nicht die optimalste Lösung, für meine Zwecke aber außreichend :)

Danke nochmals,
whisp3r​
 
Zurück