Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Wert einer unchecked Checkbox übermitteln

    webald

    • modified Team
    • Beiträge: 2.791
    Wert einer unchecked Checkbox übermitteln
    am: 27. März 2015, 10:59:07
    Ich baue gerade Formulare und will dass auch der Wert einer nicht-angeklickten Checkbox per POST übermittelt wird.

    Der Code dafür sieht etwas so aus:
    Code: PHP  [Auswählen]
    echo xtc_draw_hidden_field('Enabled', '0') . xtc_draw_checkbox_field('Enabled', 1,$dbfield["Enabled"])

    Ist jemand etwas bekannt, dass dies in PHP 5.6+ nicht mehr geht? Oder adere Problem verursacht?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=32601.0

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #1 am: 27. März 2015, 11:27:08
    Das Problem liegt nicht bei PHP sondern in deinem Code, denn Du hast das versteckte Feld und und das Checkbox-Feld mit dem gleichen Namen "Enabled" benannt.

    Gruss
    Hanspeter

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #2 am: 27. März 2015, 12:01:35
    Nein, der Code ist richtig und funktioniert. Ich erkläre es mal andersrum:

    Code: PHP  [Auswählen]
    <form name="customers" action="http://localhost/user_admin.php?action=updateuser" method="post" onSubmit="return check_form();">
    <input type="text" name="UserName" value="webald">
    <input type="checkbox" name="Enabled" value="0">
    </form>

    Wenn man das verschickt ergibt print_r($_POST) folgende Ausgabe:
    Zitat
    Array ( [UserName] => webald )

    mit

    Code: PHP  [Auswählen]
    <form name="customers" action="http://localhost/user_admin.php?action=updateuser" method="post" onSubmit="return check_form();">
    <input type="text" name="UserName" value="webald">
    <input type="hidden" name="Enabled" value="0">
    <input type="checkbox" name="Enabled" value="0">
    </form>

    Wenn man das verschickt ergibt print_r($_POST) folgende Ausgabe:
    Zitat
    Array ( [UserName] => webald [Enabled] => 0 )

    Für <input type="checkbox" name="Enabled" value="1"> benötigt man kein hiddenfield. Da ist das Ergebnis in beiden Fällen Array ( [UserName] => webald [Enabled] => 1 )

    hendrik

    • Experte
    • Beiträge: 2.038
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #3 am: 27. März 2015, 12:14:24
    Input-Felder (hidden oder nicht) mit identischen Namen macht man nicht. Wenn es doch irgendwie funktioniert ist nicht gewährleistet, daß es immer so bleibt. Was du da produzierst ist mangelhaft. Setze ein hidden-field mit anders lautendem Namen. z.b. name="Enabled_org" value="<originalwert>". Im PHP kannst du dann prüfen ob der Wert verändert wurde.

    Gruß
    hen

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #4 am: 27. März 2015, 12:22:41
    Kann sein das ich jetzt nicht verstehe was Du meinst aber der folgende Code aus deinem letzten Beitrag

    Code: PHP  [Auswählen]
    <form name="customers" action="http://localhost/user_admin.php?action=updateuser" method="post" onSubmit="return check_form();">
    <input type="text" name="UserName" value="webald">
    <input type="hidden" name="Enabled" value="0">
    <input type="checkbox" name="Enabled" value="0">
    </form>
     

    liefert ob 'checked' oder nicht immer $_POST[‘Enabled’] => '0' und damit, so denke ich kannst Du doch nichts anfangen.

    Gruss
    Hanspeter

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #5 am: 27. März 2015, 12:59:02
    @hpzeller
    ich wollte es kurz halten, ok zu kurz.
    Code: PHP  [Auswählen]
    <form name="customers" action="http://localhost/user_admin.php?action=updateuser" method="post" onSubmit="return check_form();">
    <input type="text" name="UserName" value="webald">
    <input type="hidden" name="Enabled" value="0">
    <input type="checkbox" name="Enabled" value="1" checked>
    </form>
    und dann lass mal s das hiddenfield weg.

    @hendrik
    Ja, gutes Programmieren geht anders. Bei 2 oder 3 checkboxen ist es auch ok, zu prüfen ob eine Parameter übergeben wurde oder nicht. Spätestens ab 20 Checkboxen im Formular ist das aber Mist.
    Das wensentliche ist die Reihenfolge der Felder im Formular. Das Hiddenfield belegt den Wert nur vor, die Checkbox überschreibt im Fall von checked=true, im Fall von checked=false macht sie nichts (genau das ist das Problem, diese nichts). Würde statt des nichts ein Wert 0 gesetzt werden, bräuchte man kein Hiddenfield.

    Das was ich dort oben mache ist nicht anderes als in einem Array einen Key mit verschiedene Werten zu füllen.
    <input type="hidden" name="Enabled" value="0"> ist gleichbedeutend mit $arr["Enabled"]='0'
    <input type="checkbox" name="Enabled" value="1" checked> ist gleichbedeutend mit $arr["Enabled"]='1'
    aber
    <input type="checkbox" name="Enabled" value="1"> ist NICHT gleichbedeutend mit $arr["Enabled"]='0', sondern der Key "Enabled" wird gar nicht im Array benutzt. Es sei denn er istmit dem Hiddenfield bereit im Array vorhanden.

    Was mehrfach den gleichn Namen angeht, kann man entgegenhalten, dass das bei Radioboxen üblich ist. Mein Frage aber zielte ja tatsächlich darauf ab, ob da Probleme bekannt sind oder nicht.

    Matt

    • Experte
    • Beiträge: 4.241
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #6 am: 27. März 2015, 13:08:04
    Was mehrfach den gleichn Namen angeht, kann man entgegenhalten, dass das bei Radioboxen üblich ist.

    Bei radio ist das so by design. Das was du da machst ist Wolkenkratzer mit LEGO bauen. Kann gutgehen, muss aber nicht.

    Erzähl doch mal was du machen willst. Vielleicht gibt's ja eine viel einfachere Lösung.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #7 am: 27. März 2015, 13:18:20
    Was ich will ist einfach.

    Ich habe eine Rechteliste und der Haken sagt nur Recht erteilt bzw. verweigert.

    Ich habe das logisch schon in Gruppen aufgeteilt, aber es bleiben immer nocht 20-30 pro Gruppe.

    Wenn ich da für jeden nicht übergebenen Key den alten Wert prüfen muss, werde ich ja wahnsinnig.

    energy85

    • Neu im Forum
    • Beiträge: 10
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #8 am: 27. März 2015, 13:49:17
    Ich kenn es gar nicht anders? PHP findet keine leeren Checkboxen (HTML schickt die wohl nicht rüber), da müsstest dann auf isset() und|oder !empty() prüfen.

    Du kannst aber in einem Formular dutzende gleichnamige Felder mit angeben, PHP erhält dann das Value vom letzten Feld im abgeschickten Formular. Ob das HTML Valid ist, wage ich mal zu bezweifeln, PHP interessiert das relativ wenig. ;-)

    web28

    • modified Team
    • Beiträge: 9.404
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #9 am: 27. März 2015, 14:00:54
    Nicht angehakte Checkboxes sind nicht im POST Array.
    Die übliche Prüfung darauf macht man mit isset($_POST['Enabled'])

    Alternativ kann man ein hidden field mit einem anderen Namen benutzen, das man über JQuery mit der Checkbox verbindet.

    Gruss Web28

    hendrik

    • Experte
    • Beiträge: 2.038
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #10 am: 27. März 2015, 15:06:54
    Lange Liste mit Usernamen, Input + Checkbox?
    Richtig?

    Vorschlag:
    <input type="text" name="UserName[0]" value="webald">
    <input type="checkbox" name="Enabled[0]" value="1" checked="checked">

    <input type="text" name="UserName[1]" value="modi">
    <input type="checkbox" name="Enabled[1]" value="1" checked="checked">

    <input type="text" name="UserName[2]" value="schlauhenni">
    <input type="checkbox" name="Enabled[2]" value="1" checked="checked">

    u.s.w. 3,4,5...

    php:

    Zitat
    foreach( $_POST['UserName'] as $i => $username ) {
      $enabled = ($_POST['Enabled'][$i]=='1');

      // hier stehen jetzt $username und $enabled (Typ Bool) zur Verfügung
      // Auswertung ...

    }

    Gruß
    hen

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #11 am: 27. März 2015, 15:27:44

    web0null

    • Experte
    • Beiträge: 1.998
    Re: Wert einer unchecked Cehckbox übermitteln
    Antwort #12 am: 27. März 2015, 16:39:17
    isset() ist die richtige Prüfung, wie auch von web28 vorgeschlagen, sonst gibt es "Notice: Undefined index:"

    Gruß
    8 Antworten
    4546 Aufrufe
    30. Oktober 2010, 16:26:40 von swolfram [templatix]
    3 Antworten
    2995 Aufrufe
    05. Juni 2018, 19:25:12 von Alex23
    10 Antworten
    6597 Aufrufe
    01. April 2010, 09:54:04 von vsell
               
    anything