1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Bild Upload

Dieses Thema im Forum "PHP" wurde erstellt von Deadfish, 8. Mai 2012.

  1. Deadfish

    Deadfish Grünschnabel

    Hallo erstmal ich weis über Bild Upload gibt es hier mehre Themen nur habe da so ein bestimmtes Problem und zwar möchte ich meinen Code so erweitern das ich Mehere Bilder Hochladen kann weis das es ja mit Arrays gehen müsste weis nur nicht genau wie da ich mich mit den Arrays nicht besonders auskenne .

    Hier mal mein Code vom Formular:

    PHP:
    1. <form action="upload.php" method="post"  enctype="multipart/form-data" method="post"  onsubmit="this.go.disabled=true;zeigeBalken();return true;">  <div class="auto-style2">
    2.    
    3.  <select name="albumid">
    4. <?php
    5.  
    6.       $select = "SELECT * FROM album  WHERE id = '$id'";
    7.       $query = mysql_query($select);
    8.       while ($array = mysql_fetch_array($query)) {
    9.             echo '<option value="'.$array["albumid"].'">'.$array["albumname"].'</option>';
    10.       }
    11.  
    12. ?>
    13. <script type="text/javascript">
    14. function zeigeBalken() {
    15.     document.getElementById("ladebalken").style.display = "inline";
    16.     return true;
    17. }
    18. </script>
    19.  
    20. <input type="file"   name="datei" id="fileElem" onchange="handleFiles(this.files)">
    21.  <br><br> <div align="center" id="ladebalken" style="display:none">
    22.   <img  src="../bilder/icon/ladebalken4.gif" alt=""><br>
    23. </div>
    24.  
    25. <input type="submit" name="go" value="Hochladen">
    26.  
    27.  

    ich weis das ich so :

    PHP:
    1. <input type="file" multiple  name="datei" id="fileElem" onchange="handleFiles(this.files)">
    Also mit multiple mehre Bilder Markieren kann bei Upload so solte es ja sein aber da der Upload Script nicht für mehre Bilder ausgelegt ist lädt er nur eine Datei hoch

    Upload Code:

    PHP:
    1. <?php  
    2. include ("../checkuser.php");  
    3. include ("../config.inc.php");
    4. ?>
    5.  
    6. <?php
    7. $id = $_SESSION["user_id"];
    8.  $albumname = $_POST["albumid"];
    9. $dateityp = GetImageSize($_FILES['datei']['tmp_name'])
    10. ;$bild = $_FILES['datei']['name'];
    11. if($dateityp[2] != 0)
    12.    {
    13.  
    14.    if($_FILES['datei']['size'] <  102400000)
    15.       {
    16.       move_uploaded_file($_FILES['datei']['tmp_name'], "../users/$id/Gallery/album/$albumname/".$_FILES['datei']['name']);
    17.       echo "<h1 class='auto-style2'><strong>Dein Bild </strong></h1>
    18. <h1 class='auto-style2'><strong>
    19. <img alt='' height='271' src='../users/$id/Gallery/album/$albumname/$bild' width='316'></strong></h1>
    20. <h1 class='auto-style2'><strong><br>wurde erfolgreich im Album
    21. hinzugef&uuml;gt</strong></h1>
    22. ";
    23.       }
    24.  
    25.    else
    26.       {
    27.          echo "Das Bild darf nicht größer als 100 kb sein ";
    28.       }
    29.  
    30.     }
    31.  
    32. else
    33.     {
    34.     echo "Bitte nur Bilder im Gif bzw. jpg Format hochladen";
    35.     }
    36.    
    37.  
    38.  
    39.  
    40. $aendern = "UPDATE album  Set
    41. albumbild = 'album/$albumname/$bild'
    42. WHERE albumid = '$albumname'";
    43. $update = mysql_query($aendern);
    44.  
    45. ?>
    Danke für eure Hilfe .
  2. Yaslaw

    Yaslaw n/a Moderator

    Im Formular den Namen des Feldes auf einen Array setzen
    name="datei[]"

    Dann schau dir mal mit var_dump($_FILES) den Array genau an. Dann solltest du auch erkwennen was du umbauen musst
  3. Deadfish

    Deadfish Grünschnabel

    Danke erstmal aber wie gesagt kenne mich mit Arrays nicht so aus benutze ich so gut wie nie
    habe das mal probiert aber jetzt erkennt er das bild nicht mehr da ja getimagesize glaub ich nicht lesbar ist.

    PHP:
    1. $dateityp = array(GetImageSize($_FILES['datei']['tmp_name']))
    2. ;$bild = $_FILES['datei']['name'];
    3. if($dateityp[2] != 0)
    4.    {
    5.  
    6.    if($_FILES['datei']['size'] <  102400000)
    7.       {
    8.     count(move_uploaded_file($_FILES['datei']['tmp_name'], "../users/$id/Gallery/album/$albumname/".$_FILES['datei']['name']));
    9.  
  4. Yaslaw

    Yaslaw n/a Moderator

    Und? Wie sieht das aus?
    Ich weiss grad nur noch auswendig, dass die Array-Struktur leicht anderst ist. Aber Auswendig weiss ichs nicht.
  5. Deadfish

    Deadfish Grünschnabel

    Wenn ich dich doch richtig verstanden habe, was ich grade bezweifel dann meinst doch auf der php Seite das das $dateityp = array("($file)") fehlt und dann halt der Count der zählt wie viele Bilder vorhanden sind oder ?
  6. Yaslaw

    Yaslaw n/a Moderator

    Nö. Ich meine du sollst ganz am Anfang im Code var_dump($_FILES) ; reinkopieren. Dann laufen lassen, Files auswählen, abschicken.
    Dann schreibt es dir auf die Seite den Inhalt von $_FILES. Den kannst du kopieren und hier reinschreiben. Dann sehen wir alle wie der Array aufgebaut ist.
    Oder du googelst um herauszufinden wie $_FILES aufgebaut ist oder jemand macht einen Testcode und postet es hier her.

    Und dann können wir deinen Code analysieren - vorher hat es keinen Zweck, ausser man weiss auswendig wie $_FILES bei Mult-File-Upload aufgabaut ist...
  7. Deadfish

    Deadfish Grünschnabel

    Habe das mal so gemacht das sieht schon mal fast richtig aus aber er lädt immer das gleiche Bild
    hoch

    PHP:
    1. var_dump($_FILES) ;
    2. $id = $_SESSION["user_id"];
    3.  $albumname = $_POST["albumid"];
    4. $dateityp = GetImageSize($_FILES['datei']['tmp_name'])
    5. ;$bild = $_FILES['datei']['name'];
    6. if($dateityp[2] != 0)
    7.    {
    8.  
    9.    if ($_FILES['datei']['size'] <  102400000)
    10.       {
    11.        for($i=0; $i< count($dateityp ); $i++){
    12.  
  8. Yaslaw

    Yaslaw n/a Moderator

    Ich gebs auf. Wenn du willst, dass ich dir helfe, dann solltest du mir helfen dir zu helfen.
    Aber wenn du meine Gegenfrage immer ignorierst.......
  9. Deadfish

    Deadfish Grünschnabel

    Ich habe ja das var_dump($_FILES) ; reinkopiert dann hab ich ja eine Array Ausgabe des Uploads stehen und oben ist doch die $files Daten ?

    Sorry wenn das so klingt , aber ich weis nicht genau worauf du hinaus willst
  10. Yaslaw

    Yaslaw n/a Moderator

    Dann muss ich blind sein. In welchem deiner Posts (Rechts im blauen Balken hat es Nummern. Dies ist Post #10)?
  11. Deadfish

    Deadfish Grünschnabel

    So hab mal ein bisschen gegoogelt und gelesen habe den Code etwas verändert und jetzt liest er bei 2 ausgewählten Bilder schon mal beide arryas aus z.b: Array ( [datei] => Array ( [0] => Array ( [name] => logo.png [type] => image/png [tmp_name] => /tmp/phpVlnaOs [error] => 0 [size] => 45068 ) [1] => Array ( [name] => watermark.gif [type] => image/gif [tmp_name] => /tmp/phpW6xKlf [error] => 0 [size] => 550 ) ) )


    hier mal der Code :
    Code (PHP):
    1. <style type="text/css">
    2.     body {
    3.     background-image: url(/skin/my/images/mainbg.jpg);
    4.     background-repeat: repeat;
    5. }
    6.     body p {
    7.     text-align: center;
    8.     color: #333;
    9. }
    10. .auto-style2 {
    11.     text-align: center;
    12. }
    13.  
    14. </style>
    15. <?php  
    16. include ("../checkuser.php");  
    17. include ("../config.inc.php");
    18. function multiple(array $_files, $top = TRUE)
    19. {
    20.     $files = array();
    21.     foreach($_files as $datei=>$file){
    22.         if($top) $sub_datei = $file['name'];
    23.         else    $sub_datei = $datei ;
    24.        
    25.         if(is_array($sub_datei )){
    26.             foreach(array_keys($sub_datei ) as $key){
    27.                 $files[$datei][$key] = array(
    28.                     'name'     => $file['name'][$key],
    29.                     'type'     => $file['type'][$key],
    30.                     'tmp_name' => $file['tmp_name'][$key],
    31.                     'error'    => $file['error'][$key],
    32.                     'size'     => $file['size'][$key],
    33.                 );
    34.                 $files[$datei ] = multiple($files[$datei ], FALSE);
    35.             }
    36.         }else{
    37.             $files[$datei ] = $file;
    38.         }
    39.     }
    40.     return $files;
    41. }
    42.  
    43. $files = multiple($_FILES);
    44. print_r($files);
    45. $id = $_SESSION["user_id"];
    46.  $albumname = $_POST["albumid"];
    47. $dateityp = GetImageSize($_FILES['datei']['tmp_name']);
    48. $bild = $_FILES['datei']['name'];
    49. $datei = $_FILES['datei']['name']; // Dies hab ich noch nicht getestet, da ich den Namen immer nach datum und user id abgespeichert hab.
    50. $datei = str_replace(" ", "_", "$datei");
    51. $datei = htmlentities($datei); // Mit leerzeichen -> _ hab ich auch noch nicht getestet, sollte aba klappen
    52. $dateityp = GetImageSize($_FILES['datei']['tmp_name']);
    53. $erlaubte_Dateiendungen = array( "jpg", "JPEG" );
    54.  
    55.  
    56.  
    57.  
    58. $i = 0;
    59. while($i < count($files)) {
    60.  
    61.                move_uploaded_file($_FILES['datei']['tmp_name'], "../users/$id/Gallery/album/$albumname/$datei");
    62.                   $file        = "../users/$id/Gallery/album/$albumname/$datei";
    63.                   $target    = "../users/$id/Gallery/album/$albumname/$datei";
    64.                   $max_width   = "400"; //Breite ändern
    65.                   $max_height   = "300"; //Höhe ändern
    66.                   $quality     = "100"; //Qualität ändern (max. 100)
    67.                   $src_img     = imagecreatefromjpeg($file);
    68.                   $picsize     = getimagesize($file);
    69.                   $src_width   = $picsize[0];
    70.                   $src_height  = $picsize[1];
    71.                    
    72.                   if($src_width > $src_height)
    73.                   {
    74.                   if($src_width > $max_width)
    75.                   {
    76.                     $convert = $max_width/$src_width;
    77.                     $dest_width = $max_width;
    78.                     $dest_height = ceil($src_height*$convert);
    79.                   }
    80.                   else
    81.                   {
    82.                     $dest_width = $src_width;
    83.                     $dest_height = $src_height;
    84.                   }
    85.                   }
    86.                   else
    87.                   {
    88.                   if($src_height > $max_height)
    89.                   {
    90.                     $convert = $max_height/$src_height;
    91.                     $dest_height = $max_height;
    92.                     $dest_width = ceil($src_width*$convert);
    93.                   }
    94.                   else
    95.                   {
    96.                     $dest_height = $src_height;
    97.                     $dest_width = $src_width;
    98.                   }
    99.                   }
    100.                   $dst_img = imagecreatetruecolor($dest_width,$dest_height);
    101.                   imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);
    102.                   imagejpeg($dst_img, "$target", $quality);
    103. $i++;
    104.          }      
    105.  
    106.  
    107. $aendern = "UPDATE album  Set
    108. albumbild = 'album/$albumname/$bild'
    109. WHERE albumid = '$albumname'";
    110. $update = mysql_query($aendern);
    111.  
    112. ?>
    113.  
  12. Deadfish

    Deadfish Grünschnabel

    Schon gut bin Fertig hab es hin bekommen
  13. Yaslaw

    Yaslaw n/a Moderator

    Also, DEIN Array sieht also so aus: (Ich habe ihn mal formatiert damit man die Struktur OHNE KLAMMERN ZÄHLEN erkennt)
    Code (Text):
    1. Array (
    2.     [datei] => Array (
    3.         [0] => Array (
    4.             [name] => logo.png
    5.             [type] => image/png
    6.             [tmp_name] => /tmp/phpVlnaOs
    7.             [error] => 0
    8.             [size] => 45068
    9.         )
    10.         [1] => Array (
    11.             [name] => watermark.gif
    12.             [type] => image/gif
    13.             [tmp_name] => /tmp/phpW6xKlf
    14.             [error] => 0
    15.             [size] => 550
    16.         )
    17.     )
    18. )
    Ergo ist das hier sicher falsch
    Code (PHP):
    1. while($i < count($files)) {
    2.  
    3.                move_uploaded_file($_FILES['datei']['tmp_name'], "../users/$id/Gallery/album/$albumname/$datei");
    4. ...
    5. }
    Das sollte eher so aussehen
    Code (PHP):
    1. foreach($_FILES['datei'] as $i => $details){
    2.     move_uploaded_file($details['tmp_name'], "../users/$id/Gallery/album/$albumname/$datei");
    3. ...
    4. }
    Gut möglich das auch der Rest vom Code deinem Array falsch abwickelt.
  14. Deadfish

    Deadfish Grünschnabel

    Danke erstmal für deine mühe
    habe es so gemacht geht aber auch

    Code (PHP):
    1. foreach($_FILES['datei']['name'] as $key => $value){
    2.  
  15. Yaslaw

    Yaslaw n/a Moderator

    Dann hast du ein anderes Array als du gepostet hast - ich gebs auf dir weiter zu helfen. Ich fühle mich verarscht. Ich reiss mir den A**** auf dir zu helfen und du lieferst dauernd sich widersprechende und somit FALSCHE Informationen.

    Tschüss

Diese Seite empfehlen