Auswahlliste springt nach Aktualisierung zurück

Guten Tag,

ich habe ein Problem mit meinem Konfigurator. Ich habe 5 Auswahllisten, aus denen man die Zusammensetzung eines Wintergartens wählen kann.

Wähle ich aus allen 5 Listen den gewünschten Inhalt, drücke dann auf den Submit-Button und aktualisiere die Seite (es erscheint passende Grafik und Preis), dann erscheint alles wie gewünscht nur die Auswahllisten „springen“ wieder auf die erste Position (Bitte wählen) der Auswahl zurück.

Nachfolgend mein Code…

[PHP]

<?php $Wintergartentyp = $_POST["Wintergartentyp"];
$Abmessungen = $\_POST["Abmessungen"]; $Elementauswahl = $\_POST["Elementauswahl"]; $Farben = $\_POST["Farben"]; $Extras = $\_POST["Extras"]; ?\>  <?php if($Wintergartentyp == "Bitte wählen" || $Abmessungen == "Bitte wählen" || $Elementauswahl == "Bitte wählen" || $Farben == "Bitte wählen" || $Extras == "Bitte wählen")
{ echo "Bitte vervollständigen Sie die Auswahl"; } ?\> <?php if($Wintergartentyp == "Typ 1" && $Abmessungen == "4000 mm x 2500 mm" && $Elementauswahl == "2 flügelige Balkontür / Fenster" && $Farben == "grün / Holz dunkel" && $Extras == "Dachfenster (elektrisch)")
{ echo "Preis: 15.158,22 €"; echo "      "; echo ""; } else if($Wintergartentyp == "Typ 1" && $Abmessungen == "4000 mm x 2500 mm" && $Elementauswahl == "2 flügelige Balkontür / Fenster" && $Farben == "grün / Holz dunkel" && $Extras == "keine") { echo "Preis: 13.670,72 €"; echo "      "; echo ""; } else if($Wintergartentyp == "Typ 1" && $Abmessungen == "4000 mm x 2500 mm" && $Elementauswahl == "Hebeschiebetür / Balkontür / Fenster" && $Farben == "grün / Holz dunkel" && $Extras == "Dachfenster (elektrisch)") { echo "Preis: 15.190,35 €"; echo "      "; echo ""; } else if [... = 32 Kombinationen] ?\> [/PHP] ---\> Hier die if-Anweisungen, jeder Kombination wird ein Preis und eine bestimmte Grafik zugewiesen Wintergartentyp: <?php $abfrage = "SELECT Typ, Preis FROM typ ORDER BY Typ_ID";
$ergebnis = mysql\_query($abfrage); while($row = mysql\_fetch\_array($ergebnis, MYSQL\_ASSOC)) { if ($row["Typ"] \<\> "") { echo '' . $row ['Typ'] . ''; } } ?\>   Abmessungen: <?php $abfrage = "SELECT Abmessungen FROM abmessungen ORDER BY Abmessungen_ID";
$ergebnis = mysql\_query($abfrage); while($row = mysql\_fetch\_array($ergebnis, MYSQL\_ASSOC)) { if ($row["Abmessungen"] \<\> "") { echo '' . $row ['Abmessungen'] . ''; } } ?\> Elementauswahl: <?php $abfrage = "SELECT Elemente FROM elemente ORDER BY Elemente_ID";
$ergebnis = mysql\_query($abfrage); while($row = mysql\_fetch\_array($ergebnis, MYSQL\_ASSOC)) { if ($row["Elemente"] \<\> "") { echo '' . $row ['Elemente'] . ''; } } ?\> Farben(außen/innen): <?php $abfrage = "SELECT Farben FROM farben ORDER BY Farben_ID";
$ergebnis = mysql\_query($abfrage); while($row = mysql\_fetch\_array($ergebnis, MYSQL\_ASSOC)) { if ($row["Farben"] \<\> "") { echo '' . $row ['Farben'] . ''; } } ?\> Extras: <?php $abfrage = "SELECT Extras FROM extras ORDER BY Extras_ID";
$ergebnis = mysql\_query($abfrage); while($row = mysql\_fetch\_array($ergebnis, MYSQL\_ASSOC)) { if ($row["Extras"] \<\> "") { echo '' . $row ['Extras'] . ''; } } ?\> [/PHP] ---\> hier die 5 Auswahllisten, die ihren Inhalt aus der Datenbank in PhpMyAdmin beziehen [/PHP] --\> und der Submit-Button

Hallo Johnny2511,

Sie müssen abfragen ob der Wert den Sie aus der Datenbank laden mit dem Übergabewert übereinstimmt und dann den entsprechenden Eintrag selectieren.

if ($row[„Farben“] == $Farben)
{
echo ‚‘ . $row [‚Farben‘] . ‚‘;
}
else
{
echo ‚‘ . $row [‚Farben‘] . ‚‘;
}

Hi,

Du must noch die ausgewählte option auf „selected“ setzen.

Zum Beispiel so:

<?php $abfrage = "SELECT Typ, Preis FROM typ ORDER BY Typ_ID";
$ergebnis = mysql\_query($abfrage); while($row = mysql\_fetch\_array($ergebnis, MYSQL\_ASSOC)) { if ($row["Typ"] \<\> "") { $selected = ($Wintergartentyp==$row ['Typ'])?' selected="selected":''; echo '' . $row ['Typ'] . ''; } } ?\> Grüße, Michael

z.Bsp. so:

if ($row[„Farben“] „“)
{
echo ‚‘ . $row [‚Farben‘] . ‚‘;
}

Das für jedes der 5 Felder angeben. Dann wird immer der zuletzt übermittelte Wert ausgewählt.

Viele Erfolg.

VG
Björn

Hallo kade,

wenn ich dein Code verwende bleibt es bei dem gleichen Problem, es ändert sich nichts.
Weißt du woran das liegt?

Moin Michael,
vielen Dank für die schnelle Hilfe!
Aber wenn ich deinen Code verwende, dann bekomme ich mehrere Syntaxfehler und trotz einigem Probieren konnte ich nicht ausfindig machen woran das liegt. Hast du eine Idee woran das liegen könnte?

Hallo, der PHP-Code, welcher die Listen () darstellt, muss auch setzen, ob etwas ausgewählt wurde oder nicht.

Bei der ausgewählten Option muss stehen:

Hallo Johnny2511,

der Fehler liegt bei den Selectboxen selbst, denn dort muß man genau sagen welche Option nach dem Formularposting automatisch angewählt werden soll!

Hier ein Beispiel mit dem Wintergartentyp:

<?php $Wintergartentyp = $_POST["Wintergartentyp"];<br />?\>
.
.
.
.
<?php $abfrage = "SELECT Typ, Preis FROM typ ORDER BY Typ_ID";<br />$ergebnis = mysql\_query($abfrage);
while($row = mysql\_fetch\_array($ergebnis, MYSQL\_ASSOC))
{ 
 if ($row["Typ"] \<\> "")
 {
 $selected = isset($Wintergartentyp) && $Wintergartentyp == $row['Typ'] ? ' selected="selected"' : '';
 echo '' . $row['Typ'] . '';
 }
}
?\>

Als erstes wir überprüft ob $Wintergartentyp existiert und anschließend mit dem jeweiligen Datenbank Wert verglichen. Wenn beide Werte gleich sind, dann wird zu und automatisch der letzte Wert in der Selectbox vorausgewählt.

Grüße
Elsoregro

Hallo!

Du musst per PHP dafür sorgen, dass bei dem Eintrag aus der Datenbank der mit z.B. dem Eintrag „$Farben“ übereinstimmt nicht nur „weiss“ steht sondern „weiss“.

Praktisches Beispiel:

while($row = mysql_fetch_array($ergebnis, MYSQL_ASSOC))
{ if ($row[„Farben“] „“)
{
if ($row[‚Farben‘]==$Farben) {$sel=’ selected’} else {$sel=’’};
echo ‚‘ . $row [‚Farben‘] . ‚‘;
}
}

Das ganze natürlich für alle anderen Auswahllisten genau so, nur angepasst. Wichtig ist das Leerzeichen bei „$sel=’ selected’“, sonst schreibt er was falsch wäre.

Viele Grüße,
Markus

Hallo Johnny,
ich bin jetzt leider nicht der beste Ansprechparter, da ich schon lange nichts mehr mit PHP und HTML gemacht habe (ja, ich sollte das Profil mal ändern), aber vielleicht hilft Dir die Idee, dass man bei diesem SELECT/OPTION Konstrukt auch Werte vorselektieren kann mit SELECTED (http://de.selfhtml.org/html/formulare/anzeige/option…).
Da Du das SELECT Tag ja dynamisch aufbaust, kannst ja die Auswahl bei der erneuten Anzeige setzen.
Gruß Frank.

HI, mist. Hab ein Anführungszeichen vergessen:
’ selected=„selected“’:’’;

Zwischen dem " und : fehlte noch ein ’

Dann sollte es passen.

Ja wunderbar, danke! Jetzt gibt es auch keine Fehlermeldung mehr…
Aber es funktioniert seltsamerweise trotzdem nicht auf diese Art, nach der Auswahl und dem Abschicken springen die Auswahllisten nach der Aktualisierung noch immer auf den ersten Wert.
Hast du eine Ahnung warum das so ist?
Habe jetzt schon so viel hin und her probiert aber es funktioniert einfach nicht…wäre echt toll wenn du mir weiterhelfen kannst.
Vielen Dank.
MfG Johnny

Hallo Johnny,

bei den select-boxen muss man bei einem option-Feld den Zusatz select=„selected“ hinzufügen, um diesen Eintrag als Vorauswahl anzeigen zu lassen. Ansonsten wird immer der erste Eintrag angezeigt.

Statt:

echo ‚‘ . $row [‚Farben‘] . ‚‘;

würde z.B. folgendes funktionieren:

if ($row [‚Farben‘] == $Farben)
{
echo ‚‘;
}
else
{
echo ‚‘;
}
echo $row [‚Farben‘] . ‚‘;

Das ganze muss dann bei allen 5 Listen erfolgen.
Man kann den Quelltext noch etwas kürzen, bei einzeiligen if-Anweisungen brauch man die geschweiften Klammern nicht (es gibt auch einen nette Kurzform für sowas), aber so ist es erstmal ausführlich. Und beim Quelltext hat jeder ne eigene Meinung.

Schönen Gruß
Sven

Hi,

schau mal was an Daten übergeben wird. Das kannst Du mit print_r($_POST);
Dir das Post-Array ausgeben zu lassen. Ist im HTML nach Abschicken des Formualrs bei den Selectboxen ein select=„selected“ vorhanden? Wenn es mehrfach vorkommt, dann tut es auch nicht.

Alles weitere kann ich aber nur raten.

Grüße,
Michael

Hallo Johnny2511,

du musst noch einen value-Wert angeben.

if ($row[„Farben“] == $Farben)
{
echo „“ . $row [‚Farben‘] . „“;
}
else
{
echo „“ . $row [‚Farben‘] . „“;
}

Hallo!

Du musst der Auswahlliste noch sagen das sie was Vorwählen soll. das geht mit der Option selected=„selected“.

Wenn du die Auswahllisten alle so umschreibst sollte es funktionieren.

<?php $abfrage = "SELECT Typ, Preis FROM typ ORDER BY Typ_ID";
$ergebnis = mysql\_query($abfrage); while($row = mysql\_fetch\_array($ergebnis, MYSQL\_ASSOC)) { if ($row["Typ"] \<\> "") { $selected = ""; if ($Wintergartentyp == $row['Typ']) {$selected = " selected=selected";} echo '' . $row ['Typ'] . $selected . ''; } } ?\> Hab's nicht ausprobiert, darum keine Gewähr :wink: Gruß