Angie: Daten von input/checkbox als PHP-Array bei gleichen Namen

Hallo,

habe unten ein nur leicht verändertes Beispiel aus Selfhtml (die Aenderungen sehen nur aus dam Einfüugen eines submit-Buttons und der Ausgabe der Empfabgebeb Dollar_GET Daten) reinkopiert.

Zu meiner Frage:
In http://de.selfhtml.org/html/formulare/auswahl.htm#checkboxen steht (Zitat): "Im Gegensatz zu Radiobuttons müssen Checkboxen keine identische Namen haben, um zu funktionieren. Es ist aber hinsichtlich des auswertenden Skripts eventuell sehr sinnvoll, identische Namen zu verwenden, weil das Skript dann automatisch ein Array anlegt."

In dem leicht geändeerten Beispiel erhalte ich aber kein Array! Wenn ich mehrere Felder anklicke, erhalte ich im Feld "Zutat" nur das untertste der angekreuzten Felder. Mache ist was falsch - oder ist PHP bei mit falsch konfiguriert?

Ich denke es soll gerade Sinn der Übung sein, das ich alle Input-Tags mit gleichen Namen versehe ...

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  
   "http://www.w3.org/TR/html4/strict.dtd">  
  
  
<!-- Beispiel von SelfHTML  
      http://de.selfhtml.org/html/formulare/auswahl.htm#checkboxen  
  
      Aenderungen:  
      - method="get" im form-Tag eingefuegt  
      - Button zum Absenden (input type=submit) eingefuegt  
      - Ausgabe des PHP-Arrays $_GET mit print_f()  
-->  
  
  
<html>  
<head>  
   <title>Checkboxen definieren</title>  
</head>  
<body>  
  
<h1>Pizzabelag nach Wahl!</h1>  
  
<form action="" method="get">  
  <p>Kreuzen Sie die gew&uuml;nschten Zutaten an:</p>  
  <p>  
    <input type="checkbox" name="zutat" value="salami"> Salami<br>  
    <input type="checkbox" name="zutat" value="pilze"> Pilze<br>  
    <input type="checkbox" name="zutat" value="sardellen"> Sardellen  
  </p>  
  
  <input type="submit" value="absenden">  
</form>  
  
<pre>  
  <?php print_r($_GET); ?>  
</pre>  
  
</body>  
</html>  

Danke für Hilfe!!!!!

  1. [latex]Mae  govannen![/latex]

    In http://de.selfhtml.org/html/formulare/auswahl.htm#checkboxen steht (Zitat): "Im Gegensatz zu Radiobuttons müssen Checkboxen keine identische Namen haben, um zu funktionieren. Es ist aber hinsichtlich des auswertenden Skripts eventuell sehr sinnvoll, identische Namen zu verwenden, weil das Skript dann automatisch ein Array anlegt."

    In dem leicht geändeerten Beispiel erhalte ich aber kein Array!

    Und aus welchem Grund hast du nach diesem Satz aufgehört zu lesen?

    Cü,

    Kai

    1. Und aus welchem Grund hast du nach diesem Satz aufgehört zu lesen?

      Cü,

      Kai

      Weil ich nie zuende lese (okay, das war peinlich!).

      Trotz allem vielen Dank!

  2. <input type="checkbox" name="zutat" value="salami"> Salami<br>
        <input type="checkbox" name="zutat" value="pilze"> Pilze<br>
        <input type="checkbox" name="zutat" value="sardellen"> Sardellen

    Hallo.
    Um ein PHP-Array anzulegen, musst du hinter den Namen noch eckige Klammern setzen.

    also so:

      
    
    >     <input type="checkbox" name="zutat[]" value="salami"> Salami<br>  
    >     <input type="checkbox" name="zutat[]" value="pilze"> Pilze<br>  
    >     <input type="checkbox" name="zutat[]" value="sardellen"> Sardellen
    
    

    lg

    1. hi,

      also so:

      <input type="checkbox" name="zutat[]" value="salami"> Salami<br>
          <input type="checkbox" name="zutat[]" value="pilze"> Pilze<br>
          <input type="checkbox" name="zutat[]" value="sardellen"> Sardellen

        
      Es ist, auch wenn das immer wieder empfohlen wird, eine fragwürdige Herangehensweise, einen String, den ein Browser nach (dem Standard) enctype="application/x-www-form-urlencoded" erzeugt, noch weiter in den Presentation Layer zu transformieren. Besser ist es, und das ist nicht nur meine Empfehlung, einen Parser zu bauen, der mit diesem Enctype zurechtkommt. Ansonsten entstehen Abhängigkeiten, die bei komplexeren Geschichten nicht mehr überschaubar sind. Und das ist sicher auch mit PHP zu machen.  
        
      Hotti
      
      1. Moin!

        also so:

        <input type="checkbox" name="zutat[]" value="salami"> Salami<br>

        <input type="checkbox" name="zutat[]" value="pilze"> Pilze<br>
            <input type="checkbox" name="zutat[]" value="sardellen"> Sardellen

        
        >   
        > Es ist, auch wenn das immer wieder empfohlen wird, eine fragwürdige Herangehensweise, einen String, den ein Browser nach (dem Standard) enctype="application/x-www-form-urlencoded" erzeugt, noch weiter in den Presentation Layer zu transformieren. Besser ist es, und das ist nicht nur meine Empfehlung, einen Parser zu bauen, der mit diesem Enctype zurechtkommt. Ansonsten entstehen Abhängigkeiten, die bei komplexeren Geschichten nicht mehr überschaubar sind. Und das ist sicher auch mit PHP zu machen.  
          
        Auch wenn du es als fragwürdig bezeichnest, so ist es doch exakt die Vorgehensweise, die für PHP zu wählen ist, und die sich auch niemals ändern wird. Die (je nach Standpunkt als "falsch" zu bezeichnende) Entscheidung über diese Vorgehensweise ist vor vielen Jahren gefallen und seitdem in keiner PHP-Version revidiert worden.  
          
        Also: Nein, "das" ist mit PHP sicher NICHT zu machen.  
          
         - Sven Rautenberg
        
        1. Hallo,

          [...] einen Parser zu bauen, der mit diesem Enctype zurechtkommt. Ansonsten entstehen Abhängigkeiten, die bei komplexeren Geschichten nicht mehr überschaubar sind. Und das ist sicher auch mit PHP zu machen.

          Also: Nein, "das" ist mit PHP sicher NICHT zu machen.

          Verstehe: Es gibt in PHP keine Möglichkeit, an den ganzen ungeparsten URL-String zu kommen, um ihn dann selber zu parsen. Stimmt das so? Seltsam.

          Die Sache mit den "[]" am Ende von Feldnamen kommt mir wie ein Hack vor, den man höchstens vorübergehend mangels besserer Lösung oder aus Faulheit einsetzt.

          Klar:

          $feldname[] = wert;

          in PHP entspricht

          feldname.push(wert)

          in JS.

          So wird es wohl von PHP geparst, und ohne die Klammern würde natürlich nicht klappen.
          Man könnte aber doch ohne die Klammern auskommen, wenn man beim Parsen vorher feststellt, ob ein Feldname mehrfach vorhanden ist...

          Gruß, Don P

          1. Hi!

            Verstehe: Es gibt in PHP keine Möglichkeit, an den ganzen ungeparsten URL-String zu kommen, um ihn dann selber zu parsen. Stimmt das so? Seltsam.

            $_SERVER['QUERY_STRING'] existiert unter PHP und auch die POST-Daten lassen sich ungeparst abfassen, notfalls mit einer kleinen Konfigurationsänderung, damit sie ständig zur Verfügung gestellt werden.

            Die Sache mit den "[]" am Ende von Feldnamen kommt mir wie ein Hack vor, den man höchstens vorübergehend mangels besserer Lösung oder aus Faulheit einsetzt.

            Man kann das auch anders sehen. Die expliziten [] erlauben auch Konstrukte wie

            foo[bar]
              foo[bar][]
              foo[bar][qux]

            also explizit benannte Schlüssel und mehrfach verschachtelte Werte. Wenn man so etwas braucht, ist das ein Vorteil gegenüber dem anderenorts nur zur Verfügung stehenden einfachen, fortlaufend nummerierten Arrays.

            Lo!

  3. hi,

    <input type="checkbox" name="zutat" value="salami"> Salami<br>
        <input type="checkbox" name="zutat" value="pilze"> Pilze<br>
        <input type="checkbox" name="zutat" value="sardellen"> Sardellen

    Wenn alle Checkboxen angekreuzt (checked) sind, überträgt ein Browser das so:

    zutat=salami&zutat=pilze&zutat=sardellen

    also ganz genauso wie bei einem select multiple. Somit muss ein serverseitiger Parser ein Array anlegen, weil es einen Schlüssel für mehrere Werte gibt und ein richtiger Parser kann das auch mit o.g. String.

    Hotti