dedlfix: Formular mit Select

Beitrag lesen

echo $begrüßung;

» Noch übersichtlicher (und richtiger):
» foreach ($array as $bla) {printf('<option value="%s"%s>%s</option>', htmlspecialchars($bla), »»(($_POST['irgendwas'] == $bla) ? ' selected="selected"' : ''), htmlspecialchars($bla));}
Ich hab angenommen, $array _ist_ auch ein Array und _deshalb_ gefragt, wo das plötzlich herkommt und wann wo welche Werte da reingekommen sind. (Was ich übrigens auch jetzt noch nicht weiß.)

Ja, $array ist ein Array, aber das ist ein anderes Thema als das printf(). printf() hast du ja nun vermutlich verstanden, das arbeitet mit Strings und bekommt auch nur solche übergeben. Das Array ist für das foreach gedacht, damit foreach da durchlaufen kann und für jedes Element des Arrays seinen Schleifenkörper (hier bestehend aus dem printf()) ausführen kann.

Der Sinn des Arrays ist, statt den vielen Wiederholungen des option-Elements nur die Werte in einer Struktur (Array) abzulegen und PHP die Fleißarbeit zu überlassen. Dies hat, wie man hier schön sieht, den Vorteil, dass man bei Erweiterungen (selected oder nicht) den dafür nötigen Code nicht ebenfalls zigfach notieren muss sondern nur einmal im Schleifenkörper.

» Diese Schreibweise sehe ich als übersichtlicher an, weil damit der String als ein Teil notiert werden kann und nicht ständig unterbrochen wird, um die andere Teile einzufügen.
Mich erinnert das ein wenig an die 'Prepared Statements' bei der Arbeit mit 'mysqli'. Auch, wenn es natürlich was völlig anderes ist -  von der Logik/Systematik kann man das in etwa vergleichen, oder?

Ja, auf den ersten Blick schon. Prepared Statements fügen aber im Gegensatz zu (s)printf() die Werte nicht in das SQL-Statement ein sondern transportieren sie extra zum Server. Auch der fügt die Werte nicht dort ein, denn dann müsste er ja das Statement immer wieder neu parsen und das will man ja durch die P.S. vermeiden. (Eigentlich sind sie ja für die wiederholte Ausführung eines Statements mit unterschiedlichen Werten vorgesehen.)

echo "$verabschiedung $name";