Option einer Select-Box vorselektieren
Andrea
- php
0 Lithaila0 Der Martin0 Andrea0 Andrea0 Andrea
0 Der Martin
Hallo zusammen,
ich habe folgendes Problem:
ich möchte auf einer Seite eine Select-Box darstellen (z.B. Auswahl der Körpergröße) wobei aber der dazugehörige Wert aus der DB bereits vorselektiert sein soll.
Die Select-Box schaut folgendermaßen aus:
<select name="height" size="1">
<option value=""> </option>
<option value="170">5.7 " - 170 cm</option>
<option value="171">5.7 " - 171 cm</option>
<option value="172">5.7 " - 172 cm</option>
<option value="173">5.8 " - 173 cm</option>
<option value="174">5.8 " - 174 cm</option>
<option value="175">5.9 " - 175 cm</option>
<option value="176">5.9 " - 176 cm</option>
<option value="177">5.9 " - 177 cm</option>
<option value="178">5.10 " - 178 cm</option>
<option value="179">5.10 " - 179 cm</option>
<option value="180">5.11 " - 180 cm</option>
<option value="181">5.11 " - 181 cm</option>
<option value="181">5.11 " - 182 cm</option>
<option value="183">6.0 " - 183 cm</option>
<option value="184">6.0 " - 184 cm</option>
<option value="185">6.1 " - 185 cm</option>
<option value="186">6.1 " - 186 cm</option>
<option value="187">6.1 " - 187 cm</option>
<option value="188">6.2 " - 188 cm</option>
<option value="189">6.2 " - 189 cm</option>
<option value="190">6.3 " - 190 cm</option>
<option value="191">6.3 " - 191 cm</option>
<option value="192">6.3 " - 192 cm</option>
<option value="193">6.4 " - 193 cm</option>
<option value="194">6.4 " - 194 cm</option>
<option value="195">6.5 " - 195 cm</option>
<option value="196">6.5 " - 196 cm</option>
<option value="197">6.5 " - 197 cm</option>
<option value="198">6.6 " - 198 cm</option>
<option value="199">6.6 " - 199 cm</option>
<option value="200">6.7 " - 200 cm</option>
<option value="201">6.7 " - 201 cm</option>
<option value="202">6.7 " - 202 cm</option>
</select>
Die Variable, wo der aktuelle Wert drin steht heißt $personHeight.
Natürlich könnte ich jetzt in jedem option Tag vergleichen ob das zugehörige value == $personHeight, falls ja echo "selected".
Ich vermute aber, dass die Profis hier im Forum einen Alternativ-Vorschlag haben wie man so etwas eleganter lösen kann.
Habt Ihr vielleicht eine Idee?
Vielen Dank im Voraus
Liebe Grüße
Andrea
for ($i=170; $i<203; $i++) {
echo '<option value="'.$i.'"'.(($i==$personHeight)?' checked':'').'>'.$i.' cm</option>'
}
for ($i=170; $i<203; $i++) {
echo '<option value="'.$i.'"'.(($i==$personHeight)?' checked':'').'>'.$i.' cm</option>'
}
natuerlich "selected" statt "checked"
Hallo Lithaila,
for ($i=170; $i<203; $i++) {
echo '<option value="'.$i.'"'.(($i==$personHeight)?' checked':'').'>'.$i.' cm</option>'
}natuerlich "selected" statt "checked"
Danke für die schnelle Antwort.
Ich muss aber leider nicht nur die cm als Label anzeigen sondern auch noch die amerikanische Größeneinheit.
Liebe Grüße
Andrea
Hallo Andrea,
for ($i=170; $i<203; $i++) {
echo '<option value="'.$i.'"'.(($i==$personHeight)?' checked':'').'>'.$i.' cm</option>'
}natuerlich "selected" statt "checked"
Danke für die schnelle Antwort.Ich muss aber leider nicht nur die cm als Label anzeigen sondern auch noch die amerikanische Größeneinheit.
Und kannst Du das nicht selber ergänzen?
Dann wäre das vermutlich wieder ein Beweis für grottenschlechten Codier-Stil: möglichst alles in eine Zeile und bloß keine Kommentare schreiben... (das geht an Lithaila)
Entscheide Dich erstmal für eine Leitgröße, nach der Du staffeslt, sortierst, prüfst. Die andere sollte dann direkt davon abhängig sein. Und das kannst Du dann an geeigneter Stelle durch eine kleine Rechenoperation ergänzen.
LG
Chris
Hallo Andrea,
Die Select-Box schaut folgendermaßen aus:
<select name="height" size="1">
<option value=""> </option>
<option value="170">5.7 " - 170 cm</option>
<option value="171">5.7 " - 171 cm</option>
<option value="172">5.7 " - 172 cm</option>
...
Die Variable, wo der aktuelle Wert drin steht heißt $personHeight.
Natürlich könnte ich jetzt in jedem option Tag vergleichen ob das zugehörige value == $personHeight, falls ja echo "selected".
Genau darauf wird es hinauslaufen. Aber die Einträge sind doch so herrlich lückenlos und aufsteigend sortiert, dass sich eine for-Schleife förmlich aufdrängt:
for (i=170; i<=202; i++)
{ echo "<option value="$i"";
if ($i==$personHeight)
echo " selected";
$inch_decimal = $personHeight/2.54;
$ft = round($inch_decimal / 12);
$in = round($inch_decimal % 12);
echo ">$ft&apo;$in" - $i cm</option>";
}
Für die Umrechnung von Zentimeter in Fuß/Zoll setze ich als bekannt voraus, dass 1ft=12in und 1in=2.54cm ist. Die richtige Schreibweise dieser Angabe in ft/in ist übrigens nicht, wie von dir angegeben, 6.4" (denn das wären 6.4 Zoll = 16.25cm), sondern 6'4", wobei das abschließende Zoll-Zeichen auch manchmal weggelassen wird.
Habt Ihr vielleicht eine Idee?
Ob die wohl was taugt?
Ungetestet, aber selbst wenn sie irgendwo noch einen kleinen Fehler hat, wirst du den sicher beheben können. ;-)
Schönes Wochenende noch,
Martin
Hallo Der Martin,
das ist ja eine tolle Lösung.
Allerdings erscheinen bei der Umrechnung von cm nach inch noch Fehler.
Das ist mein PHP - Code:
$optionsCodeHeight = "";
for ($i=170; $i<=202; $i++)
{
$optionsCodeHeight.="<option value="".$i.""";
if ($i==$personHeight)
{
$optionsCodeHeight.=" selected";
}
$inch_decimal = $i/2.54;
$ft = round($inch_decimal / 12);
$in = round($inch_decimal % 12);
$optionsCodeHeight.=">".$ft."'".$in."" - ".$i." cm</option>"."\n";
}
Und das erscheint bei der Ausgabe: (man beachte die Umrechnung bei 171cm und bei 183cm.
Wo könnte da der Umrechnunsfehler liegen?
<option value="171">6'7" - 171 cm</option>
<option value="172">6'7" - 172 cm</option>
<option value="173">6'8" - 173 cm</option>
<option value="174">6'8" - 174 cm</option>
<option value="175">6'8" - 175 cm</option>
<option value="176">6'9" - 176 cm</option>
<option value="177">6'9" - 177 cm</option>
<option value="178">6'10" - 178 cm</option>
<option value="179">6'10" - 179 cm</option>
<option value="180">6'10" - 180 cm</option>
<option value="181">6'11" - 181 cm</option>
<option value="182">6'11" - 182 cm</option>
<option value="183">6'0" - 183 cm</option>
Liebe Grüße
Andrea
noch ne kleine Anmerkung:
Der Sprung von 198 nach 199 ist auch recht gross.
<option value="198">6'5" - 198 cm</option>
<option value="199">7'6" - 199 cm</option>
ich habs nun so gelöst:
$ft = intval($inch_decimal / 12);
Ich glaube hier lag der Fehler.
Vielen Dank nochmal
Liebe Grüße
Andrea
Hallo,
das ist ja eine tolle Lösung.
Allerdings erscheinen bei der Umrechnung von cm nach inch noch Fehler.
Hmm, mal sehen...
<option value="171">6'7" - 171 cm</option>
<option value="172">6'7" - 172 cm</option>
[...]
<option value="183">6'0" - 183 cm</option>
Junge Junge, sind die Leute groß! 6'7" wären ja schon rund zwei Meter!
$inch_decimal = $i/2.54;
$ft = round($inch_decimal / 12);
$in = round($inch_decimal % 12);
Tja, sieht aus, als hätte ich über diese drei Zeilen nicht ausreichend nachgedacht. Okay, bei der Modulo-Rechnung für den Zoll-Anteil kann nichts passieren (auch das Runden ist hier eigentlich völlig unnötig). Aber für die "Füße" sollte ich wohl besser die Nachkommastellen nach der Division einfach abschneiden, anstatt mathematisch korrekt zu runden. Also vielleicht so:
[1] $inch_decimal = round($i/2.54);
[2] $ft = floor($inch_decimal / 12);
[3] $in = $inch_decimal % 12;
Was steckt dahinter?
Nun, bei 171cm ergibt [1] zunächst 67 Zoll (ich denke, eine Rundung ist _hier_ sinnvoll). Die Division durch 12 in [2] ergibt 5.583, also 5 Fuß und irgendwas. Bei dem Zahlenwert würde round() mathematisch korrekt auf 6 aufrunden, was hier aber Quatsch ist, weil wir den Nachkommaanteil ja noch separat verarbeiten. Im Gegensatz dazu schneidet floor() die Nachkommastellen einfach ab, rundet also immer auf den nächstkleineren ganzzahligen Wert ab. Das ist das, was hier Sinn ergibt.
Sorry, nobody's perfect. War ja auch nur der erste Gedanke. ;-)
So long,
Martin