Meherer Bilder uploaden/verarbeiten

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

  • Meherer Bilder uploaden/verarbeiten

    Hallihallo,

    so, frisch aus meinem Karibikurlaub zurück und schon die erste neue Frage

    Und zwar bin ich immer noch an meinem Bild-Uploadscript.

    Funktionniert auch ganz gut mit einem Bild.

    Nun würde ich aber gerne bis zu 4 Bildern hochladen. Die Namen der Bilder sollen in eine DB geschrieben werden.

    Für das erste Bild habe ich das so gemacht:

    PHP-Code:
    echo '                                
                                        

                                        <form action="bildup.php" method="post" enctype="multipart/form-data">
                                        <fieldset>
                                            <legend>Bild(er) transferieren</legend>
                                        <p>
                                            <label for="datei_id">Bild 1auswählen:</label>
                                            <input name="datei" id="datei_id" type="file" />
                                            <input type="hidden" name="step" value="upload"><br>
                                            <input type="hidden" name="besch" 
                                    '
    ;
                                    
                            echo 
    "value=\"$beschreibung2\">";
                            
                            echo 
    '                    
                            
                                            <br>

                                        </fieldset>                                
                                        </form>
                                        
                                    '
    ;
                            
                            } 
    Was ich dann so verarbeitet habe:

    PHP-Code:
    if (isset($_POST['step']) AND $_POST['step'] == "upload")  // Ist etwas im "Step" Fach? Wenn ja, ist es "Upload"?
                        
    {
                            if (
    $_FILES['datei']['error'])
                                {
                                    
    $error "Folgende(r) Fehler ist aufgetreten:";
                                    
    $error .= "Allgemeiner Fehler";
                                }
                            if (
    $_FILES['datei']['size'] > 10000000)
                                {
                                    
    $error "Folgende(r) Fehler ist aufgetreten:";
                                    
    $error .= "Bild zu groß";
                                }
                     
                     
                            if(
    image_valid($_FILES['datei']['type']) === "FALSE")
                                {
                                    die(
    "Bildtyp ungültig");
                                }
                            if(isset(
    $error))
                                {
                                    echo 
    $error;
                                }
                            else
                                {
                                    
    $dir 'uploads';
                                    
    $filename $_FILES['datei']['name'];
                                    
    $_POST['besch'] = mysql_real_escape_string($_POST['besch']);
                                    
    $sql "UPDATE         immobilien 
                                            SET         pfad='" 
    $filename "' 
                                            WHERE         beschreibung='" 
    $_POST['besch']."'; ";
                                            
                                            
                                            
                                    
    $sql2 "SELECT     ID
                                            FROM        immobilien
                                            WHERE        beschreibung='" 
    $_POST['besch']."'; ";
                                            
                                    
    move_uploaded_file($_FILES['datei']['tmp_name'], $dir."/".$filename);
                                    
    mysql_query($sql) OR die(mysql_error());
                                    
    $result mysql_query($sql2) OR die(mysql_error());
                                    
    $row mysql_fetch_assoc($result);
                                    
    $id $row['ID']; 
    Ich habe gelesen dass das Formular für mehrere Bilder so aussehen sollte:

    PHP-Code:
    <p>Zusätzliche Dateien:<br>
                                                            </
    p>
                                                            <!-- 
    Upload meherer Dateien-->
                                                            <
    p>
                                                                <
    label for="datei_id1">Datei 2 auswählen:</label>
                                                                <
    input name="idxarr_datei[]" id="datei_id1" type="file" />
                                                            </
    p>
                                                            <
    p>
                                                                <
    label for="datei_id2">Datei 3 auswählen:</label>
                                                                <
    input name="idxarr_datei[]" id="datei_id2" type="file" />
                                                            </
    p>
                                                            <
    p>
                                                                <
    label for="datei_id3">Datei 4 auswählen:</label>
                                                                <
    input name="idxarr_datei[]" id="datei_id3" type="file" />
                                                            </
    p
    Aber wie verwerte ich diese Bilder? Mit einer while Schleife?

    Ich hoffe ich habe mich jetzt nicht wieder einmal zu umständlich ausgedrückt ^^

    Vielen Dank im voraus

    Maggus

  • #2
    Bau dein Form mal für mehrere Uploads um, lade die Dateien hinauf und mach
    PHP-Code:
    <pre>
    <?php
    var_dump
    ($_FILES);
    ?>
    </pre>
    Dann solltest du schnell sehen wie das Array bei mehreren Fileuploads aufgebaut ist. Danach brauchst du eine Schleife. Wobei es mehr oder weniger egal ist welche Schleife du wählst.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Danke für deine Antwort.

      Ich bekomme dies hier ausgespuckt:

      PHP-Code:
      array(2) {
        [
      "datei"]=>
        array(
      5) {
          [
      "name"]=>
          
      string(13"abq.sized.jpg"
          
      ["type"]=>
          
      string(11"image/pjpeg"
          
      ["tmp_name"]=>
          
      string(33"/mnt/123/sdc/d/1/maggus/phpchEg3X"
          
      ["error"]=>
          
      int(0)
          [
      "size"]=>
          
      int(93692)
        }

        [
      "idxarr_datei"]=>

        array(
      5) {
          [
      "name"]=>
          array(
      3) {
            [
      0]=>
            
      string(13"abo.sized.jpg"
            
      [1]=>
            
      string(16"glenmorangie.jpg"
            
      [2]=>
            
      string(9"hosen.jpg"
          
      }


          [
      "type"]=>
          array(
      3) {
            [
      0]=>
            
      string(11"image/pjpeg"
            
      [1]=>
            
      string(11"image/pjpeg"
            
      [2]=>
            
      string(11"image/pjpeg"
          
      }

          [
      "tmp_name"]=>
          array(
      3) {
            [
      0]=>
            
      string(33"/mnt/123/sdc/d/1/maggus/phpFgmkZ5"
            
      [1]=>
            
      string(33"/mnt/123/sdc/d/1/maggus/php3bgqZg"
            
      [2]=>
            
      string(33"/mnt/123/sdc/d/1/maggus/php3lrZls"
          
      }

          [
      "error"]=>
          array(
      3) {
            [
      0]=>
            
      int(0)
            [
      1]=>
            
      int(0)
            [
      2]=>
            
      int(0)
          }

          [
      "size"]=>
          array(
      3) {
            [
      0]=>
            
      int(97328)
            [
      1]=>
            
      int(11327)
            [
      2]=>
            
      int(40820)
          }
        }

      Leider hänge ich heute irgentwie an den Arrays fest, ich schaffe es einfach nicht mit den zusätzlichen Bildern das gleiche anzustellen wi e mit dem ersten

      Kannst du mir da weiterhelfen?

      Dickes Dankeschön im voraus

      Kommentar


      • #4
        schau dir das mal an =>
        http://de2.php.net/manual/de/feature...load.php#52268

        Kommentar


        • #5
          vielen Dank für den Hinweis. Habe im End-effekt die Richtung gewechselt:

          PHP-Code:
          <?php

          // fonction de validation des images
          function  image_valid($type)
          {
              
          $file_types  = array(  
              
          'image/pjpeg'     => 'jpg',
              
          'image/jpeg'     => 'jpg',
              
          'image/jpeg'     => 'jpeg',
              
          'image/gif'     => 'gif',
              
          'image/X-PNG'    => 'png',
              
          'image/PNG'         => 'png',
              
          'image/png'     => 'png',
              
          'image/x-png'     => 'png',
              
          'image/JPG'     => 'jpg',
              
          'image/GIF'     => 'gif',
              
          'image/bmp'     => 'bmp',
              
          'image/bmp'     => 'BMP',
              );
             
              if(!
          array_key_exists($type$file_types))
              { return 
          "FALSE"; }
              else
              { return 
          "TRUE"; }
          }


          // fonction d'insertion d'une image uploadée dans la bdd
          function upload_multiple($champ_choisi)
          {
              if (
          $_FILES[$champ_choisi]['error'])
                  {
                      
          $error "Folgende(r) Fehler ist aufgetreten:";
                      
          $error .= "Allgemeiner Fehler";
                  }
              if (
          $_FILES[$champ_choisi]['size'] > 10000000)
                  {
                      
          $error "Folgende(r) Fehler ist aufgetreten:";
                      
          $error .= "Bild zu groß";
                  }

              if(
          image_valid($_FILES[$champ_choisi]['type']) === "FALSE")
                  { die(
          "Bildtyp ungültig");     }
              if(isset(
          $error))
                  { echo 
          $error;     }
              else
                  {
                      
          $dir 'uploads';
                      
          $filename $_FILES[$champ_choisi]['name'];
                      
          $_POST['id'] = mysql_real_escape_string($_POST['id']);
                      
          $sql "UPDATE         immobilien 
                              SET         pfad='" 
          $filename "' 
                              WHERE         ID='" 
          $_POST['id'] ."'; ";

                      
          move_uploaded_file($_FILES[$champ_choisi]['tmp_name'], $dir."/".$filename);
                      
          mysql_query($sql) OR die(mysql_error());
                  }        
          }
          ?>
          eingegliedert in diesen Code:

          PHP-Code:
                      if (isset($_POST['step']) AND $_POST['step'] == "upload")  // Ist etwas im "Step" Fach? Wenn ja, ist es "Upload"?

                              
          {
                                       if ( isset (
          $_FILES['bild1']))    
                                          {    
          upload_multiple('bild1');     }    
                                       if ( isset (
          $_FILES['bild2']))    
                                          {    
          upload_multiple('bild2');     }        
                                       if ( isset (
          $_FILES['bild3']))    
                                          {    
          upload_multiple('bild3');     }        
                                       if ( isset (
          $_FILES['bild4']))        
                                          {    
          upload_multiple('bild4');     } 
          Allerdings wird immer nur "bild1" übergeben... Es wird also nur der erste Teil ausgeführt. Danach kommt:

          Fatal error: Call to undefined function: upload_multiple()
          Woran liegt das?

          Danke euch allen!!!

          Kommentar


          • #6
            Du musst das Skript mit der Funktion auch einbinden oder die Funktion sonstwie verfügbar machen!

            Kommentar


            • #7
              Ich wärme dieses Topic noch einmal auf.

              Ich habe das Uploadscript nun fertig (nich schön aber selten ^^).

              Auf meinem Testserver (free.fr) klappt auch alles wunderbar.

              Auber auf meinem richtigen Server werden die Bilder nicht in das End-Verzeichniss kopiert. Fehlermeldungen kommen aber keine.

              Die Bilder werden mit dieser Funktion verschoben:

              PHP-Code:
              function upload_multiple($champ_choisi)
              {






                  if (
              $_FILES['bild']['error'][$champ_choisi])
                      {
                          
              $error "Folgende(r) Fehler ist aufgetreten:";
                          
              $error .= "Allgemeiner Fehler";
                      }
                  if (
              $_FILES['bild']['size'][$champ_choisi] > 10000000)
                      {
                          
              $error "Folgende(r) Fehler ist aufgetreten:";
                          
              $error .= "Bild zu groß";
                      }

                  if(
              image_valid($_FILES['bild']['type'][$champ_choisi]) === "FALSE")
                      { die(
              "Bildtyp ungültig");     }
                  if(isset(
              $error))
                      { echo 
              $error;     }
                  else
                      {
                      
                      
                      
                      
                      
                          if (
              $champ_choisi  == 0)
                          
                              {
                      
                                  
              $dir 'bilder';
                                  
              $filename $_FILES['bild']['name'][$champ_choisi];
                                  
              $_POST['id'] = mysql_real_escape_string($_POST['id']);
                                  
              $sql "UPDATE         immobilien 
                                          SET         pfad='" 
              $filename "' 
                                          WHERE         ID='" 
              $_POST['id'] ."' ";
                      
                                  
              move_uploaded_file($_FILES['bild']['tmp_name'][$champ_choisi], $dir."/".$filename);
                                  
              mysql_query($sql) OR die($sql.'<br />'.mysql_error());
                          
                              }
                          
                          
                          else
                          
                              {
                              
                                  
              $dir 'bilder';
                                  
              $filename $_FILES['bild']['name'][$champ_choisi];
                                  
              $_POST['id'] = mysql_real_escape_string($_POST['id']);
                                  
              $sql "INSERT INTO immo_bilder 
                                                  VALUES ('','" 
              $_POST['id'] ."','" $filename "')";
                      
                                  
              move_uploaded_file($_FILES['bild']['tmp_name'][$champ_choisi], $dir."/".$filename);
                                  
              mysql_query($sql) OR die($sql.'<br />'.mysql_error());                
                              
                              
                              }
                          
                          
                      }        

              Wie schon gesagt, auf dem Testserver läuft alles wie geschmiert...

              Habt Ihr eine Idee von was das kommen könnte?
              Zuletzt geändert von maggus; 05.12.2007, 17:05.

              Kommentar


              • #8
                Die Rechte der Ordner sollten ok sein (755)...

                Kommentar


                • #9
                  Obligate Frage: error_reporting() voll aufgedreht?
                  PHP-Code:
                  //als allererste Zeile deines Scripts
                  error_reporting(E_ALL); 
                  Ergibt dies nun irgendwelche Warnings?
                  Woher kommt diese Var $champ_choisi? Aus einem Form? Falls ja dann könnte dir eine unterschiedliche Einstellung bei register_globals einen Streich spielen...

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    Hi,

                    ja error reporting war von Anfang an voll da und trotzdem keine Fehlermeldung.

                    Die funktion dient in diesem Teil des Scriptes:

                    PHP-Code:
                                if (isset($_POST['step']) AND $_POST['step'] == "upload")  // Ist etwas im "Step" Fach? Wenn ja, ist es "Upload"?
                                    
                    {

                                        
                    // Si le form est parti
                                        
                    if(@$_FILES) {



                        
                    /*
                                               
                                            echo "<pre>";
                                            print_r(@$_FILES);
                                            echo "</pre>";
                                            echo $_POST['id'];   
                        */
                                           
                    $racine=".";

                                           
                    // Pour chaque input
                                           
                    for($i=0;$i<sizeof($_FILES["bild"]["name"]);$i++) {

                                              
                    // Si l'input est vide, on passe
                                              
                    if(!$_FILES["bild"]["name"][$i]) continue;
                                              
                                              
                    upload_multiple($i);
                                           }
                                        } 

                    Kommentar


                    • #11
                      Original geschrieben von jahlives

                      Woher kommt diese Var $champ_choisi? Aus einem Form? Falls ja dann könnte dir eine unterschiedliche Einstellung bei register_globals einen Streich spielen...

                      Gruss

                      tobi [/B]
                      Register_globals kann doch nur on der off sein, nicht?
                      Wie schon gesagt, dass wirklich einzige was nicht funktioniert, ist das die Datei nicht im Ordner ankommt. Dachte zuerst es sei der fallsche Pfad, aber dann würde ja eine Fehlermeldung kommen... Ich hänge wirklich fest

                      Kommentar


                      • #12
                        Hat wirklich keiner eine Idee?

                        Kommentar


                        • #13
                          Register_globals kann doch nur on der off sein, nicht?
                          Und woher soll ich das wissen? Du bist der Servermaster und das musst du wissen (phpinfo() kann helfen)

                          Gruss

                          tobi
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            Sry, da habe ich mich fallsch ausgedrückt, ich wollte fragen ob es noch mehr Einstellungen für Register_globals gibt.

                            Aber du hast recht, auf dem neuen Server ist die Einstellung auf "OFF"...

                            Aber ist es nicht eine Sicherheitslücke, die Einstellung auf "ON" zu ändern?

                            Wenn ja, wie könnte ich denn das Script schreiben, so dass ich die Einstellung auf "OFF" lassen kann?

                            Kommentar


                            • #15
                              Wenn ja, wie könnte ich denn das Script schreiben, so dass ich die Einstellung auf "OFF" lassen kann?
                              Grundlagen.

                              oder Peters seite

                              Kommentar

                              Lädt...
                              X