suicide: Bildupload / wo liegt der Fehler im Code?

Erstmal der code:
----------------------------------------------------
$kat=10; //Nur ein Test , wird normalerweise über ein formular eingeben
$artikel=5; //Nur ein Test , wird normalerweise über ein formular eingeben

function check_size($groesse){       //Überprüft die Grösse des Bildes...funzt irgendwie nicht richtig da die meissten bilder immer 0 sind? 1000 Bytes wäre sowieso zu wenig, aber es geht ja sowieso nicht :)
     if($groesse>1000){
       echo"Leider zu gross!<br>";
      return false;
     }
     else{
       echo"Richtige Groesse!<br>";
      return true;
     }
 }

function check_type($file){       //Überprüft den Typ des Bildes nimmt nur Jpgs und gifs als true....
     if(ereg("gif",$file)or ereg("jpg",$file) or ereg("jpeg",$file)){
       echo"Richtiger Typ";
      return true;
     }
     else{
       echo"Falscher Typ";
      return false;
     }
 }

$grundpfad=getcwd()."/images/"; // Ist der Grundpfad
der Grundpfad kann man auch mit getcwd() rausbekommen nur dann ohne images...

for($a=0;$a<count($userfile);$a++){
  echo"$userfile_name[$a]:$userfile_type[$a]<br>";
  echo"$userfile_name[$a]:$userfile_size[$a]<br>";
 }

for($i=0;$i<count($userfile);$i++){              //Überprüft die Files auf grösse und typ schreibt dann in array accept ob er ein bild hochladen soll ode rnicht...
  $check=check_size($userfile_size[$i]);
  $check2=check_type($userfile_type[$i]);
  if($check==true && $check2==true){
  $accept[]=1;
  }
  else{
  $accept[]=0;
  }
 }

$path=$grundpfad.$kat;                               //setzt den Pfad um das verzeichnis zu erzeugen
 $path2=$path."/".$artikel;                            //setzt den pfad um die bilder zu erzeugen

//Hier muss noch ein catch rein um die fehlermeldung zu killen
 if(!chdir($path))   //versucht in das verzeichnis zu wecheln, falls diese nicht existiert, wird es angelegt
   mkdir($path,0755);
 if(!chdir($path2))
    mkdir($path2,0755);

for($i=0;$i<count($accept);$i++){                          //legt die bilder an
  if($accept[$i]==1){
  $bildtyp=explode(".",$userfile_name[$i]);
  $bildname=$artikel.".".$bildtyp[1];
  echo"<br><br><br>Bildname:$bildname <br>";
  if(copy($userfile[$i],$path2.$bildname))
    echo"Klappt";
  else
    echo" KKKAAAGGGGGGGGEEEEEE";
  }
----------------------------------------------------

Am besten fügt ihr das ganz in eueren Editor ein, damit da ein bisschen Ordnung reinkommt...

Erstmal generelle Erklärung:
Man gibt eine Kategorie sowie eine ArtikelId an. Dadaurch setzt sich der Pfad sowie der bildname auf dem Webserver zusammen. Damit man mehrere Bilder gleichzeitig hochladen kann, wird ein array ,userfile[] weitergegeben.

Meine Probleme:
1. $userfile_size[$a] --> zeigt immer 0 an, wieso? Bei userfile_name[$a] bekomme ich aber etwas.
2. Wenn ich das Bild hochladen möchte, kommt dieser Fehler hier:
Warning: Unable to open 'none' for reading: No such file or directory in /homepages/19/d15828397/htdocs/vintage/test/bilder.php on line XX
wo ist mein bild hin? daher kommt es wahrscheinlich auch, dass $userfile_size[$a]= 0 ist. Wie kann ich das beheben? Wo liegt der Fehler?
Er spuckt aber immernoch $userfile[$a]_name aus.... sehr merkwürdig.

Schon mal vielen Dank für die Hilfe

  1. Lieber Selbstmordkandidat,

    habe leider nicht die Zeit, deinen ganzen Code durchzuackern, aber ein Tipp geht sich aus:

    es gibt da die Funktion getimagesize($picfile), die das Leben ein bisschen leichter macht.

    Michael

    1. es gibt da die Funktion getimagesize($picfile), die das Leben ein bisschen leichter macht.

      die funktion ist zwar recht nütlich und wird auch prompt eingebaut, doch leider hilft sie nicht bei dem problem, dass ich gerade habe...

      trotzdem danke!
      sui

  2. Hi!
    Ich finde den Code ebenfalls sehr kompliziert :-)
    Aber wenn userfile == none heißt das bei mir immer, die Datei ist nicht hochgeladen worden. Der Name kann ja übertragen worden sein, eben nicht die Datei!

    Hast Du auch in deinem Formular ENCTYPE="multipart/form-data" stehen?

    und:

    if($groesse>1000){

    ist die Größe nicht in byte? etwas klein finde ich!

    Grüße
    Andreas

    1. Aber wenn userfile == none heißt das bei mir immer, die Datei ist nicht hochgeladen worden. Der Name kann ja übertragen worden sein, eben nicht die Datei!

      Wieso lädt er die denn nicht hoch? Kann es sein, dass das laden länger dauert als das ausführen des scriptes?

      Hast Du auch in deinem Formular ENCTYPE="multipart/form-data" stehen?

      Ja, habe ich

      und:

      if($groesse>1000){

      ist die Größe nicht in byte? etwas klein finde ich!

      :) ja ich weiß, das steht auch im Kommentar... ich wäre schon glücklich wenn er mir wenigstens sagen würde, wie groß das Bild ist.

  3. <html>
    <head>
    </head>
    <body>
    <?
    include "../globals.php";

    if($submit_3)
    {
     $test=getimagesize($userfile[0]);
     echo "Bildbreite: $test[0] <br>";
     function check_size($groesse){       //Überprüft die Grösse des Bildes...funzt irgendwie nicht richtig da die meissten bilder immer 0 sind?
         if($groesse>1000){
           echo"Leider zu gross!<br>";
          return false;
         }
         else{
           echo"Richtige Groesse!<br>";
          return true;
         }
     }

    function check_type($file){       //Überprüft den Typ des Bildes nimmt nur Jpgs und gifs als true....
         if(ereg("gif",$file)or ereg("jpg",$file) or ereg("jpeg",$file)){
           echo"Richtiger Typ";
          return true;
         }
         else{
           echo"Falscher Typ";
          return false;
         }
     }

    $grundpfad=getcwd()."/images/"; // Ist der Grundpfad

    for($a=0;$a<count($userfile);$a++){
      echo"$userfile_name[$a]:$userfile_type[$a]<br>";
      echo"$userfile_name[$a]:$userfile_size[$a]<br>";
     }

    for($i=0;$i<count($userfile);$i++){              //Überprüft die Files auf grösse und typ schreibt dann in array accept ob er ein bild hochladen soll ode rnicht...
      $check=check_size($userfile_size[$i]);
      $check2=check_type($userfile_type[$i]);
      if($check==true && $check2==true){
      $accept[]=1;
      }
      else{
      $accept[]=0;
      }
     }

    $path=$grundpfad.$kat;                               //setzt den Pfad um das verzeichnis zu erzeugen
     $path2=$path."/".$artikel;                            //setzt den pfad um die bilder zu erzeugen

    //Hier muss noch ein catch rein um die fehlermeldung zu killen
     if(!chdir($path))   //versucht in das verzeichnis zu wecheln, falls diese nicht existiert, wird es angelegt
       mkdir($path,0755);
     if(!chdir($path2))
        mkdir($path2,0755);

    for($i=0;$i<count($accept);$i++){                          //legt die bilder an
      if($accept[$i]==1){
      $bildtyp=explode(".",$userfile_name[$i]);
      $bildname=$artikel.".".$bildtyp[1];
      echo"<br><br><br>Bildname:$bildname <br>";
      if(copy($userfile[$i],$path2.$bildname))
        echo"Klappt";
      else
        echo" KKKAAAGGGGGGGGEEEEEE";
      }
     }
    }
    elseif($submit_2)
    {
     echo"
     <form enctype="multipart/form-data" method="post" action="$PHP_self">
     Send this files:<br>
     <input type="hidden" name="MAX_FILE_SIZE" value="1000">
     <input name="userfile[]" type="file"><br>
     <input type="hidden" value="$kat" name="kat">
     <input type="hidden" value="$artikel" name="artikel">
     <input type="submit" name="submit_3"value="Send files">
     </form>
     ";
    }
    elseif($submit_1)
    {
     $pointer=mysql_query("select * from a_artikel where kategorie='$kat'");
     $laenge=mysql_num_rows($pointer);

    echo"
     <form action="$PHP_SELF" method="post">
     <select name="artikel">";
     for($i=1;$i<=$laenge;$i++)
     {
      $content=mysql_fetch_array($pointer);
      echo "<option value="$content[id]">$content[name]</option>";
     }
      echo"</select><br>
     <input type="hidden" value="$kat" name="kat">
      <input type="submit" name="submit_2" value="Artikel auswählen">
      </form>
     ";
    }
    else
    {
     $pointer=mysql_query("select * from artikelkategorie where shop=0");
     $laenge=mysql_num_rows($pointer);

    echo"
     <form action="$PHP_SELF" method="post">
     <select name="kat">";
     for($i=1;$i<=$laenge;$i++)
     {
      $content=mysql_fetch_array($pointer);
      echo "<option value="$content[id]">$content[name]</option>";
     }
     echo"</select><br>
     <input type="submit" name="submit_1" value="Kategorie auswählen">
     </form>
     ";
     /*Bilder Hochladen:
     <form enctype="multipart/form-data" method="post" action="test.php">
     Send these files:<br>
     <input type="hidden" name="MAX_FILE_SIZE" value="1000">
     <input name="userfile[]" type="file"><br>
     <input type="submit" value="Send files">
     </form>*/
    }
    ?>
    </body>
    </html>

    1. Hi!

      Was ich nicht ganz verstehe(etwas viel Code :-):

      also das Bilderhochladen ist bei elseif($submit_2), oder?

      <input type="hidden" name="MAX_FILE_SIZE" value="1000">

      Welches Bild unter 1000 Byte lädst Du denn da hoch?

      <input name="userfile[]" type="file"><br>

      So wie ich das sehe ist das doch nur ein Feld, warum dann "userfile[]" und nicht einfach "userfile"?

      Grüße
      Andreas

      1. Welches Bild unter 1000 Byte lädst Du denn da hoch?

        AAAAAAAAAAAARRRRRRRGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
        hmmm... das ist allerdings eine sehr gute Frage.... *BREITGRINS* das kommt davon, wenn man die ganze Zeit vor dem gleichen Problem sitzt...die simpelen sachen sind immer die schlimmste.
        Nach dem Motto: "Wo ist denn meine Brille" --> und die sitzt da wo sie sein soll: auf der Nase.

        <input name="userfile[]" type="file"><br>

        So wie ich das sehe ist das doch nur ein Feld, warum dann "userfile[]" und nicht einfach "userfile"?

        in diesem Falle ist es unsinn. Der code soll aber noch erweitert werden, so dass beliebig viele Bilder gleichzeitig hochgeladen werden können... um das ganze dynamisch zu machen benutze ich das array.

        VIELEN DANK!!!!

        suicide

        1. Hi!

          Welches Bild unter 1000 Byte lädst Du denn da hoch?
          AAAAAAAAAAAARRRRRRRGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
          hmmm... das ist allerdings eine sehr gute Frage.... *BREITGRINS* das kommt davon, wenn man die ganze Zeit vor dem gleichen Problem sitzt...die simpelen sachen sind immer die schlimmste.
          Nach dem Motto: "Wo ist denn meine Brille" --> und die sitzt da wo sie sein soll: auf der Nase.

          Na wenns jetzt geht... kenne das :-)

          <input name="userfile[]" type="file"><br>

          So wie ich das sehe ist das doch nur ein Feld, warum dann "userfile[]" und nicht einfach "userfile"?
          in diesem Falle ist es unsinn. Der code soll aber noch erweitert werden, so dass beliebig viele Bilder gleichzeitig hochgeladen werden können... um das ganze dynamisch zu machen benutze ich das array.

          Hatt ich auch mal so gemacht, aber wenn jetzt jemand kommt, mit sattem 28K Modem, 10 Bilder a 200 KB hochladen will... dauert der Spaß, laß mich rechnen, ca. 8 Minuten. Ob das so funktioniert?
          Ist jetzt ewas übertrieben, aber da würde ich mal drüber nachdenken, ob es nicht Sinn macht Bilder nacheinander hochzuladen!

          Grüße
          Andreas