Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP/HTML] Best-Practice: Hidden-Felder ersetzen? (https://www.delphipraxis.net/176420-%5Bphp-html%5D-best-practice-hidden-felder-ersetzen.html)

Angel4585 4. Sep 2013 08:09

[PHP/HTML] Best-Practice: Hidden-Felder ersetzen?
 
Hallo!

Ich arbeite gerade mit PHP an einem Formular.
Es werden mehrere Zeilen ausgegeben und es gibt in jeder Zeile zwei Entscheidungsmöglichkeiten A und B.
Das ganze wird per POST an den Server geschickt.
Damit man weis welche Entscheidung getroffen wurde, wird die ID in ein hidden-Feld geschrieben und beim drücken auf einen der Button mitgeschickt.
Auf dem Server wird die ID natürlich nochmal validiert und verifiziert.

Ich bin jetzt kein PHP/HTML/JavaScript-Profi, aber das sieht für mich nicht schön aus.

Wie würdet Ihr so etwas lösen?
Kann man Hidden-Felder irgendwie ersetzen?

WladiD 4. Sep 2013 08:46

AW: [PHP/HTML] Best-Practice: Hidden-Felder ersetzen?
 
Das ist gängige Praxis, irgendwelche IDs in Hidden-Feldern zu "verstecken". Eine weitere Möglichkeit ist, diese in die Action-URI als Get-Parameter zu packen:
Code:
<form action="FormProcessor.php?MyID=12345"...>

fkerber 4. Sep 2013 09:10

AW: [PHP/HTML] Best-Practice: Hidden-Felder ersetzen?
 
Hi,

ich glaube, ich habe das Problem nicht ganz erfasst - die Radiobuttons haben doch selbst IDs etc.
Kannst du vielleicht mal einen Ausschnitt des Formulars zeigen?

Viele Grüße,
Frederic

Mikkey 4. Sep 2013 09:15

AW: [PHP/HTML] Best-Practice: Hidden-Felder ersetzen?
 
Als Alternative ginge Javascript, darin ginge folgendes:

1. HTTP-Get-Aufruf unmittelbar zusammenbasteln (s. Antwort vn Wladi)

2. EIN verstecktes Feld, dessen Inhalt per Javascript gesetzt wird.

Je nachdem, wie Du das Treffen der Entscheidung realisiert hast, genügen auch einfach die normalen Formulardaten:

- zwei Buttons mit eindeutiger ID in jeder Zeile
- Checkbox in jeder Zeile

wenn Du das mal musterhaft darstellen könntest, kann man auch noch mehr Ideen entwickeln...

Gruß, Mikkey

Valle 4. Sep 2013 09:55

AW: [PHP/HTML] Best-Practice: Hidden-Felder ersetzen?
 
Zitat:

Zitat von Mikkey (Beitrag 1227113)
Als Alternative ginge Javascript, darin ginge folgendes

Also das ist leider noch viel, viel schlimmer als ein hidden Field.

Üblicherweise steckt die ID, die das Element, zu den du ein Formular absendest, in der URL. Normalerweise bastelt man sich in seiner Applikation auch schönere URLs, sodass es nicht mehr so nach PHP aussieht. Als Ziel-URL für das Formular wäre dann z.B. "/forum/user/42/edit" sinnvoll.

Falls das nicht geht oder zu umfangreich ist, sehe ich keinen speziellen Grund, auf ein Hidden Field zu verzichten. Du solltest dir allenfalls noch die Frage stellen, was in der URL stecken sollte und was nicht. User verschicken solche URL häufig. Eine URL wie "/forum/user/42", die dann den User anzeigt und ggf. bei entsprechenden Rechten auch das Formular, ist also gut.

Oft kommt es vor, dass die Menge an übertragenden Daten noch mehr steigt, zum Beispiel durch einen angemessenen CSRF-Schutz. Der Token der dabei mitgelifert werden muss, wäre für eine URL zu lang und vor allem auch gar nicht praktikabel. Gegen solche Felder spricht also eigentlich nichts.

Liebe Grüße,
Valenitn

Angel4585 4. Sep 2013 10:01

AW: [PHP/HTML] Best-Practice: Hidden-Felder ersetzen?
 
Ich merke gerade, das ich das recht blöd gelöst habe.
Ich habe keine Radio-Buttons (was aber die deutlich bessere Lösung ist) sondern zwei Submitbuttons und zwei separate Formulare.
Bei einem Formular mit zwei Radiobuttons stellt sich das Problem natürlich nicht erst. Weshalb es auch wohl die bessere Lösung ist, für die Fälle in der man eine Auswahl treffen soll welche der beiden Möglichkeiten man möchte.

Wie ist das in einer Liste mit nur einer Auswahl, wo man entscheidet ob man klickt oder nicht?
Ich hab ne Tabelle mit Herausforderungen für Freundschaftsspiele bei einem Spiel.
Die Tabelle listet eigene Herausforderungen an andere und gleichzeitig Herausforderungen anderer an mich, sortiert nach Datum, an dem die Freundschaftsspiele stattfinden würden.
Sowas:
Code:
<table>
<tr>
  <!-- Ich habe gefordert -->
  <td>Datum</td>
  <td>Heimmannschaft</td>
  <td>Ausw&auml;rtsmannschaft</td>
  <td>
    <form method='post'>
      <input type='hidden' name='id' value='1' />
      <input type='submit' name='withdraw' value='zur&uuml;ckziehen' />
    </form>
  </td>
</tr>
<tr>
  <!-- Ein anderer hat mich gefordert -->
  <td>Datum</td>
  <td>Heimmannschaft</td>
  <td>Ausw&auml;rtsmannschaft</td>
  <td>
    <form method='post'>
      <input type='hidden' name='id' value='2' />
      <input type='hidden' name='action' value='accept' />
      <input type='submit' value='annehmen' />
    </form>
    <form method='post'>
      <input type='hidden' name='id' value='2' />
      <input type='hidden' name='action' value='decline' />
      <input type='submit' value='ablehnen' />
    </form>
  </td>
</tr>
<tr>
  <!-- Variante mit Radiobuttons -->
  <td>Datum</td>
  <td>Heimmannschaft</td>
  <td>Ausw&auml;rtsmannschaft</td>
  <td>
    <form method='post'>
      <input type='hidden' name='id' value='2' />
      <input type='radio' name='action' value='accept' /> annehmen
      <input type='radio' name='action' value='decline' /> ablehnen
      <input type='submit' value='absenden' />
    </form>
  </td>
</tr>
</table>
Für mich ist das halt eher ein POST-Ereignis, als ein GET-Ereignis. POST und GET haben ja theoretisch auch ihre Bedeutung wie sie genutzt werden sollten.

jfheins 4. Sep 2013 10:11

AW: [PHP/HTML] Best-Practice: Hidden-Felder ersetzen?
 
Zwei Klicks (Radiobutton + Absenden) sind aber auch nicht so toll. Warum nicht ein Formular mit zwei submit-Buttons?

Mikkey 4. Sep 2013 12:27

AW: [PHP/HTML] Best-Practice: Hidden-Felder ersetzen?
 
Zitat:

Zitat von Angel4585 (Beitrag 1227122)
Ich merke gerade, das ich das recht blöd gelöst habe.

Das sehe ich nicht unbedingt so. Es ist durchaus benutzerfreundlicher, wenn der Benutzer nicht erst einen Radiobutton und dann einen "Abschicken"-Knopf klicken muss.

Da aber das "Value"-Attribut des Submit-Buttons in den Post-Daten enthalten ist, kannst Du den von Dir benötigten Wert dahinein stellen. Dann ersparst Du Dir ein extra Hidden-Feld.

Eine Gestaltung, dass oben eine "Zurückziehen" Checkbox aktiviert wird und gleichzeitig keine oder eine Radioschaltfläche und mit einem einzigen Abschicken-Knopf das gesamte (eine) Form abgeschickt würde, antspräche eher einer "normalen" Website.

Da solltest Du entscheiden, welche Variante Dir besser gefällt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz