Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Fileupload (2 Bilder), Pfadübergabe an Mysql-DB

Einklappen

Neue Werbung 2019

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

  • Problem mit Fileupload (2 Bilder), Pfadübergabe an Mysql-DB

    Hallo erstmal, ich habe nach einem PHP-Anfängerforum gegoogelt und bin hier gelandet. Ich hoffe ihr könnt mir weiterhelfen...

    Das Problem ist folgendes: Ich möchte per Formular zwei Bilder uploaden, in einen Webordner verschieben und den Pfad in der DB speichern. Mit dem Formular werden auch noch andere Werte mitübergeben.
    Eigentlich funktioniert fast alles, bis auf den Dateiupload...

    Ich hab als Code:

    if (isset($_FILES['photo1'])) {
    echo 'Dateiname: ' . htmlspecialchars($_FILES['photo1']['name']);
    echo '
    temporärer Dateiname: ' . htmlspecialchars($_FILES['photo1']['tmp_name']);
    echo '
    Dateigröße: ' . $_FILES['photo1']['size'];
    echo '
    MIME-Typ: ' . $_FILES['photo1']['type'];

    move_uploaded_file($_FILES['photo1']['tmp_name'],
    'images/' . basename($_FILES['photo1']['name']));
    }

    (Die echo Ausgabe von Namen, Size und MIME Typ sind nur temporär um zu sehen, was überhaupt gemacht wird. Das schnmeiß ich dann raus)
    Im Formular:

    <input type="file" name="photo1" id="photo1" />

    Als ich statt 'photo1' noch 'datei' als Name hatte (und natürlich oben im PHP CODE auch jeweils), hat wenigstens das Speichern im Verzeichnis noch funktioniert, nachdem ich alles ersetzt hatte nicht mehr;(
    Aber man muss die Bezeichnung doch ändern können? Ich will ja schließlich 2 bilder hochladen?

    Was von vornherein nicht klappte, ist die Datenbankübergabe.
    Ich schreibe die anderen Werte nach dem Muster:
    (htmlentities($_POST['wert']) in die DB.

    und jetzt ne ganz blöde Frage: Warum kann ich den Dateinamen nicht einfach als ($_FILES['photo1']['name'])
    übergeben? Ich meine, dass gibt doch genau den Wert aus, den ich Will?

    Ich glaube, ich habe irgendwo nen Denkfehler

    Danke schonmal
    Greetings
    Shy

  • #2
    Hallo shyrin,

    zunächst herzlich willkommen im phpfriend.de-Forum!

    Hast du im Formular das Attribut "enctype" gesetzt? Falls nein, wird dein Browser auch keine Binärdaten im Protokoll mitsenden. Für das Debugging kannst du dir mit var_dump() das $_FILES-Array in deinem Script ausgeben lassen und dann siehst du, was passiert.

    Ob eine Datei hochgeladen wurde sollte man allerdings mit

    PHP-Code:
    <?php
    if(is_uploaded_file($_FILES['photo1']['tmp_name'])){
     
    //
    }
    ?>
    abfragen. Siehe hierzu auch http://de.php.net/manual/en/function...oaded-file.php.

    Solltest du nicht weiterkommen, meld dich einfach nochmal.
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design [B]before[/B] you start to write code!
    2. Discuss and review it together with [B]experts[/B]!
    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
    4. Write [I][B]clean and reusable[/B][/I] software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar


    • #3
      Hallo Shyrin,

      willkommen hier im Forum.

      Für einen erfolgreichen Upload ist es wichtig, das Formular selbst richtig zu basteln. Das zeigst Du uns leider nicht. Daher können wir dazu nicht viel sagen.
      Wichtig ist, dass
      Code:
      enctype="multipart/form-data"
      mit drinsteht.

      Um Den Code-Schnipsel, den Du gepostet hast, lesbar zu machen, solltest Du ihn in PHP-Tags setzen. Dazu ist der PHP-Button über dem Eingabefeld gedacht. Sollte das (mangels aktiviertem Javascript) nicht funktionieren, dann pack den Code einfach in [ php] [ /php] ein. Die Leerzeichen müssen dabei aber weggelassen werden.


      Was Du mit dem Eintragen in die DB und mit dem direkten Angeben des Dateinamen meinst, ist mir jetzt gerade nicht so ganz klar.
      **********************************
      Nein, ich bin nicht die Signatur.
      Ich putze hier nur.
      **********************************

      Kommentar


      • #4
        oh, danke erstmal für die schnellen Antworten.

        @dr.e: enctype ist gesetzt
        PHP-Code:
        <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" enctype="multipart/form-data">
        das merkwürdige war, dass bevor ich alle Einträge 'datei' mit 'photo1' ersetzt habe, die Bilder immerhin im Verzeichnis angekommen sind. Ich meine ich hab doch nur die Namen ausgetauscht *grübel*
        Aber ich bau die Abfrage natürlich mit ein...

        @Der_Gerhard: das ganze Skript hat um die 300 Zeilen, daher dachte ich, das wäre zu groß fürs Forum. Wenn das in Ordnung ist, kann ich gern noch das komplette Skript posten?

        mit dem Eintragen in die DB und mit dem direkten Angeben des Dateinamen meine ich folgendes:

        ich möchte ja nur den Dateinamen in die Datenbank geschrieben haben. Mit "($_FILES['photo1']['name'])" wird doch genau dieser ausgegeben. Warum kann ich dann nicht den Dateinamen an die Datenbank übergeben, indem ich sage insert in DB Feldname value ($_FILES['photo1']['name'])?
        Und was muss ich stattdessen nehmen?

        Kommentar


        • #5
          Ich hab ja eigentlich erstmal nur nach dem Formular gefragt. Das ist hoffentlich keine 300 Zeilen lang.
          Du hast Recht, das wäre wirklich etwas arg lang um es zu posten.

          Das Eintragen in die DB müsste schon so funktionieren. Hier bräuchten wir aber doch mal etwas Code. Du kannst ja sicher den relevanten Teil herausnehmen und hier posten.

          Wichtiger ist allerdings der Inhalt von $_FILES, wie dr. e schon geschrieben hat.
          **********************************
          Nein, ich bin nicht die Signatur.
          Ich putze hier nur.
          **********************************

          Kommentar


          • #6
            aber klar doch

            Part der für Photo1 relevant ist (photo2 kommt später^^):

            PHP-Code:
              if (isset($_FILES['photo1'])) {
                echo 
            'Dateiname: ' htmlspecialchars($_FILES['photo1']['name']);
                echo 
            '
            tempor&auml;rer Dateiname: ' 
            htmlspecialchars($_FILES['photo1']['tmp_name']);
                echo 
            '
            Dateigr&ouml;&szlig;e: ' 
            $_FILES['photo1']['size'];
                echo 
            '
            MIME-Typ: ' 
            $_FILES['photo1']['type'];



                
            move_uploaded_file($_FILES['photo1']['tmp_name'],
                  
            'images/' basename($_FILES['photo1']['name']));
              } 
            Eintrag in die Datenbank:

            PHP-Code:
            // schreibe Felder in Datenbank
                
            $db mysql_connect('localhost''******''******') OR die("Keine Verbindung:".mysql_error());
                
            $database 'zominthos';
                
            $table 'funde';
                
            mysql_select_db($database) OR die("Konnte Datenbank nicht benutzen: ".mysql_error());
                
            $sql "INSERT
                         INTO 
            $table (find, classify, quadrant, room, trench, unit, layer, fdate, xcoord, ycoord, zcoord, photo1, photo2, name, description)
                         VALUES
                                                      ('"
            .addslashes(htmlentities($_POST['find']))."',
                                      '"
            .addslashes(htmlentities($_POST['classify']))."',
                                      '"
            .addslashes(htmlentities($_POST['quadrant']))."',
                                      '"
            .addslashes(htmlentities($_POST['room']))."',
                                      '"
            .addslashes(htmlentities($_POST['trench']))."',
                                      '"
            .addslashes(htmlentities($_POST['unit']))."',
                                      '"
            .addslashes(htmlentities($_POST['layer']))."',
                                      '"
            .addslashes(htmlentities($_POST['fdate']))."',
                                      '"
            .addslashes(htmlentities($_POST['xcoord']))."',
                                      '"
            .addslashes(htmlentities($_POST['ycoord']))."',
                                      '"
            .addslashes(htmlentities($_POST['zcoord']))."',
                                      '"
            .addslashes(htmlentities($_FILES['photo1']['name']))."',
                                      '"
            .addslashes(htmlentities($_POST['photo2']))."',
                                      '"
            .addslashes(htmlentities($_POST['name']))."',
                                      '"
            .addslashes(htmlentities($_POST['description']))."')";


                
            mysql_query($sql$db) OR die("Cannot write into Database:".mysql_error());
                
            mysql_close($db); 
            Relevanter Teil aus dem Formular:

            PHP-Code:
            <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" enctype="multipart/form-data">

                <label for="photo1">Name of Picture</label>
                  <input type="file" name="photo1" id="photo1" />

            <input type="image" style="WIDTH:22" WIDTH="22" style="HEIGHT:22" HEIGHT="22" value="submit" name="submit" src="../images/button_ok.png">

            Kommentar

            Lädt...
            X