Rolf B: Radiobuttons vorbelegen

Beitrag lesen

Hallo Jochen,

wenn Du mehrfach eine Radiobutton-Gruppe für "iO" / "niO" erzeugen musst, dann kann es sich anbieten, das in eine Funktion auszulagern.

Natürlich kannst Du Dich auch mit der von Felix angesprochenen Template-Technik auseinandersetzen. Aber zum einen ist das unfertig, zum anderen mag es sein, dass Dir das zu komplex ist.

Statt ARRAY() kann man übrigens auch [ ] schreiben.

Ob Du die Spaltennamen für die ioWerte als Array brauchst, hängt davon ab, ob es sich tatsächlich lohnt, die Radiogruppen in einer Schleife aufzubereiten. Hat deine Seite eine Art Checkliste, bestehend aus Frage und iO/nIO Gruppe? In dem Fall wäre eine Funktion sinnvoll, die eine vollständige Zeile der Checkliste ausgibt und man kann sich Gedanken über eine Steuertabelle für diese Checkliste machen.

Wenn sich die iO/niO-Gruppen durch das Formular verteilen, genügt eventuell eine Funktion, die nur diese beiden input-Elemente ausgibt. Beachte dabei: Der Text für ein input-Element muss als <label> ins HTML. Um dabei nicht in id-Attributen abzusaufen, bietet es sich an, das input-Element als Kind des Label zu schreiben. Also so, zum Beispiel:

<label><input type="radio" name="spalte1" value="1" checked> iO</label>
<label><input type="radio" name="spalte1" value="0"> niO</label>

Die Schreibweise 'checked="checked"' ist für XHTML notwendig. Verwendest Du das? Andernfalls reicht ein einfaches 'checked'.

Dann fehlt noch die Überlegung, wie sich das für Assistenztechniken darstellt. Je nachdem, wie einheitlich der Rest deines HTML aussieht, könnte eine Funktion für Radiogruppen auch noch den Text ausgeben, der Auskunft über die Bedeutung dieser Radiogruppe gibt. Darauf gehe ich jetzt nicht ein, dafür kenne ich deine Rahmenbedingungen zu wenig.

Eine Funktion, die das oben stehende Fragment ausgibt, könnte so aussehen:

function erzeugeIORadiogruppe($name, $wert) {
?>
<label>
  <input type="radio" name="<?= $name ?>" 
         value="1" <?= $wert == 1 ? "checked" : "" ?>> iO
</label>
<label>
  <input type="radio" name="<?= $name ?>" 
         value="0" <?= $wert == 1 ? "" : "checked" ?>> niO
</label>
<?php
}

Beachte, dass die Funktion die PHP Umgebung verlässt, um HTML auszugeben. Nur bei Bedarf wird mit <?= ... ?> mal kurz nach PHP zurückgekehrt, um einen Wert aus PHP zu holen. Vor allem, wenn man einen Editor mit Syntax-Highlighting hat, ist das deutlich besser lesbar. Das doppelte > am Ende des input-Elements sieht zwar erstmal merkwürdig aus, aber eins davon gehört zum ?> von PHP und das andere gehört zum Input-Element.

Wenn Du dein Dokument allerdings erstmal in einem String zusammenbaust, ist dieser Ansatz umständlich. Dann musst Du doch einen String erzeugen und zurückgeben (oder mit ob_start die Ausgabe abfangen - das wäre lästig).

Die vielen Zeilenumbrüche sind der Lesbarkeit im Forum geschuldet, das kannst Du nach Wunsch wieder auf eine Zeile ziehen.

Diese Funktion rufst Du überall da auf, wo Du derzeit deine input-Elemente erzeugst. Eine Vorab-Umwandlung der booleschen Werte entfällt. Die Funktion steuert das intern, an genau einer Stelle im Programm.

erzeugeIORadioGruppe("spalte1", $row["spalte1"]);
erzeugeIORadioGruppe("spalte2", $row["spalte2"]);
erzeugeIORadioGruppe("spalte3", $row["spalte3"]);
erzeugeIORadioGruppe("spalte4", $row["spalte4"]);

Sicherlich wird das so nicht allein da stehen, da muss noch PHP drum herum für weitere Texte und Strukturelemente. Aber, wie gesagt, je nach Einheitlichkeit deines HTML kann auch einiges davon von erzeugeIORadioGruppe mit erledigt werden.

Rolf

--
sumpsi - posui - obstruxi