Martin Ereth: checkbox: name und value in Selfhtml

Hallo!

Sorry, wenn ich falsch bin.

Ich habe verzweifelt in SelfHTML gesucht, wie ich Checkboxen per POST an PHP übergeben kann:
<input type='checkbox' checked='checked' name='delete' value='test'>
<input type='checkbox' checked='checked' name='delete' value='test2'>

Das funktioniert nur, wenn ich es als Array übergebe:
<input type='checkbox' checked='checked' name='delete[]' value='test'>
<input type='checkbox' checked='checked' name='delete[]' value='test'>

Dann enthält das Array POST für jedes Element 'name' ein weiteres Array mit den Werten.

Vielleicht sollte man das in SelfHTML noch an geeigneter Stelle einfügen.

Ich weiß nur nicht, wie ich es genau formulieren würde, deshalb schreibe ich hier.

Viele Grüße

Martin

  1. Ich habe verzweifelt in SelfHTML gesucht, wie ich Checkboxen per POST an PHP übergeben kann:
    <input type='checkbox' checked='checked' name='delete' value='test'>
    <input type='checkbox' checked='checked' name='delete' value='test2'>

    Das funktioniert nur, wenn ich es als Array übergebe:
    <input type='checkbox' checked='checked' name='delete[]' value='test'>
    <input type='checkbox' checked='checked' name='delete[]' value='test'>

    Das sind keine gültigen Namen.

    http://www.edition-w3.de/TR/1999/REC-html401-19991224/types.html#h-6.2

    ID- und NAME-tokens müssen mit einem Buchstaben ([A-Za-z]) beginnen, diesem kann eine beliebige Anzahl von Buchstaben, Ziffern ([0-9]), Bindestrichen (»-«), Unterstrichen (»_«), Doppelpunkten (»:«) und Punkten (».«) folgen.

    Dann enthält das Array POST für jedes Element 'name' ein weiteres Array mit den Werten.

    Das ist nur in PHP so und läßt sich sicher auch anders lösen. Mit dem Perl Modul CGI funktioniert die erste Variante einwandfrei.

    Vielleicht sollte man das in SelfHTML noch an geeigneter Stelle einfügen.

    ungültigen Code empfehlen? Besser nicht.

    Struppi.

    1. Hallo Struppi,

      Das funktioniert nur, wenn ich es als Array übergebe:
      <input type='checkbox' checked='checked' name='delete[]' value='test'>
      <input type='checkbox' checked='checked' name='delete[]' value='test'>
      Das sind keine gültigen Namen.

      Doch. Für das name-Attribut des input-Elements ist als Inhalt CDATA definiert - und damit ist "delete[]" als Wert durchaus erlaubt.

      Grüße aus Nürnberg
      Tobias

      1. Doch. Für das name-Attribut des input-Elements ist als Inhalt CDATA definiert - und damit ist "delete[]" als Wert durchaus erlaubt.

        Tja, man sollte vielleicht vorher alles lesen woraus man zitiert.

        Allerdings steht dass dann auch falsch in selfhtml http://de.selfhtml.org/html/formulare/eingabe.htm#felder

        Der Name sollte nicht zu lang sein und darf keine Leerzeichen, Sonderzeichen oder deutsche Umlaute enthalten. Das erste Zeichen muss ein Buchstabe sein. Danach sind auch Ziffern erlaubt. Benutzen Sie als Sonderzeichen im Namen höchstens den Unterstrich (_), den Bindestrich (-), den Doppelpunkt (:) oder den Punkt (.). Im Hinblick auf JavaScript darf der Name sogar nur Buchstaben, Ziffern und den Unterstrich (_) enthalten.

        Struppi.

  2. Hi Martin,

    Ich habe verzweifelt in SelfHTML gesucht, wie ich Checkboxen per POST an PHP übergeben kann:
    <input type='checkbox' checked='checked' name='delete' value='test'>
    <input type='checkbox' checked='checked' name='delete' value='test2'>

    Du kannst nicht für zwei verschiedene Formular-Elemente denselben Namen vergeben - dann überschreiben die sich beim Versenden der Daten! Einzige Ausnahme: Radioboxen, möglicherweise verwechselst du die Checkboxen gerade mit denen. Bei Radioboxen geht das deshalb, weil von denen ja immer nur _eine_ angeklickt sein kann/darf.

    Das funktioniert nur, wenn ich es als Array übergebe:
    <input type='checkbox' checked='checked' name='delete[]' value='test'>
    <input type='checkbox' checked='checked' name='delete[]' value='test'>

    Richtig, dann wird die erste als delete[0] und die zweite als delete[1] verschickt bzw. vom PHP-Script aufgenommen.

    Ein kleiner Tip für die Praxis: Wenn du z.B. eine Liste alles Datensätze ausgibts und vor jeden Datensatz eine Checkbox setzt und man auswählen können soll, welche Datensätze alle gelöscht werden sollen - normalerweise hat jeder Datensatz eine ID, die kannst du als numerischen Index nehmen:

    <input type="checkbox" name="delete[<?php echo $id; ?>]" value="test" />

    Im PHP-Script kannst du dann das Array delete durchgehen:

    foreach($_POST['delete'] as $id => $value) {
      // lösche $id oder mache sonst etwas
    }

    MfG, Dennis.

    1. Ich habe verzweifelt in SelfHTML gesucht, wie ich Checkboxen per POST an PHP übergeben kann:
      <input type='checkbox' checked='checked' name='delete' value='test'>
      <input type='checkbox' checked='checked' name='delete' value='test2'>

      Du kannst nicht für zwei verschiedene Formular-Elemente denselben Namen vergeben - dann überschreiben die sich beim Versenden der Daten!

      Quatsch. Sie werden alle verschickt, nur scheint es mit PHP nicht so ohne weiteres möglich sein darauf dann zu zugreifen.

      Das funktioniert nur, wenn ich es als Array übergebe:
      <input type='checkbox' checked='checked' name='delete[]' value='test'>
      <input type='checkbox' checked='checked' name='delete[]' value='test'>

      Richtig, dann wird die erste als delete[0] und die zweite als delete[1] verschickt bzw. vom PHP-Script aufgenommen.

      Auch Quatsch, sie werden so ausgewertet, aber nicht so verschickt.

      Schau dir einfach mal die URL nach dem verschicken von diesem Formular an:
      <form action="" method="get">
      <input type="text" name="test" value="feld1">
      <input type="text" name="test" value="feld2">
      <input type="text" name="test" value="feld3">
      <input type="submit" name="test" value="ssubmit">
      </form>

      Struppi.

      1. Hi Struppi,

        Richtig, dann wird die erste als delete[0] und die zweite als delete[1] verschickt bzw. vom PHP-Script aufgenommen.

        Auch Quatsch, sie werden so ausgewertet, aber nicht so verschickt.

        Deshalb schrieb ich ja auch "bzw. vom PHP-Script aufgenommen" ;-)

        Allerdigns scheint man in PHP in der Tat nur von Hand über $_SERVER['REQUEST_URI'] daran zu kommen...

        MfG, Dennis.

  3. Hallo Martin,

    Ich habe verzweifelt in SelfHTML gesucht

    Du meinst bestimmt SELFHTML. ;-)
                       ^^^^

    Vielleicht sollte man das in SelfHTML noch an geeigneter Stelle einfügen.

    Das wird geschehen, siehe Bugtracker. Danke für den Hinweis.

    Grüße
     Roland