Ankündigung

Einklappen
Keine Ankündigung bisher.

Dateiupload via Formular (input, post) funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • Dateiupload via Formular (input, post) funktioniert nicht

    HTML-Code:
      <form id="login" action="http://localhost:8080/NG/start.php?syspage=account&uid=8&atget=adminNG_useraccount&action=save" method="POST" enctype="multipart/form-data"> <label for="firstname">Vorname</label><input type="text" name="firstname" value="V" maxlength="64" id="firstname" /><br /> <label for="lastname">Nachname</label><input type="text" name="lastname" value="S" maxlength="64" id="lastname" /><br /> <label for="avatar">Avatarpic</label><input type="file" name="avatar" id="avatar" /><br /> <button name="submit">Speichern</button></ form></div>
    Das ist das Formular.

    Das ganze ist in der Datei start.php eingebunden. Die Seite benutzt Bootstrap 4.

    Problem:
    Wenn ich das Formular wie oben beschrieben an sich selber sende, also start.php, dann ist das Array $_FILES leer. Sende ich das Formual an eine 1:1 Kopie start2.php im selben Verzeichnis, dann sind die Daten der Datei im Array $_FILES vorhanden und können verarbeitet werden.

    Hat jemand einen Ansatz was da falsch läuft?

  • #2
    da muss man in start.php reinschauen, nicht in das Formular.

    Übrigens ist es komisch wenn du ein post request mit get parametern verschickst, wie machst du das dann? Mal stehen die Daten in $_GET mal in $_POST? wenn dann würde ich hidden input felder mit uid und "atget" und action save erstellen

    Kommentar


    • #3
      Zitat von BlackScorp Beitrag anzeigen
      Übrigens ist es komisch wenn du ein post request mit get parametern verschickst, wie machst du das dann? Mal stehen die Daten in $_GET mal in $_POST?
      Die GET-Parameter haben nichts mit den Formulardaten zu tun, sondern mit verfügbarer Funktionalität der Seite.

      start.php == start2.php, also wirklich 100% identischer Code.
      Formular von start.php verschickt auf start.php funktioniert nicht.
      Formular von start.php verschickt auf start2.php funktioniert.

      Mit ist einfach nichts bekannt, dass es Einschränkungen bem Versand von Formularen auf sich selbst gibt.

      Die restlichen Felder des Formulars (= außer der File-Upload) funktionieren in beiden Fällen.

      Echt irre.

      Kommentar


      • #4
        vielleicht irgendwas in .htaccess?

        Kommentar


        • #5
          Was sagt denn das var_dump($_REQUEST)?

          Kommentar


          • #6
            .htaccess hatte ich schon geprüft, sogar komplett deaktiviert und auch dafür gesorgt, dass nichts von übergeordneten Verzeichnissen vererbt werden.

            var_dump($_REQUEST) liefert genau das oben beschriebene: Formulardaten vorhanden, nur bei an sich selbst gesendetem Formular eben ohne die Fileinfo ($_FILES).

            Hatte schon JS im Verdacht, aber dann dürfte die !:!-Kopie auch nicht korrekt funktionieren.

            Mache dann morgen mal den Browser/Virenscanner/Firewalltest. Wäre doch gelacht wenn das nicht zu lösen wäre....

            Kommentar


            • #7

              HTML-Code:
              <form ... enctype="multipart/form-data" >
              in beiden Varianten so vorhanden? Achte auf Anführungsstriche.

              Kommentar


              • #8
                start.php == start2.php, also wirklich 100% identischer Code.
                Das heisst du hast die Datei einfach kopiert, Strg+c Strg+V und umbenannt? Mal in Notepad++ geguckt ob die das gleiche Enconding haben (unten rechts, ASCI oder UTF8 )?

                Kommentar


                • #9
                  Es ist vollkommen egal, ob du auf die gleiche Datei oder eine andere Datei verweist.

                  Teste mit folgenden Zeilen und berichte:

                  PHP-Code:
                  <!DOCTYPE html>
                  <html lang=de>
                    <meta charset=UTF-8>
                    <title>Document</title>
                    <h1>Fileupload</h1>
                    <form action="?getValue=save" method=POST enctype=multipart/form-data>
                      <input type=text name=postValue value=Test><br>
                      <label>Avatarpic</label>
                      <input type=file name=avatar>
                      <br>
                      <button>Speichern</button>
                    </form>
                    <?php
                      
                  if($_REQUEST){
                        echo 
                  '<pre>';
                          
                  print_r($_GET);
                          
                  print_r($_POST);
                          
                  print_r($_FILES);
                        echo 
                  '</pre>';
                      }
                    
                  ?>

                  Kommentar


                  • #10
                    Zitat von protestix Beitrag anzeigen
                    Was sagt denn das var_dump($_REQUEST)?
                    Meines Wissens enthält $_REQUEST nur GET und POST values, keine Files.

                    Wobei man hier aufpassen muss, gibt es bei GET und POST gleiche Namen werden die GET Values mit den POST Values überschrieben.Deswegen ist $_REQUEST auch nur bedingt brauchbar.

                    Kommentar


                    • #11
                      PHP-Code:
                      echo '<br />DEBUG REQUEST: ' .'<br />';
                      var_dump($_REQUEST);
                      echo 
                      '<br />DEBUG POST: ' .'<br />';
                      var_dump($_POST);
                      echo 
                      '<br />DEBUG FILES: ' .'<br />';
                      var_dump($_FILES); 
                      Hatte ich schon und bringen wie gesagt keine neuen Erkenntnisse.

                      Dateien wurden mit dem Windows-Explorer kopiert, daher 100% identisch. Zusätzlich Codierung geprüft, beide UTF-8.

                      Ich habe aber inzwischen mit anderen Browsern (Chrome, IE) statt Firefox getestet. Hier taucht ein Session-Problem auf. Warum das nur auf Firefox nicht kommt ist auch wieder komisch, aber zumindest mal ein Ansatz.

                      Kommentar


                      • #12
                        Am Rande:
                        Anstelle von
                        PHP-Code:
                            if($_REQUEST){
                              echo 
                        '<pre>';
                                
                        print_r($_GET);
                                
                        print_r($_POST);
                                
                        print_r($_FILES);
                              echo 
                        '</pre>';
                            } 
                        aus #9 empfehle ich für Debug-Ausgaben immer var_export zu nehmen. Diese Daten können zu Testzwecken dann einfach übernommen werden ( und sind für meinen Geschmack auch besser lesbar):
                        PHP-Code:
                              echo '<pre>';
                                
                        var_export($_GET);
                                
                        var_export($_POST);
                                
                        var_export($_FILES);
                              echo 
                        '</pre>'

                        Kommentar


                        • #13
                          jspit - Das ist wirklich Geschmackssache

                          Code:
                          Array
                          (
                              [getValue] => save
                          )
                          Array
                          (
                              [postValue] => Test
                          )
                          Array
                          (
                              [avatar] => Array
                                  (
                                      [name] => favicon.ico
                                      [type] => image/x-icon
                                      [tmp_name] => C:\Users\xxx\AppData\Local\Temp\php9E5.tmp
                                      [error] => 0
                                      [size] => 1150
                                  )
                          
                          )
                          vs:

                          Code:
                          array (
                            'getValue' => 'save',
                          )array (
                            'postValue' => 'Test',
                          )array (
                            'avatar' => 
                            array (
                              'name' => 'favicon.ico',
                              'type' => 'image/x-icon',
                              'tmp_name' => 'C:\\Users\\xxx\\AppData\\Local\\Temp\\php438A.tmp',
                              'error' => 0,
                              'size' => 1150,
                            ),
                          )
                          vsnase - Was macht denn der Code aus #9 bei Dir ?

                          Wenn der funktioniert, muss man mal etwas mehr Code von Dir sehen.

                          Kommentar


                          • #14
                            #9 funktioniert wie er soll, nur diese eine Datei start.php macht nicht was sie soll. Ich kontorllier jetzt aber erst mal das Sessionproblem. Evtl. löst sich dann alles von selbst.

                            Kommentar


                            • #15
                              ja also, demnach liegt das Problem woanders - was hindert Dich, etwas mehr Code zu zeigen?

                              Kommentar

                              Lädt...
                              X