Optionen in Formularfeld – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self?srt=yes Optionen in Formularfeld Fri, 04 Feb 22 11:02:43 Z https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795887?srt=yes#m1795887 https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795887?srt=yes#m1795887 <p>Hallo an alle,</p> <p>ich habe ein Formular erstellt und bin gerade dabei, für das erste Feld Auswahlmöglichkeiten zu erstellen. Die Daten stammen aus einer Abfrage und werden per PHP eingebaut. Die entsprechende Auswahl wird mir auch angezeigt, nur ist die gesamte Auswahl in einer Reihe und nicht untereinander aufgelistet. Im PHP-Code habe ich schon "<br>" verwendet. Er springt dennoch nicht in die nächste Zeile.</p> <p>Das Problem liegt gegebenenfalls daran, dass ich den PHP-Code in einen einzigen <option>-Tag gesetzt habe. Was könnte ich stattdessen verwenden?</p> <p>Freu mich über Ratschläge!</p> <p>Liebe Grüße Christin</p> Optionen in Formularfeld Fri, 04 Feb 22 11:07:59 Z https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795889?srt=yes#m1795889 https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795889?srt=yes#m1795889 <p>@@Christin</p> <blockquote> <p>Freu mich über Ratschläge!</p> </blockquote> <p>Ratschlag Nummer null: Zeig, was du gemacht hast!</p> <p> LLAP</p> <div class="signature">-- <br> <em>„Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“</em><br> — Joachim Gauck über Impfgegner </div> Optionen in Formularfeld Fri, 04 Feb 22 11:38:38 Z https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795890?srt=yes#m1795890 https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795890?srt=yes#m1795890 <p>Hallo Christin,</p> <blockquote> <p>Das Problem liegt gegebenenfalls daran, dass ich den PHP-Code in einen einzigen <option>-Tag gesetzt habe. Was könnte ich stattdessen verwenden?</p> </blockquote> <p>Ich lese das mal so: Du hast deine PHP Seite so geschrieben, dass dein PHP Code alle Auswahlmöglichkeiten in ein einziges option-<strong>Element</strong> setzt.</p> <p>Der Unterschied Element und Tag ist: Ein Element wird von einem öffnenden Tag und einem schließenden Tag gebildet. Dazwischen steht der Elementinhalt. Es gibt Ausnahmen, einige Elemente haben kein schließendes Tag. <option> gehört nicht dazu.</p> <p>Für eine Auswahlliste muss jeder Auswahlwert in einem eigenen <option>-Element stehen.</p> <p>Typischerweise baut man das so auf:</p> <pre><code class="block language-php"> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>werteliste<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Auswahl: <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>label</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>select</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>werteliste<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>werteliste<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$auswahlliste</span> <span class="token keyword">as</span> <span class="token variable">$id</span><span class="token operator">=></span><span class="token variable">$auswahl</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token php language-php"><span class="token delimiter important"><?=</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token variable">$id</span><span class="token punctuation">)</span> <span class="token delimiter important">?></span></span><span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token php language-php"><span class="token delimiter important"><?=</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token variable">$auswahl</span><span class="token punctuation">)</span> <span class="token delimiter important">?></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>option</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">endforeach</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>select</span><span class="token punctuation">></span></span> </code></pre> <p><em>(Edit: htmlspecialchars hinzugefügt)</em></p> <p>Du kannst auf das value-Attribut verzichten, dann bekommst Du vom select-Element den Optionstext zurück. Das ist nicht unbedingt die schlaue Lösung; die Optionstexte könnten unhandlich sein bzw. sie sind eventuell lokalisiert. Eine ID, die man ins value-Attrbut setzt, macht Dich bei der Abfrage der Auswahl vom konkreten Text unabhängig. Ob das für dich praktikabel ist, hängt von deinen Daten ab.</p> <p>Ob Du die Schleife nun über ein Array mit keys und values laufen lassen musst, weiß ich natürlich nicht. Eventuell kommen deine Options aus einer Datenbankabfrage, oder aus einer anders gearteten Datenstruktur, dann muss die Schleife anders aussehen.</p> <p>Zu empfehlen ist auf jeden Fall die "alternative Syntax" für foreach - keine geschweiften Klammern, sondern Doppelpunkt und endforeach. Die geschweiften Klammern gehen im Getöse von ?> und <?php nämlich gerne optisch unter.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> Optionen in Formularfeld Fri, 04 Feb 22 14:08:19 Z https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795899?srt=yes#m1795899 https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795899?srt=yes#m1795899 <p>Moin Rolf,</p> <blockquote> <p>Typischerweise baut man das so auf:</p> <pre><code class="block language-php"> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>werteliste<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Auswahl: <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>label</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>select</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>werteliste<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>werteliste<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$auswahlliste</span> <span class="token keyword">as</span> <span class="token variable">$id</span><span class="token operator">=></span><span class="token variable">$auswahl</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token php language-php"><span class="token delimiter important"><?=</span><span class="token variable">$id</span><span class="token delimiter important">?></span></span><span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token php language-php"><span class="token delimiter important"><?=</span> <span class="token variable">$auswahl</span><span class="token delimiter important">?></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>option</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">endforeach</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>select</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>… unter der Annahme, dass sowohl <code>$id</code> als <code>$auswahl</code> bereits im HTML-Kontext sind, ansonsten muss natürlich der <a href="https://wiki.selfhtml.org/wiki/Programmiertechnik/Kontextwechsel" rel="nofollow noopener noreferrer">Kontextwechsel</a> berücksichtigt und <a href="https://www.php.net/manual/en/function.htmlspecialchars" rel="nofollow noopener noreferrer"><code>htmlspecialchars</code></a> verwendet werden.</p> <p>Viele Grüße<br> Robert</p> Optionen in Formularfeld Fri, 04 Feb 22 14:20:42 Z https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795901?srt=yes#m1795901 https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795901?srt=yes#m1795901 <p>Hallo Rolf,</p> <p>recht herzlichen Dank dir! Das hilft mir schon einmal weiter.</p> <p>Liebe Grüße Christin</p> Optionen in Formularfeld Fri, 04 Feb 22 14:34:06 Z https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795903?srt=yes#m1795903 https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795903?srt=yes#m1795903 <p>Hallo Robert,</p> <p>natürlich. Wenn man schnell ein Beispiel runtertippt, sollte man trotzdem auf die Basics achten…</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> Optionen in Formularfeld Tue, 08 Feb 22 12:36:49 Z https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795993?srt=yes#m1795993 https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795993?srt=yes#m1795993 <p>Hallo,</p> <p>nun muss ich doch noch einmal nachfragen, denn das Einfügen des Codes funktioniert bei mir bei dem PHP-Code, den ich bereits habe, leider nicht.</p> <p>Meine Ausgangsposition ist Folgende: Ich habe ein Formular in HTML aufgebaut und möchte nun im ersten Feld Daten aus einer Datenbank ziehen (erstellt über phpMyAdmin). Das Problem hierbei ist wohl <option>, denn es entsteht ein Einzeiler, da ich auch nur einmal <option> verwende. Ziel ist es, die einzelnen Produktnamen aufzulisten.</p> <p>Die Erweiterung mit foreach und endeach fällt mirals Laie hierbei etwas schwer.</p> <p>Ist das, was ich vorhabe, denn überhaupt möglich, bzw. stoße ich da vielleicht auch an eine Grenze eines einfachen Formulars?</p> <p>Freue mich immer über eure Hilfestellungen!</p> <p>Anbei ein Auszug meines Codes:</p> <pre><code class="block"><!-- Content --> <div class="wrapper"> <div class="col_2_3"> <form action="formular.php" method="post"> <p>D <label for="produkt">Produktauswahl</label> <select> <option> <?php $HostName = '0'; $con = @new mysqli($HostName,"root","","test"); if($con->connect_error) exit("Fehler bei Verbindung"); $Name = 'abc'; //$sql = "SELECT Produktname FROM label WHERE num = 'ABC' ORDER BY Produktname"; $sql = "SELECT Produktname FROM label WHERE num = '$Name' ORDER BY Produktname"; if($res = $con->query($sql)) { while ($dsatz = $res->fetch_assoc()) echo $dsatz["Produktname"] . "<br>"; //. $dsatz["Bezeichnung"] . "<br>"; $res->close(); } else exit("Fehler bei Abfrage"); ?> </option> </select> </p> </code></pre> Optionen in Formularfeld Tue, 08 Feb 22 12:59:41 Z https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795996?srt=yes#m1795996 https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1795996?srt=yes#m1795996 <p>Hallo,</p> <blockquote> <p>Das Problem hierbei ist wohl <option>, denn es entsteht ein Einzeiler, da ich auch nur einmal <option> verwende.</p> </blockquote> <p>Ja, weil du nur einmal <code>option</code> durch deinen Code produzierst. (Quasi hardcodiert).</p> <p>Lass PHP das option-Element mit in der Schleife erzeugen</p> <p>Gruß<br> Kalk</p> Optionen in Formularfeld Tue, 08 Feb 22 14:21:37 Z https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1796000?srt=yes#m1796000 https://forum.selfhtml.org/self/2022/feb/04/optionen-in-formularfeld/1796000?srt=yes#m1796000 <p>Hallo</p> <blockquote> <p>Ziel ist es, die einzelnen Produktnamen aufzulisten. Die Erweiterung mit foreach und endeach fällt mirals Laie hierbei etwas schwer.</p> <p>Ist das, was ich vorhabe, denn überhaupt möglich, bzw. stoße ich da vielleicht auch an eine Grenze eines einfachen Formulars?</p> </blockquote> <p>Natürlich ist es möglich. Was zu tun ist, haben dir Rolf, Robert und Tabellenkalk schon geschrieben.</p> <p>Da du mehrere Einträge in deinem Select haben willst, und zu jedem einzelnen Eintrag ein eigenes Option-Element gehört, musst du nur deine Logik anpassen, die im deinem Beispielcode einem Fehlschluss folgt.</p> <p>Ich verkürze mal:</p> <blockquote> <pre><code class="block"><label for="produkt">Produktauswahl</label> <select> <option> <?php // Erstellung des Datenbank-Queries und dann … if($res = $con->query($sql)) { while ($dsatz = $res->fetch_assoc()) echo $dsatz["Produktname"] . "<br>"; //. $dsatz["Bezeichnung"] . "<br>"; $res->close(); } else exit("Fehler bei Abfrage"); ?> </option> </select> </code></pre> </blockquote> <p>Du erstellst <strong>ein</strong> Option-Element <strong>für alle</strong> Ergebniszeilen deiner Abfrage, wo du doch <strong>für jedes einzelne Ergebnis</strong> auch jeweils <strong>ein eigenes</strong> Option-Element benötigst. <em>Das</em> ist der Logikfehler, der (neben anderen Fehlern) behoben werden muss.</p> <pre><code class="block language-php"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>produkt<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Produktauswahl<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>label</span><span class="token punctuation">></span></span> <span class="token comment"><!-- Wenn das Label für das Select vorgesehen ist und dieses nicht umschließt, verweist das for-Attribut auf die ID des Selects. Weiterhin braucht das Select einen Namen, damit sein Wert bei der Auswertung der Eingabe wiedererkannt werden kann. Der kann identisch mit der ID sein. --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>select</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>produkt<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>produkt<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">// Erstellung des Datenbank-Queries und dann …</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$res</span> <span class="token operator">=</span> <span class="token variable">$con</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$dsatz</span> <span class="token operator">=</span> <span class="token variable">$res</span><span class="token operator">-></span><span class="token function">fetch_assoc</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Aufbereitung der aus der Datenbank stammenden Wertes</span> <span class="token comment">// für die Ausgabe in HTML mit htmlspecialchars</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"<option>"</span><span class="token operator">.</span> <span class="token function">htmlspecialcars</span><span class="token punctuation">(</span><span class="token variable">$dsatz</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Produktname"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">.</span><span class="token string double-quoted-string">"</option>"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//echo $dsatz["Produktname"] . "<br>";</span> <span class="token comment">//. $dsatz["Bezeichnung"] . "<br>";</span> <span class="token variable">$res</span><span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Du brauchst hier keinen Else-Zweig.</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>select</span><span class="token punctuation">></span></span> </code></pre> <p>Falls sich der mit dem Formular zu übergebende Wert von jenem, der im Formular <em>angezeigt</em> wird, unterscheiden soll (zum Beispiel Übergabe: ID des Produkts, Anzeige: Name des Produkts), kann der zu übergebende Wert in das Value-Attribut des Option-Elements verpackt werden. Damit ist das Formularelement sowohl menschenlesbar (Produktname) als auch dessen Auswahl einfach maschinenverarbeitbar (Produkt-ID).</p> <pre><code class="block language-php"><span class="token keyword">echo</span> <span class="token string double-quoted-string">"<option value='"</span><span class="token operator">.</span> <span class="token function">htmlspecialcars</span><span class="token punctuation">(</span><span class="token variable">$dsatz</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"ProduktID"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">.</span><span class="token string double-quoted-string">"'>"</span><span class="token operator">.</span> <span class="token function">htmlspecialcars</span><span class="token punctuation">(</span><span class="token variable">$dsatz</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"Produktname"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">.</span><span class="token string double-quoted-string">"</option>"</span><span class="token punctuation">;</span> </code></pre> <p>Es gibt aber noch weiteres Verbesserungspotential. So wird das Select auf jeden Fall ins Formular eingebettet, auch wenn es eventuell überhaupt keine auswähöbaren Datensätze darin gibt. Weiterhin ist das Hin-und-Herspringen zwischen HTML und PHP-Kontext nicht so der Bringer. Es gibt mehrere Möglichkeiten, damit umzugehen.</p> <p>Zum Beispiel könntest du statt des bisher verwendeten Weges mit HTML im PHP-Kontext auch die alternative Syntax mit primärer Verwendung des HTML-Kontexts und darin eingebettetem PHP gehen.</p> <pre><code class="block language-html"><span class="token prolog"><?php // Erstellung des Datenbank-Queries und dann … if ($res = $con->query($sql)): ?></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>produkt<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Produktauswahl<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>label</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>select</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>produkt<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>produkt<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token prolog"><? while ($dsatz = $res->fetch_assoc()): ?></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><?php echo htmlspecialcars($dsatz[<span class="token punctuation">"</span></span><span class="token attr-name">ProduktID"]);</span> <span class="token attr-name">?</span><span class="token punctuation">></span></span>"><span class="token prolog"><?php echo htmlspecialcars($dsatz["Produktname"]); ?></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>option</span><span class="token punctuation">></span></span> <span class="token prolog"><?php endwhile; ?></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>select</span><span class="token punctuation">></span></span> <span class="token prolog"><?php $res->close(); // weiterer Code ?></span> </code></pre> <p>Tschö, Auge</p> <div class="signature">-- <br> 200 ist das neue 35. </div>