Ankündigung

Einklappen
Keine Ankündigung bisher.

$_FILES[ + variables formularfeld

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von Asipak Beitrag anzeigen
    Was ich dir eigentlich mit meinem Codeschnipsel sagen wollte ist, das diese Kombination
    Code:
    foreach($_POST as $type => $value) 
    {
     //Dateien speichern
     $att = $_FILES[$type]['name'];
    totaler Blödsinn ist. Aber du hast ja nicht mal
    Code:
    var_dump($_POST);
    ausprobiert.
    1, 2 und 3
    Das mache ich so, weil ich ja nicht weiss, was übertragen wird. Die Felder werden vom Admin selbst angelegt. Das Formular und das Script zum Speichern kennt also die Felder gar nicht.

    Natürlich habe ich das ausprobiert.

    Code:
    array(6) {
      [1]=>
      string(13) "aslödfölkasdf"
      [2]=>
      string(15) "lköasdfklöjasdf"
      [3]=>
      string(14) "asdlkfjlasdjök"
      ["table"]=>
      string(18) "kddaten_2192_AÖ001"
      ["bestellnummer"]=>
      string(4) "2192"
      ["speichern"]=>
      string(23) "Deine Angaben speichern"
    }
    Auch hier wird $_POST beim uploadfeld nicht übermittelt.

    Kommentar


    • #17
      Fang doch erst mal damit an, dass du den Feldern vernünftige Namen gibst und nicht 1,2,3, etc. Dann darf ich nochmals auf http://de2.php.net/manual/de/function.array-keys.php hinweisen. Und auch ich bescheinige dir einen katastrophalen HTML-Code

      Kommentar


      • #18
        Zitat von bandit600 Beitrag anzeigen
        Fang doch erst mal damit an, dass du den Feldern vernünftige Namen gibst und nicht 1,2,3, etc. Dann darf ich nochmals auf http://de2.php.net/manual/de/function.array-keys.php hinweisen. Und auch ich bescheinige dir einen katastrophalen HTML-Code
        Wie soll ich denn Namen vergeben, wenn ich die Felder gar nicht kenne, die angelegt worden sind. Der Feldname ist die ID aus der Tabelle, damit kann ich dann problemlos einen update darauf machen.

        Kommentar


        • #19
          Also, entweder ist deine DB-Struktur genauso zerschossen wie dein HTML-Code, oder ich verstehe das nicht. Du schreibst vor dem Feld Vorname und dann muss der Feldname 1 sein?! Das ist doch beknackt.

          Kommentar


          • #20
            So siehts aus.

            Vielleicht fängst du (Leinberger) erstmal damit an, dir ein besseres Design zu überlegen. Wir können dir auch dabei helfen, wenn du uns erklärst was du vorhast und was du erreichen möchtest.
            [URL]http://hallophp.de[/URL]

            Kommentar


            • #21
              Zitat von bandit600 Beitrag anzeigen
              Also, entweder ist deine DB-Struktur genauso zerschossen wie dein HTML-Code, oder ich verstehe das nicht. Du schreibst vor dem Feld Vorname und dann muss der Feldname 1 sein?! Das ist doch beknackt.
              Das schreibe ich nicht, den hol ich mir aus der DB.

              PHP-Code:
              "<table class=\"hauptTD\"><tr><td width=30%>$feld($lfdnr):</td><td><input class=textfeldbestellInput type=\"$typ\" name=\"$id\"></td></tr></table>"
              Also, es soll so laufen bzw. läuft so.

              Der Betreiber kann willkürlich Datenfelder vorgeben, die werden dann mit Namen (hier z.B. Vorname) und dem Feldtyp, also entwerder ein Textfeld oder eine Datei so in die DB geschrieben.

              Meldet sich ein User nun an, und von diesem werden Daten gefordert, so werden genau diese Felder aus der Tabelle geholt. Also weiß ich zu diesem Zeitpunkt nicht, was für Felder überhaupt angelegt worden sind, die der User dann mit Daten befüllen muss. Deshalb schreibe ich als Namen die id des Feldes aus und den Feldwert den ich dem Kunden anzeige (hier Vorname) kann ich eigentlich nicht als name verwenden, da es sein kann, dass der User mehrere Vornamen eingeben muss, deshalb die ID als name.

              Beim speichern, weiß ich also die ID des Feldes und kann das update darauf machen.

              Das gleiche gilt natürlich auch für das Uploadfeld. Es können ja auch mehrere Uploads gefordert sein und den Namen dazu muss ich natürlich auch in die Tabelle schreiben um darauf zugreifen zu können. Deshalb möchte ich als name auch hier die ID übergeben.

              Nochmals ich kenne jetzt weder die Feldnamen noch den Feldtyp der angelegten Felder, die der User füllen muss. Ich versuche einfach ein Script zu basteln dass flexibel ist.

              Es funktioniert auch einwandfrei bei den Textfeldern, diese werden richtig in der Tabelle mit den Werten die der User eingibt befüllt. Nur leider funktioniert es bei den Files nicht. Das Script ignoriert einfach die übergebenen Files mit der $id als namen.

              Kommentar


              • #22
                Zitat von Leinberger Beitrag anzeigen
                var_dump($_FILES); ergibt folgendes:
                Code:
                array(1) {
                  [4]=>
                  array(5) {
                    ["name"]=>
                    string(11) "logo_eg.jpg"
                    ["type"]=>
                    string(11) "image/pjpeg"
                    ["tmp_name"]=>
                    string(25) "/mnt/shared/tmp/phpSWa4Kb"
                    ["error"]=>
                    int(0)
                    ["size"]=>
                    int(43215)
                  }
                }
                Ganz offensichtlich ist da eine Datei angekommen, wie man sehen kann. Speicherst Du diese denn auch irgendwo ab?

                Kommentar


                • #23
                  Das Script ignoriert einfach die übergebenen Files mit der $id als namen.
                  Es ignoriert sie nicht, es gibt sie einfach nicht unter den Feldnamen.

                  http://php.net/manual/de/function.error-reporting.php

                  Wenn der Betreiber also ein Formular mit beliebigen Feldern "erzeugt", kannst du doch das Formular in eine Datenbanktabelle eintragen und ihm eine ID zuweisen. Die Felder, die zum Formular gehören, kommen in eine andere Tabelle. Diese Tabelle hat Spalten für den Feldnamen und für den Typ.
                  Nach dem Absenden kannst du also die formularspezifischen Felder nach den Namen aus der Datenbank auswerten. Eingabefelder vom Typ file musst du natürlich anders behandeln als einfache Textfelder. Das $_FILES-Array ist nun mal ein Anderes als das $_POST-Array.
                  [URL]http://hallophp.de[/URL]

                  Kommentar


                  • #24
                    Zitat von RustyXXL Beitrag anzeigen
                    Ganz offensichtlich ist da eine Datei angekommen, wie man sehen kann. Speicherst Du diese denn auch irgendwo ab?
                    Würde ich schon gern,

                    PHP-Code:
                     $att $_FILES[$type]['name'];
                     if(
                    $att != '')
                     {
                       
                    $pfad 'kddaten/'.$bestellnummer.'/'.$type.'/';
                       echo 
                    $pfad;
                       if (!
                    is_dir($pfad))
                       {
                        
                    mkdir($pfad0777);
                       }
                      
                    move_uploaded_file($_FILES[$type]['tmp_name'], $pfad $_FILES[$type]['name']);
                      
                    $sqlab "UPDATE $table SET kdangabe = '".$_FILES[$type]['name']."'";  
                      
                    mysql_db_query($dbase$sqlab);
                     } 
                    aber leider macht er es nicht, da er in die if anweisung gar nicht kommt, $att ist immer leer!

                    Kommentar


                    • #25
                      Zitat von Leinberger Beitrag anzeigen
                      Würde ich schon gern,

                      PHP-Code:
                       $att $_FILES[$type]['name'];
                       if(
                      $att != '')
                       {
                         
                      $pfad 'kddaten/'.$bestellnummer.'/'.$type.'/';
                         echo 
                      $pfad;
                         if (!
                      is_dir($pfad))
                         {
                          
                      mkdir($pfad0777);
                         }
                        
                      move_uploaded_file($_FILES[$type]['tmp_name'], $pfad $_FILES[$type]['name']);
                        
                      $sqlab "UPDATE $table SET kdangabe = '".$_FILES[$type]['name']."'";  
                        
                      mysql_db_query($dbase$sqlab);
                       } 
                      aber leider macht er es nicht, da er in die if anweisung gar nicht kommt, $att ist immer leer!
                      Du iterierst ja auch über $_POST in deinem foreach und da ist der Index 4 eben nicht vorhanden weil dieser Index in $_FILES landet weil es eben eine Datei ist.
                      "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                      Kommentar


                      • #26
                        Ich schlage mal vor, diese beiden Zeilen an den Anfang des Scriptes zu setzen:
                        PHP-Code:
                        error_reporting(E_ALL);
                        ini_set("display_errors"true); 
                        Ich glaube, PHP hat was zu sagen, nur hört keiner hin.

                        Kommentar


                        • #27
                          $type hat wenn ich das richtig verstanden habe ja auch niemals den Wert, den du benötigst, da es nur die Indizes aus $_POST annimmt, diese sich aber natürlich nicht mit denen von $_FILES überschneiden. Darauf, das mal zu überprüfen, bist du jetzt eigentlich schon mehrmals hingewiesen worden. Noch mal in groß:

                          $_POST hat nichts mit $_FILES zu tun

                          Du willst also deinen Schleifenkopf ändern, z.B.:
                          PHP-Code:
                          foreach($_FILES as $type=>$file
                          [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                          [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                          Kommentar


                          • #28
                            Jetzt haben wir 1 und dasselbe 4 mal wiederholt.
                            [URL]http://hallophp.de[/URL]

                            Kommentar


                            • #29
                              Vielleicht kommt es dann ja wenigstens einmal an
                              [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                              [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                              Kommentar


                              • #30
                                Vielen Dank an Euch alle. Habe zwar gemerkt, dass es bzw. ich Euch genervt habe. Aber jetzt funktioniert es.
                                Danke nochmal.

                                Kommentar

                                Lädt...
                                X