Rolf B: dynamische Webseite mit php

Beitrag lesen

Hallo Henry,

...beschriftung_radio_button ... geeigneter Selektor

Das verstehe ich nicht

Aus dem, was zu zeigst, sieht es so aus als würdest Du das Label gar nicht per CSS ansprechen. Dann wäre eher die Frage, ob Du die Klasse überhaupt brauchst.

Vieles von dem, was Du zeigst, scheint aus dem Kontext gerissen, als ob Du Teile rausgelöscht hättest. Drum gehe ich lieber nicht sonderlich drauf ein.

Aber ein paar Sachen hätte ich (die Radiogroup-Sache kommt am Ende).

Warum setzt Du für das zweite div mit id="overlay" die Klasse hidden, wenn $show_form auf false steht? Warum versteckt zum Client schicken und den Ärger mit einer doppelt vorhandenen ID haben? Warum generierst Du diesen Teil überhaupt, wenn $show_form nicht gesetzt ist? Bei $message==="SUCCESS" machst Du es anders, dieser Teil wird übersprungen, wenn $message nicht "SUCCESS" enthält. Gibt es Gründe, dass Du den form-Teil immer generierst?

Und warum das Gefummel mit einem fixed-Container? Du setzt die Fenstergröße doch eh auf die Inhaltsgröße, damit müsste dieser Container komplett überflüssig sein. Gib die 3 Flexbox-Eigenschaften einfach dem Body-Element, und setze am Body noch margin:0; width: 100vw; height: 100vh; - Höhe auf 100% dürfte eher nichts nützen. height:100% setzt die Höhe auf 100% des Elternelements, und um auf Fensterhöhe zu kommen, muss dann auch das Root-Element (html) auf height:100% gesetzt werden. 100vh am Body ist einfacher.

Das Text-Eingabefeld verwendet ein Label, um die Einheit anzuzeigen? Das ist keine brauchbare Beschriftung. Ein Label muss den Zweck der Eingabe erkennen lassen, und ein Placeholder ist kein Label. Wie man das zugänglich mit der Einheit macht, weiß ich nicht genau. Das Label sollte so aussehen und vor dem input stehen (am besten drüber):

<label for="data">Deine Daten (min. <?= $valueRangeArray[0]->min ?>, max. <?= ... ?></label>
<input type="text" id="data" name="data" required min="..." max="...">

Wichtig hier:

  • Einsteuern von Werten mit <?= ?>, nicht mit <?php ?>. Ersteres erzeugt einen echo für den Wert, zweiteres führt einen PHP-Befehl aus.
  • min und max können auch am input eingestellt werden. Wirken aber meines Wissens nur für ein numerisches Input. Wenn Du Zahlen erwartest, wäre input type="numeric" eh besser.
  • das input-Element braucht die id für das Label und name für das Senden zum Server. Es braucht beides!
  • "Deine Daten" mag ausnahmweise eine geeignete Beschriftung sein, im Normalfall würde ich aber annehmen, dass das zu abstrakt ist. Welche Bedeutung hat dieser Wert? Das sollte in der Beschriftung stehen.

In deiner Timeout-Behandlung bist Du zu kompliziert, glaube ich. Hast Du Gründe für diese Fummelei? Reicht es nicht, bei Ablauf der Zeit einfach window.close() aufzurufen? Löschen des Intervalltimers und verstecken von #overlay sollte sich mit dem Schließen des Fensters erübrigen. Beim Klick auf Abbrechen hast Du das Löschen des Timers eh vergessen 😉

Bezüglich der Radiogroup: da habe ich gepennt. Radiobuttons bilden nur dann eine Gruppe, wenn alle Radiobuttons den gleichen Namen haben. Zum Beispiel name="auswahl", such dir was fachlich passenden aus. Die ID verwendest Du als ID für den Button, damit das Label funktioniert, und speichere sie auch im value-Attribut. Wobei ich nicht weiß, was es mit $valuerangeArray[$i]->set auf sich hat, das Du im Moment als value verwendest.

Jedenfalls - bei einer Radiogroup sorgt das Auswählen eines Buttons für das Abwählen der übrigen Buttons, und PHP bekommt beim Submit unter dem gemeinsamen Namen den Value des ausgewählten Buttons geschickt.

Hoffe, ich konnte weiterhelfen.

Rolf

--
sumpsi - posui - obstruxi