Problem mit Formular

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Formular

    Hi

    Ich habe ein Problem mit einem Formular und PHP.
    Wenn ich ein Hidden Feld mit dem Namen "action" und dem Wert "add" habe, wird dieses Feld seltsamerweise nicht mit übergeben. Das Formular ist dann immernoch zu sehen und nicht wie es sein sollte nur "test".

    Hier mal den Quelltext des Scriptes (test.php).
    PHP-Code:
    <?php
    if ($HTTP_POST_VARS[action] != "add")
    {
    ?>
    <form method="post" action="" enctype="multipart/form-data">
    <input type="hidden" name="action" value="add">

    <textarea name="about" cols="80" rows="20"></textarea>
    <input type="file" name="bild">

    <input type="submit" name="Submit" value="anlegen">
    </form>
    <?php 
    }
    if (
    $HTTP_POST_VARS[action] == "add")
    {
    echo 
    "test";
    }
    ?>
    Ich habe selber ein bischen rumprobiert und habe festgestellt, das es am enctype="multipart/form-data" im Formulartag liegt. Das Script funktioniert nur wenn ich dieses weglasse oder im Formulartag action="test.php?action=add" angebe, allerdings will ich ja eine Datei mit hochladen und die action verbergen.

    PHP Version ist 4.1.2 (register_globals = on)

    Kann es an der PHP Version liegen?
    Weil bei mir auf dem Rechner Version 4.3.0 läuft und dort funktioniert das Script wunderbar.
    Zuletzt geändert von kill@motte; 24.09.2004, 18:29.

  • #2
    Hallo kill@motte,

    bin zwar kein Mod und auch noch kein PHP-Oldie, vielleicht kann ich dir aber trozdem etwas helfen.

    1. Möchtest du Bilder hochladen, darf meines Wissens enctype="multipart/form-data" nicht fehlen.

    2. Bei action die URL angeben.

    3. Mir sagt jetzt $HTTP_POST_VARS nichts.
    Aber wenn Register-Globals on sind, stehen die Formular-Namen nach Übergabe als Variablen zur Verfügung. Du brauchst (oder darfst ???) also hier eigentlich nicht mit POST arbeiten.
    Hast du die Globals auf off, probierst mal damit: if ($_POST['action'] != "add") { ... }

    Hoffe, ich konnte dir helfen. Grüße, Mike.
    Zuletzt geändert von Mike04; 24.09.2004, 19:27.

    Kommentar


    • #3
      OffTopic:

      Du brauchst (oder darfst ???) also hier eigentlich nicht mit POST arbeiten.
      man sollte wenn möglich immer mit register_globals = OFF arbeiten bzw. immer $_(SESSION|GET|POST|COOKIE|SERVER)

      [Test] MySQL cli Emulator

      Kommentar


      • #4
        Beachte einfach Mikes Punkt Nr 2 und dein Problem sollte gelöst sein..

        Und eine der grundlagen lautet: Schreibe dein Script immer so, dass es auch möglichst vielen verschiedenen Systemen läuft. Also arbeitet man mit $_POST oder in deinem fall mit $HTTP_POST_VARS (wieso eigentlich, arbeitest du mit PHP < 4.1.0 (da wurde $_POST anstatt $HTTP_POST_VARS eingeführt soweit ich weiß) oder wieso benutzt du die alte Schreibweise..
        PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

        Kommentar


        • #5
          Ich benutze die alte Schreibweise, damit das Script auch bei PHP Versionen < 4.1.0 noch läuft.

          Wenn ich $_POST['action'] oder nur $action anstatt $HTTP_POST_VARS['action'] benutze funktioniert das Script auch nicht. Habe ich schon alles durchprobiert.

          Nehme ich allerdings das enctype="multipart/form-data" aus dem Form Tag läuft das Script Nur genau das brauche ich ja.

          So nochwas, bin ja dauernd am rumfummeln.

          Läuft:
          PHP-Code:
          <?php
          if ($HTTP_GET_VARS[action] != "add")
          {
          ?>
          <form method="post" action="test.php?action=add" enctype="multipart/form-data">

          <textarea name="about" cols="80" rows="20"></textarea>
          <input type="file" name="bild">

          <input type="submit" name="Submit" value="anlegen">
          </form>
          <?php 
          }
          if (
          $HTTP_GET_VARS[action] == "add")
          {
          echo 
          "test";
          }
          ?>
          Läuft nicht

          PHP-Code:
          <?php
          if ($HTTP_POST_VARS[action] != "add")
          {
          ?>
          <form method="post" action="test.php" enctype="multipart/form-data">
          <input type="hidden" name="action" value="add">

          <textarea name="about" cols="80" rows="20"></textarea>
          <input type="file" name="bild">

          <input type="submit" name="Submit" value="anlegen">
          </form>
          <?php 
          }
          if (
          $HTTP_POST_VARS[action] == "add")
          {
          echo 
          "test";
          }
          ?>
          Und jetzt wüsste ich gerne warum das 2. nicht läuft.
          Zuletzt geändert von kill@motte; 24.09.2004, 20:10.

          Kommentar


          • #6
            das erste dürfte auch nicht laufen da es "$HTTP_GET_VARS[action]" und nicht "$HTTP_POST_VARS[action]" ist.
            [Test] MySQL cli Emulator

            Kommentar


            • #7
              Jo, total übersehen beim Kopieren und Einfügen. Ist korrigiert

              Trotzdem besteht das Problem immernoch.

              Kommentar


              • #8
                hier schon geschaut?

                http://groups.google.com/groups?q=ph...-8&sa=N&tab=wg

                und was gibt var_dump($_POST) ?
                [Test] MySQL cli Emulator

                Kommentar


                • #9
                  @kill@motte

                  Nehme mal an, du willst letztendlich auch ein Bild hochladen. Dazu muss enctype="multipart/form-data" aber angegeben sein.


                  @Niels

                  Wenn ich deinen link-Hinweis richtig verstanden habe, dann ist es in PHP aus Sicherheitsgründen nur möglich, Bilder zusammen mit Daten bei register_globals = OFF zu übergeben und die Daten dann dementsprechend über $_POST['...'] anzusprechen?!?

                  Kommentar


                  • #10
                    @kill@motte

                    Habe dein Script Nr. 2 bei mir ausprobiert. PHP-Version 4.3.2 und Register-globals = off. Es funktioniert, nach absenden wird nur "Test" angezeigt. So soll es doch sein, oder?

                    Kommentar


                    • #11
                      @Mike04

                      Na klar funktioniert es. Nur eben nicht auf dem Webserver mit der PHP Version 4.1.2 Das ist ja das Problem.



                      So hab mal schön in den Newsgroups gewurschtelt, hat mir aber leider nicht so viel erbracht. Allerdings bin ich darauf gekommen eine PHP Version Info auf dem Webserver zu starten und siehe da.

                      --> file_uploads off

                      steht in der Konfiguration. Kein Wunder, das das Ganze nicht funktionieren kann. Wahrscheinlich blockiert der Server das Form Tag enctype="multipart/form-data" und zerstört mir alle Variablen. Naja muss ich mich mal an den Hoster wenden.
                      Zuletzt geändert von kill@motte; 24.09.2004, 20:48.

                      Kommentar


                      • #12
                        Das heisst aber nur, dass keine Bilder hochgeladen werden. Die Variablen aber eigentlich schon. Das diese "zerstört" werden, da wäre ich skeptisch.
                        Dann dürfte dein erstes Script, das mit

                        <form method="post" action="test.php?action=add" enctype="multipart/form-data">

                        ja auch nicht funktionieren.

                        Kommentar


                        • #13
                          So hab doch nochmal weitergeforscht und das Script ein wenig ausgebaut.

                          PHP-Code:
                          <?php
                          if ($HTTP_GET_VARS[action] != "add")
                          {
                          ?>
                          <form method="post" action="test.php?action=add" enctype="multipart/form-data">
                          <input type="hidden" name="Text" value="Dies ist ein Test">

                          <textarea name="about" cols="80" rows="20"></textarea>
                          <input type="file" name="bild">

                          <input type="submit" name="Submit" value="anlegen">
                          </form>
                          <?php 
                          }
                          if (
                          $HTTP_GET_VARS[action] == "add")
                          {
                          echo 
                          $HTTP_POST_VARS['Text'];
                          echo 
                          $HTTP_POST_VARS['about'];
                          }
                          ?>
                          Das Script funzt soweit auch nicht. Den der Text "Dies ist ein Test" müsste bei action == "add" angezeigt werden, genauso wenn ich eines der Textfelder aufülle. Allerdings wird gar nichts angezeigt und daraus schliesse ich das die Variablen nicht übergeben bzw. geblockt werden.

                          Bitte unterscheiden:

                          action="test.php?action=add" - Anweisung, die an den Browser gesendet wird. vgl. normaler Link

                          enctype="multipart/form-data" und die Variablen werden an den Server gesendet. Der Server block alle Variablen aus dem Formular weil file_uploads = off
                          Zuletzt geändert von kill@motte; 24.09.2004, 21:28.

                          Kommentar


                          • #14
                            es muß ja auch
                            PHP-Code:
                            echo $HTTP_POST_VARS['Text'];
                            echo 
                            $HTTP_POST_VARS['about']; 
                            sein...
                            [Test] MySQL cli Emulator

                            Kommentar


                            • #15
                              Wenn du wissen willst, ob die Variablen übergeben werden, dann lass Sie dir doch mal mit echo anzeigen. Also, einfach zum Test mal eine generelle Anzeige vor der if-Anweisung.
                              Zuletzt geändert von Mike04; 24.09.2004, 21:25.

                              Kommentar

                              Lädt...
                              X