Ben: HTTP_POST_VARS - Problem

Hallo,

per Formular möchte ich einige Daten übergeben.

Das Formular wird mit der Methode POST an ein PHP-Script gesendet, was derzeit nur so aussieht:

<?php

$agb = HTTP_POST_VARS["agb"];
echo $agb;

?>

Ich bekomme jedoch diese Fehlermeldung:

Parse error: parse error, unexpected '[' in .../weiter1.php on line 4

Ich verstehe das leider nicht ganz. Darf da etwa kein [ stehen??

Danke und viele Grüße
Ben

--
Fantasie ist wichtiger als Wissen. - Albert Einstein
  1. Moin!

    <?php

    $agb = HTTP_POST_VARS["agb"];
    echo $agb;

    ?>

    Ich bekomme jedoch diese Fehlermeldung:

    Parse error: parse error, unexpected '[' in .../weiter1.php on line 4

    Ich verstehe das leider nicht ganz. Darf da etwa kein [ stehen??

    Das [ darf da stehen, wenn du ein $ vor den Variablennamen schreibst - ansonsten meinst du die Konstante HTTP_POST_VARS.

    Typischer Fall von Programmiererblindheit. :)

    - Sven Rautenberg

    --
    "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
    1. Hi,

      ARGH... Ok, damit hat sich das natürlich erledigt... *seufz* Ich hätte vielleicht meine Brille aufsetzen sollen *schäm* Danke für den Hinweis.

      Viele Grüße
      Ben

      --
      Fantasie ist wichtiger als Wissen. - Albert Einstein
  2. Hi!

    $agb = HTTP_POST_VARS["agb"];

    Vielleicht solltest Du es mal mit $ probieren ($HTTP_POST_VARS).
    Wie nannte man das noch gleich? Betriebsblindheit oder sowas? ;-)

    Grüße
    Andreas

    1. Hallo Andreas,

      Vielleicht solltest Du es mal mit $ probieren ($HTTP_POST_VARS).
      Wie nannte man das noch gleich? Betriebsblindheit oder sowas? ;-)

      Ja.. danke. *g* Ist wohl eher Kurzsichtigkeit! ;-)

      Viele Grüße
      Ben

      --
      Fantasie ist wichtiger als Wissen. - Albert Einstein
  3. Hallo Ben,

    $agb = HTTP_POST_VARS["agb"];

    Wie wär's mit
    $agb = $HTTP_POST_VARS["agb"];

    und noch was: Ich weiß ja nicht was für eine PHP-Version Du hast (benutzen mußt). Schau mal im vorhergehenden Thread ...

    Ab PHP 4.1.0 besser $_POST['agb']

    Gruss,

    Vinzenz

    1. Hi Vinzenz,

      Ab PHP 4.1.0 besser $_POST['agb']

      Alles klar, so funktioniert es dann auch schön. Danke (auch dafür, dass keiner gelacht hat über diese Doofheit *g*)

      Werde dann jetzt diese Variante bevorzugen.

      Viele Grüße
      Ben

      --
      Fantasie ist wichtiger als Wissen. - Albert Einstein
  4. Hallo,

    mein nächstes Problem (wenn das wieder so einfach ist, geh ich wieder ins Bett...) ist folgendes:

    In dem Formular gibt es 6 Checkboxen, die alle den Namen "leistung" tragen. Darf ich das so denn nicht angeben? Wenn ich hinterher den Inhalt der Variablen leistung ausgebe, dann steht dort nur der Wert der letzten Checkbox drin.

    Darf ich also jeden Namen nur 1 mal vergeben?

    Viele Grüße
    Ben

    --
    Fantasie ist wichtiger als Wissen. - Albert Einstein
    1. Hallo Ben,

      In dem Formular gibt es 6 Checkboxen, die alle den Namen "leistung" tragen. Darf ich das so denn nicht angeben? Wenn ich hinterher den Inhalt der Variablen leistung ausgebe, dann steht dort nur der Wert der letzten Checkbox drin.
      Darf ich also jeden Namen nur 1 mal vergeben?

      jein

      Verwende leistung[], dann bekommst Du ein Array

      Ansonsten, was spricht gegen eindeutige Namen?

      gab's schon mal eine Diskussion, ob [] erlaubt ist, aber soweit ich mich erinnern kann, ja. Cheatah war mit von der Partie, weiß es ganz bestimmt noch.

      Gruss,

      Vinzenz

      1. Hallo Ben,

        Nachtrag: Ich hab' es gesucht, [] sind erlaubt ...

        MudGuard hat nachgewiesen, dass es erlaubt ist:
        http://forum.de.selfhtml.org/archiv/2003/1/34794/#m190046

        Gruss,

        Vinzenz

        1. Hallo Vinzenz,

          schönen Dank! :-)

          Werde ich mir gleich mal ansehen. Vielleicht kannst du mir noch bei dem JS Problem behilflich sein?

          Viele Grüße
          Ben

          --
          Fantasie ist wichtiger als Wissen. - Albert Einstein
        2. Hallo,

          MudGuard hat nachgewiesen, dass es erlaubt ist:
          http://forum.de.selfhtml.org/archiv/2003/1/34794/#m190046

          Darueber wurde bereits frueher diskutiert:
          http://forum.de.selfhtml.org/archiv/2002/10/26821/#m146286.

          MfG, Thomas

      2. Moin!

        Verwende leistung[], dann bekommst Du ein Array

        Hintergrund: Wenn die Checkboxen alle nur "leistung" heißen, legt PHP eine Variable $leistung an und speichert darin den Inhalt - sechsmal hintereinander. Du kriegst also nur den letzten Wert. Jaja, $leistung existiert nicht mehr, aber das Prinzip gibts noch. Der Wert landet in $_POST['leistung'] - was aber auch nur eine Stringvariable ist bzw. als solche angelegt wird.

        In PHP kann man an ein Array Daten _hinten anhängen_, indem man auf $leistung[] zugreift. Wenn kein Eintrag existiert, wird $leistung[1] erzeugt, ansonsten ein Index mit einer um 1 größeren Nummer, als bisher existierte. Also wird auch das Formular sechsmal aufrufen: $leistung[] = "wert vom Value1...6" - und damit ein Array erzeugen. Natürlich stimmt das nicht ganz, denn der Wert landet in $_POST['leistung'][1..6].

        Ansonsten, was spricht gegen eindeutige Namen?

        Eben. Checkboxen dürfen alle unterschiedlich heißen, nur bei Radiobuttons ist ein eindeutiger Name für alle Buttons einer Gruppe nötig. Aber da kann man ja auch nur einen Wert auswählen.

        gab's schon mal eine Diskussion, ob [] erlaubt ist, aber soweit ich mich erinnern kann, ja. Cheatah war mit von der Partie, weiß es ganz bestimmt noch.

        Warum sollte es nicht erlaubt sein. Man kriegt mit Javascript Probleme, weil man nicht mehr einfach über den Namen auf das Form-Element zugreifen kann.

        document.formname.leistung[].eigenschaft funktioniert nicht.
        document.formname.elements["leistung[]"].eigenschaft funktioniert.

        Zu bedenken ist, dass mehrere gleiche Elementnamen in Javascript automatisch ein Array erzeugen. Man kann also elements["leistung[]"].length abfragen, um die Elementzahl im Array zu erfahren, und mit elements["leistung[]"][index].eigenschaft die einzelnen Elemente ansprechen.

        Da sind für meinen ästetischen Geschmack aber zu viele eckige Klammern auf einem Raum versammelt, das sieht ungesund aus. :)

        - Sven Rautenberg

        --
        "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
        1. Hallo,

          Da sind für meinen ästetischen Geschmack aber zu viele eckige Klammern auf einem Raum versammelt, das sieht ungesund aus. :)

          Nix gegen (eckige) Klammern, die Felder koennen auch ohne elements-Collection angesprochen werden:

          document.forms["formname"]["feldname[]"][index]...

          MfG, Thomas

        2. Hallo Sven,

          In PHP kann man an ein Array Daten _hinten anhängen_, indem man auf $leistung[] zugreift. Wenn kein Eintrag existiert, wird $leistung[1] erzeugt, ansonsten

          bist Du da sicher? wird nicht als erstes $leistung[0] erzeugt?

          ein Index mit einer um 1 größeren Nummer, als bisher existierte. Also wird auch das Formular sechsmal aufrufen: $leistung[] = "wert vom Value1...6" - und damit ein Array erzeugen. Natürlich stimmt das nicht ganz, denn der Wert landet in $_POST['leistung'][1..6].

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
          1. Moin!

            In PHP kann man an ein Array Daten _hinten anhängen_, indem man auf $leistung[] zugreift. Wenn kein Eintrag existiert, wird $leistung[1] erzeugt, ansonsten

            bist Du da sicher? wird nicht als erstes $leistung[0] erzeugt?

            Nein, nicht 100%. In Verbindung mit einer Funktion, die einen Verzeichnisinhalt ausliest, in ein Array schreibt und dieses dann mit sort() sortiert, war array[0] immer unbelegt.

            Auf den ersten Blick macht es keinen Sinn, dass nicht $leistung[0] angelegt wird - außer, es wird jedes Array als "hat Element [0] beim Erstellen" angesehen - das nächste Element ist dann logischerweise die 1.

            - Sven Rautenberg

            --
            "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
    2. Hallo Ben,

      In dem Formular gibt es 6 Checkboxen, die alle den Namen "leistung" tragen. Darf ich das so denn nicht angeben? Wenn ich hinterher den Inhalt der Variablen leistung ausgebe, dann steht dort nur der Wert der letzten Checkbox drin.

      du musst hinter "leistung" noch eckige Klammern setzten, also name="leistung[]", dann hast du ein Array namens "leistung", in dem du dann auf die ausgewählten Checkboxen mit $leistung[0], $leistung[1] usw zugreifen kannst.

      Grüße aus Nürnberg
      Tobias

      1. Hallo Tobias, hallo Vinzenz,

        ich habe meine Checkboxen nun alle in leistung[] umbenannt. Nun schlägt aber das formularüberprüfende JavaScript nicht mehr an, habe ich das falsch geändert?

        <ausschnitt>

        for(i=0;i<document.forms["bestellung1"].elements["leistung[]"].length;i++)
          {
           if(document.forms["bestellung1"].leistung[][i].checked) okay = true;
          }

        </ausschnitt>

        Viele Grüße
        Ben

        --
        Fantasie ist wichtiger als Wissen. - Albert Einstein
        1. Hallo Ben,

          <ausschnitt>

          for(i=0;i<document.forms["bestellung1"].elements["leistung[]"].length;i++)

          heute ist definitiv nicht Dein Tag. Wie greifst Du auf Array-Elemente, _Elemente_ zu?

          if(document.forms["bestellung1"].leistung[][i].checked) okay = true;

          Gruss,

          Vinzenz

          1. Hi Vinzenz,

            heute ist definitiv nicht dein Tag.

            Da hast du recht. Ich weiß nicht, was gerade mit mir los ist... *seufz*

            Wie greifst du auf Array-Elemente,_Elemente_zu?

            if(document.forms["bestellung1"].elements["leistung[]"][i].checked) okay = true; <- ?

            Viele verwirrte Grüße
            Ben

            --
            Fantasie ist wichtiger als Wissen. - Albert Einstein
            1. Hi Vinzenz,

              vielen Dank für die Hilfe, jetzt klappt es. Auch der Zugriff per PHP klappt auf die einzelnen Elemente. Die for-Schleife bekomme ich gerade nicht hin, aber wie gesagt - nicht mein Tag...

              Viele Grüße
              Ben

              --
              Fantasie ist wichtiger als Wissen. - Albert Einstein
  5. Schönen Nachmittag Ben,

    das mit dem Array mach eigentlich nur Sinn, wenn man die Daten auch in einem entsprechenden Datenbankfeld ablegt.

    Bei mySQL gibt es ja die modifizierten String-Types enum und set. Wenn man die benutzen will, lohnt sich das mit dem Array. Ich habe mir dafür eine Funktion geschrieben, der ich nur noch den Feldnamen (und $conn, %tablename, $type, $sort,...) übergeben muss, und die generiert mit für die  Felder automatisch den HTML-Code.

    set   ->  Checkbox oder Select-multiple, je nach Type-Einstellung
    enum  ->  Radio, Select-Normal, je nach Type-Einstellung

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    1. Hi Tom,

      das mit dem Array mach eigentlich nur Sinn, wenn man die Daten auch in einem entsprechenden Datenbankfeld ablegt.

      Naja, eigentlich ist es nur für einen Bestellvorgang, aber ich überlege, ob ich das in einer Datenbank speichern soll...

      Ein Script habe ich bislang nur für die Erstellung von CSS. Ein nettes Eingabeformular für Farben, Schriftarten... funktioniert schön und legt auch gleich die entsprechenden Ordner und Dateien an.

      Viele Grüße
      Ben

      --
      Fantasie ist wichtiger als Wissen. - Albert Einstein