Image upload

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

  • Image upload

    Hallo PHP-ler!
    Mit folgendem Formular und der dazugehörigen PHP-Datei lade ich insgesamt 3 Bilder auf den Server (klappt auch).
    Meine Fragen:
    1.Gibt es für die PHP-Datei eine elegantere Lösung als jedes Bild einzeln anzugeben?
    2. Kann man den Code so abändern, dass die Namen der Bilder gleichzeitig in einer MySQL-Datenbank gespeichert werden?
    Danke für Eure Hilfe!
    Gruß
    Gismo

    FORM.HTML
    .....
    <input type="file" name="image" size="30">
    <input type="file" name="imagea" size="30">
    <input type="file" name="imageb" size="30">

    <input type="submit" name="submit" value="laden">
    .....


    UPLOAD.PHP

    <?
    if ($image_name != "") {
    move_uploaded_file("$image", "$upload_path$image_name")
    or die("$varfile_error!");
    } else {
    die("$varno_file");
    }
    if ($imagea_name != "") {
    move_uploaded_file("$imagea", "$upload_path$imagea_name")
    or die("$varfile_error!");
    } else {
    die("$varno_file");
    }
    if ($imageb_name != "") {
    move_uploaded_file("$imageb", "$upload_path$imageb_name")
    or die("$varfile_error!");
    } else {
    die("$varno_file");
    }
    ?>

  • #2
    Code:
    <?php
    #Die Datei die in die DB-einträgt
    #folgendes mit allen drei bildern machen
    
    	$i_bild_name = $image;
    
    /*Hier musst du dir unbedingt den Dateinamen aus dem kompletten Pfad ausgeben lassen... gibt ne PHP-Funktion dazu!!!*/
    
    	$hochkomma = chr(92) . chr(39);
    
    	$i_bild_name = strtolower($i_bild_name);
    	$i_bild_name = str_replace($hochkomma , "_",$i_bild_name);
    	$i_bild_name = str_replace(" ","_",$i_bild_name);
    	$i_bild_name = str_replace(":","_",$i_bild_name);
    	$i_bild_name = str_replace("ß","ss",$i_bild_name);
    	$i_bild_name = str_replace("&","und",$i_bild_name);
    	$i_bild_name = str_replace("ä","ae",$i_bild_name);
    	$i_bild_name = str_replace("ö","oe",$i_bild_name);
    	$i_bild_name = str_replace("ü","ue",$i_bild_name);
    	$i_bild_name = str_replace("?","_",$i_bild_name);
    	$i_bild_name = str_replace("/","_",$i_bild_name);
    
    	$i_bild_name = $i_bild_name . ".png";
    
    #ab hier trägt der in die DB ein
    
    	$verbindung = mysql_connect($SERVER,$user,$passwd) or die
    		("Keine Verbindung moeglich");
    	mysql_select_db("db-name") or die 
    		("Die Datenbank existiert nicht");
    
      	$db_entry = "INSERT INTO irgendeinname (bild) VALUES ('$i_bild_name')";
    	$eintragen = mysql_query($db_entry);
    	mysql_close($verbindung);
    ?>
    Die obere aktion mit dem ersetzten von zeichen sorgt dafür, dass es auf anderen plattformen keine probleme gibt, dannach wird der dateiname in die db eingetragen, du kannst bei einer abfrage also mit dem pfad und dem dateinamen aus der db eines der bilder einbinden.

    Musst nur mal schauen, wie das mit der dateiendung ist!!! Bei mir isses halt nur *.png!!!

    Viel Glück damit!

    ~Microsoft®Gegner~
    ~Micro$oft®-Gegner~

    Kommentar


    • #3
      Zum ersten ... die Vorgehensweise über $image_name ist obsolet ... das aktuelle Handling von File Uploads findest Du im Kapitel 18. Handling file uploads der Online Dokumentation.

      Zum anderen ... was spricht dagegen ein Array zu verwenden??
      FORM.HTML
      Code:
      .....
      <input type="file" name="image[]" size="30">
      <input type="file" name="image[]" size="30">
      <input type="file" name="image[]" size="30">
      
      <input type="submit" name="submit" value="laden">
      UPLOAD.PHP
      PHP-Code:
      foreach ( $_FILES["image"]["error"] AS $key => $error ) {
          if ( 
      $error == UPLOAD_ERR_OK ) {
              
      move_uploaded_file($_FILES["image"]["tmp_name"][$key], $upload_path.$_FILES["image"]["name"]);
          } else die(
      $error);

      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        Danke für Eure Hilfe, leider kann ich mich erst heute melden.

        Ich habe mich jetzt für die unten stehende Lösung entschieden.
        Ich habe aber noch ein Problem. Die Daten werden in die Datenbank eingetragen, dass klappt

        auch super. Wenn man aber noch keine Bilder ausgewählt hat oder die Bilder bereits gespeichert

        wurden und man drückt im Browser auf den Refreshbutton, wird wieder ein neuer Datensatz

        eingefügt bzw. die bereits gespeicherten Bilder werden erneut eingefügt. Läßt sich das

        irgendwie verhindern?
        Danke und Gruß
        Gismo

        PHP-Code:
        <?php

        require("../config.php");

        $numoffile 6;
        $file_dir "../images/";
        $filename = array();
        if (
        $_POST) {
            for (
        $i=0;$i<$numoffile;$i++) {
                if (
        trim($_FILES['myfiles']['name'][$i])!="") {
                    
        $newfile $file_dir.$_FILES['myfiles']['name'][$i];
                    
        move_uploaded_file($_FILES['myfiles']['tmp_name'][$i], $newfile);

                    
        // Diese Variable speichert die Namen hintereinander
                    
        array_push ($filename$newfile);
                    
        $j++;
                }
            }
        }
        if (isset(
        $j)&&$j>0)
            print 
        "Ihre Bilder wurden geladen.<br>";
        print 
        "<form method='post' enctype='multipart/form-data'>";
        for(
        $i=0;$i<$numoffile;$i++) {
            print 
        "<input type='file' name='myfiles[]' size='30'><br>";
        }
        print 
        "<input type='submit' name='action' value='Upload'>";
        print 
        "</form>";

        //ab hier wird in die Datenbank eingefügt
        $sql "INSERT INTO bilder (image,imagea,imageb,imagec,imaged,imagee) VALUES 
        ('"
        .$filename[0]."','".$filename[1]."','".$filename[2]."','".$filename[3]."','".$filename[4]."

        ','"
        .$filename[5]."')";
        $con = @mysql_connect($host$user$pass) or
            die(
        "Keine Verbindung möglich: " mysql_error());
        mysql_select_db($database$con); // Datenbank wird geöffnet
        $rs mysql_query($sql$con);

        if(!
        $rs)
        echo 
        "Daten konnten nicht gespeichert werden!";

        ?>

        Kommentar


        • #5
          Danke, hat sich erledigt

          Ich habe einfach ein weiteres Feld eingefügt, in dem die entsprechende Objekt-Nr. eingegeben wird. Dieses Feld habe in MySQL als "unique" deklariert, so dass ein Refresh/Reload keine Auswirkung mehr hat, da der Datensatz mit der Nummer schon vorhanden ist.
          Gruß
          Gismo

          Kommentar


          • #6
            Ich habe einfach ein weiteres Feld eingefügt, in dem die entsprechende Objekt-Nr. eingegeben wird. Dieses Feld habe in MySQL als "unique" deklariert, so dass ein Refresh/Reload keine Auswirkung mehr hat, da der Datensatz mit der Nummer schon vorhanden ist.
            warum kein unique über alle felder? (hab nicht alles gelesen, sorry)

            Kommentar


            • #7
              Zusätzlich zur Objekt-Nr. und den Bildern werden noch diverse andere Daten gespeichert. Die Objekt-Nr. ist fest vorgegeben. Die Bilder und auch Teile der anderen Eingaben können mehrfach vorkommen (es handelt sich um eine Immobilienseite für die Firma bei der ich angestellt bin).
              Gruß
              Gismo

              Kommentar


              • #8
                achso, ich dachte das wäre jetzt zwangsläufig zusätzlich angegeben worden.

                Kommentar


                • #9
                  Hallo, ich habe auch ein Problem beim Upload, vielleicht könnt Ihr mir weiterhelfen:

                  PHP-Code:
                  $datei_verz "/home/confixxhome/meinuser/html/upload";
                  $datei_url "http://meinedomain.de/upload";
                  if ( isset(
                  $fupload) ) {
                      
                  move_uploaded_file($fupload,"$datei_verz/$fupload_name") or die($varfile_error);

                  Es kommt die Fehlermeldung:
                  Warning: Unable to create '/home/confixxhome/meinuser/html/upload/ToDo.txt': Keine Berechtigung in /home/confixxhome/meinuser/html/inhalt10_.php on line 10

                  Warning: Unable to move '/home/confixxhome/meinuser/phptmp/phpF6BJ7S' to '/home/confixxhome/meinuser/html/upload/ToDo.txt' in /home/confixxhome/meinuser/html/inhalt10_.php on line 10
                  Muss ich etwas anders machen wg. der Berechtigung die Datei zu uploaden oder geht der Fileupload doch grundsätzlich nicht bei meinem Provider (hoster24.de)??

                  Kommentar


                  • #10
                    manual gelesen? drüber nachgedacht?

                    Muss ich etwas anders machen wg. der Berechtigung die Datei zu uploaden
                    Natürlich musst du die rechte des dirs in das du uploaden wills entsprechen geben. wenn die net gesetzt sind (wx) dann gehts auch nicht.

                    oder geht der Fileupload doch grundsätzlich nicht bei meinem Provider (hoster24.de)??
                    *schmunzel*

                    Kommentar


                    • #11
                      *schmunzel*
                      nich gut?

                      Kommentar


                      • #12
                        Warum? Brauchst nur im FTP die entsprechenden chmods zu machen!

                        Kommentar


                        • #13
                          Jo klappt! Danke

                          Kommentar


                          • #14
                            Übrigens auch danke das du gesucht hast und nicht direkt nen neuen Thread aufgemacht hast. (muss ja auch mal gesagt werden )

                            Kommentar


                            • #15
                              nach eine Frage

                              Ich möchte, dass mein Script (siehe 4-ter Beitrag in diesem Thread und unten) nachdem ich auf den Submit-Button geklickt habe und die Daten in der Datenbank gespeichert wurden eine neue Seite (xyz.php) aufruft.

                              Irgenwie krieg ich das nicht hin.
                              Danke und Gruß
                              Gismo

                              PHP-Code:
                               
                              <?php

                              require("../config.php");

                              $numoffile 6;
                              $file_dir "../images/";
                              $filename = array();
                              if (
                              $_POST) {
                                  for (
                              $i=0;$i<$numoffile;$i++) {
                                      if (
                              trim($_FILES['myfiles']['name'][$i])!="") {
                                          
                              $newfile $file_dir.$_FILES['myfiles']['name'][$i];
                                          
                              move_uploaded_file($_FILES['myfiles']['tmp_name'][$i], $newfile);

                                          
                              // Diese Variable speichert die Namen hintereinander
                                          
                              array_push ($filename$newfile);
                                          
                              $j++;
                                      }
                                  }
                              }
                              if (isset(
                              $j)&&$j>0)
                                  print 
                              "Ihre Bilder wurden geladen.<br>";
                              print 
                              "<form method='post' enctype='multipart/form-data'>";
                              for(
                              $i=0;$i<$numoffile;$i++) {
                                  print 
                              "<input type='file' name='myfiles[]' size='30'><br>";
                              }
                              print 
                              "<input type='submit' name='action' value='Upload'>";
                              print 
                              "</form>";

                              //ab hier wird in die Datenbank eingefügt
                              $sql "INSERT INTO bilder (image,imagea,imageb,imagec,imaged,imagee) VALUES 
                              ('"
                              .$filename[0]."','".$filename[1]."','".$filename[2]."','".$filename[3]."','".$filename[4]."

                              ','"
                              .$filename[5]."')";
                              $con = @mysql_connect($host$user$pass) or
                                  die(
                              "Keine Verbindung möglich: " mysql_error());
                              mysql_select_db($database$con); // Datenbank wird geöffnet
                              $rs mysql_query($sql$con);

                              if(!
                              $rs)
                              echo 
                              "Daten konnten nicht gespeichert werden!";

                              ?>

                              Kommentar

                              Lädt...
                              X