Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Auswahlbox und mySQL

10 views
Skip to first unread message

Rudolf Harras

unread,
Feb 5, 2021, 6:24:51 AM2/5/21
to
Ich habe da ein Skript übernommen wo bei einer Drop-Down-Box Werte
ausgewählt werden, die dann nach dem Absenden eines Formulares in die
mySQL-Datenbank eingetragen werden.

Das ganze sieht so aus:

<select name="auswahl" id="auswhl">

<option value="Auswahl_1" <?php if($_SESSION['auswahl']){ if
($_SESSION["auswahl"]=="Auswahl_1") echo ' selected ';}?>>Auswahl_1</option>

<option value="Auswahl_2" <?php if($_SESSION['auswahl']){ if
($_SESSION["auswahl"]=="Auswahl_2") echo ' selected ';}?>>Auswahl_2</option>

</select>

Wenn ich nun 10 andere Möglichkeiten hinzufüge, gibt es da eine
elegantere Lösung als jedesmal eine ganze Zeile anzuhängen?

Claus Reibenstein

unread,
Feb 5, 2021, 6:53:05 AM2/5/21
to
Rudolf Harras schrieb am 05.02.2021 um 12:24:

> Wenn ich nun 10 andere Möglichkeiten hinzufüge, gibt es da eine
> elegantere Lösung als jedesmal eine ganze Zeile anzuhängen?

Ja: Eine Schleife.

Gruß
Claus

Arno Welzel

unread,
Feb 6, 2021, 6:20:20 AM2/6/21
to
Rudolf Harras:
Ja. Man speichert die Auswahloptionen in einer MySQL-Tabelle und baut
die <option>-Elemente in einer Schleife auf, die die Werte aus der
Tabelle als Grundlage nimmt.


--
Arno Welzel
https://arnowelzel.de

Matthias P. Würfl

unread,
Feb 6, 2021, 6:22:23 AM2/6/21
to
Rudolf Harras schrieb am Freitag, 5. Februar 2021 um 11:24:51 UTC:
> Ich habe da ein Skript übernommen wo bei einer Drop-Down-Box Werte
> ausgewählt werden, die dann nach dem Absenden eines Formulares in die
> mySQL-Datenbank eingetragen werden.
[...]
> Wenn ich nun 10 andere Möglichkeiten hinzufüge, gibt es da eine
> elegantere Lösung als jedesmal eine ganze Zeile anzuhängen?

Funktionen, Schleifen, Arrays, etc. Programmieren halt :-) - Sag Bescheid, was Du von dem Folgenden nicht verstehst und ich kann dir sagen, wo man nachlesen kann wie es funktioniert.

Grüße, Matthias


<select name="auswahl" id="auswhl">
<?php gimmeGimmeGimmeTheAuswahlAfterMidnight(4); ?>
</select>
<?php



/**
* Gibt die Optionen für Rudolfs select aus. Erstellt dazu eine Liste von Optionen, welche alle "Option_NUMMER" heißen,
* und genau den gleichen Wert haben, wie sie auch heißen. Dann lässt diese Funktion die Funktion getSelectOptions()
* die Hauptarbeit machen. Was von dort an HTML-Code zurück kommt, wird dann hier direkt ausgegeben.
*
* @param int $wieviel Anzahl der Optionen, die man ausgegeben haben möchte
*/
function gimmeGimmeGimmeTheAuswahlAfterMidnight($wieviel){
$auswahl = array();
for($nummer=1 ; $nummer <= $wieviel ; $nummer=$nummer+1){
$auswahl["Auswahl_".$nummer] = "Auswahl_".$nummer;
}
$html = getSelectOptions($auswahl, "auswahl");
echo $html;
}



/**
* Gibt den HTML-Code für die Options eines <select>s zurück
*
* Beispiel: getSelectOptions( ['m'=>'Herr','w'=>'Frau'] , 'anrede' );
*
* @param array $options Optionen - der Array-Schlüssel ist der übergebene Wert, der Array-Wert der
* @param string $name Name des <select>
*
* @return string HTML-Code - alle Options, aber kein <select>
*/
function getSelectOptions($options, $name){
$html = '';
foreach($options as $optionKey => $optionName){
$html.= '<option value="'.$optionKey.'"';
if(isset($_SESSION[$name]) AND $_SESSION[$name] == $optionKey){
$html.= ' selected';
}
$html.= '>'.$optionName.'</option>';
$html.= "\n";
}
return $html;
}

Arno Welzel

unread,
Feb 6, 2021, 6:33:40 AM2/6/21
to
Arno Welzel:
Ergänzend: die Abfragen von Dir sind auch extrem umständlich.

Auch ein if($_SESSION['auswahl']) wird eine Warnug ergeben, wenn die
Variable nicht gesetzt. Damit ist diese Abfrage überflüssig.

Wenn darum geht, Warnungen beim Zugriff auf nicht existente Variablen zu
vermeiden, genügt das hier:

if(isset($_SESSION['auswahl']) && $_SESSION["auswahl"]=="Auswahl_1")

Und wenn man einen Wert häufiger braucht, kann man auch eine neue
Variable dafür definieren.

Als grober Entwurf - allerdings ungetestet:

----------------------------------------------------

<?php
$auswahl = '';
if (isset($_SESSION['auswahl']) {
$auswahl = $_SESSION['auswahl'];
}

// Diese Liste könnte man auch aus einer Datenbank laden
// Wichtig: beim Laden aus der Datenbank unbedingt
// htmlspecialchars() für die Ausgabe der Werte oder den Aufbau des
// Arrays verwenden!

$optionen = [
'Auswahl_1',
'Auswahl_2',
'Auswahl_3',
];

// Ausgabe der Drop-Down-Liste
?>
<select name="auswahl" id="auswhl">
<?php
foreach ($optionen as $option) {
$selected = '';
if ($auswahl === $option) {
$selected = 'selected';
}
sprintf(
'<option value="%s"%s>%s</option>',
$option,
$selected,
$option);
}
?>
</select>

----------------------------------------------------

Generell empfehle ich einen Blick in die PSR - das muss man zwar nicht
zwingend befolgen, aber es hilft, Fallstricke zu vermeiden:

<https://www.php-fig.org/psr/>

Rudolf Harras

unread,
Apr 29, 2021, 5:11:27 PM4/29/21
to
Irgendwie war das da alles viel zu kompliziert.

Folgendes hat geholfen und ist auch sehr einfach:

<?php foreach (array('Auswahl1', 'Auswahl2', 'usw.') as $k) echo
"<option value='$k'
".($_SESSION['name']==$k?'selected':'').">$k</option>";?>

Arno Welzel

unread,
May 2, 2021, 6:19:27 PM5/2/21
to
Rudolf Harras:
Ich würde wenigstens vorher prüfen, ob $_SESSION['name'] überhaupt
gesetzt ist, sonst wird Dir evtl. das Server-Log mit Warnungen geflutet.

Außerdem:

- Zwischen "value" und "selected" muss ein Leerzeichen rein.
- In HTML sind einfache Hochkommas eher unüblich.
- Der Code ist leserlicher, wenn die Prüfung als eigenes Statement
erfolgt und PSR-12 zu beachten, kann nicht schaden
(<https://www.php-fig.org/psr/psr-12/)

Das würde ich dann eher so machen:

<?php
foreach (array('Auswahl1', 'Auswahl2', 'usw.') as $k) {
echo '<option value="$k"';
if (isset($_SESSION['name']) && $_SESSION['name'] == $k) {
echo ' selected';
}
echo '>$k</option>';
}
?>
0 new messages