Avatar billede mstorgaard Praktikant
08. marts 2008 - 18:20 Der er 5 kommentarer og
1 løsning

Løkke med billedeupload

Jeg har lavet mig en funktion, som gør at man selv definerer, hvor mange billeder man vil uploade, hvorefter scriptet gentager billedeupload-funktionen det antal gange, men den kommer med fejl i funktionen imagecopyresampled - "supplied argument is not a valid Image resource".

I må også meget gerne komme med kommentarer/rettelser til funktionen, hvis I har nogen.

// Start -- Kode
    if($_GET['a'] == 't' && isset($_POST['upload'])) {
      $allowed_types = array('image/pjpeg', 'image/gif', 'image/png', 'image/jpeg');
      $new_width = 112;
      $done = 0;
      for($i=1;$i<=$_POST['antal'];$i++) {
        if(in_array($_FILES['thefile' . $i]['type'], $allowed_types)) {
          copy ($_FILES['thefile' . $i]['tmp_name'], $_FILES['thefile' . $i]['name']) or die ("Could not copy");
          $imagefile = $_FILES['thefile' . $i]['name'];
          $imagetype = $_FILES['thefile' . $i]['type'];
          list($width, $height) = getimagesize($imagefile);
          $new_height = $new_width / ($width / $height);
          $image_p = imagecreatetruecolor($new_width,$new_height);
          $newname = substr(md5($imagefile . rand(0,1000)), 0, 10) . ($imagetype == "image/gif" ? '.gif' : '.jpg');
          if($imagetype == "image/gif") {
            $img = @imagecreatefromgif($imagefile);
            imagecopyresampled($image_p, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            $thename = $imagefile;
            $thenames = $newname;
            $location = 'upload/' . $thenames;
            imagegif($image_p,$location, 100);
          } else {
            $img = @imagecreatefromjpeg($imagefile);
            imagecopyresampled($image_p, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            $thename = $imagefile;
            $thenames = $newname;
            $location = 'upload/' . $thenames;
            imagejpeg($image_p,$location, 100);
          }
          rename($imagefile, 'upload/full/' . $newname);
          $titel = mysql_escape_string($_POST['titel' . $i]);
          $beskrivelse = mysql_escape_string($_POST['beskrivelse' . $i]);
          $kategori = mysql_escape_string($_POST['kategori' . $i]);
          mysql_query("INSERT INTO galleri VALUES('', '" . $bi . "', '" . $titel . "', '" . $beskrivelse . "', '" . $newname . "', '" . $dato . "', '" . $ip . "', '" . $kategori . "');");
          $done = $done+1;
        }
      }
      echo $done . ' billeder er blevet uploadet<br /><br />';
    }
// Slut -- Kode
Avatar billede olebole Juniormester
08. marts 2008 - 18:26 #1
<ole>

Prøv først at fjerne dine fejlundertrykkelser - '@' - og se, om du så får andre fejl

/mvh
</bole>
Avatar billede mstorgaard Praktikant
08. marts 2008 - 18:36 #2
Jeg har fundet fejlen. Jeg har ikke fået tilføjet en del til png-filer, og det var med png-filer fejlene opstod - og der kom flere fejl, da jeg fjernede @.
Avatar billede mstorgaard Praktikant
08. marts 2008 - 18:44 #3
Nu har jeg lige tilføjet png til funktionen, hvis nogen skulle være interesseret i den. Smid gerne nogle kommentarer til den, og olebole, du må gerne lægge et svar.

    if($_GET['a'] == 't' && isset($_POST['upload'])) {
      $allowed_types = array('image/gif', 'image/png', 'image/jpeg');
      $new_width = 112;
      $done = 0;
      for($i=1;$i<=$_POST['antal'];$i++) {
        if(in_array($_FILES['thefile' . $i]['type'], $allowed_types)) {
          copy ($_FILES['thefile' . $i]['tmp_name'], $_FILES['thefile' . $i]['name']) or die ("Could not copy");
          $imagefile = $_FILES['thefile' . $i]['name'];
          $imagetype = $_FILES['thefile' . $i]['type'];
          list($width, $height) = getimagesize($imagefile);
          $new_height = $new_width / ($width / $height);
          $image_p = imagecreatetruecolor($new_width,$new_height);
          $newname = substr(md5($imagefile . rand(0,1000)), 0, 10) . ($imagetype == 'image/gif' ? '.gif' : ($imagetype == 'image/png' ? '.png' : '.jpg'));
          if($imagetype == 'image/gif') {
            $img = imagecreatefromgif($imagefile);
            imagecopyresampled($image_p, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            $thename = $imagefile;
            $thenames = $newname;
            $location = 'upload/' . $thenames;
            imagegif($image_p,$location, 100);
          } elseif($imagetype == 'image/png') {
            $img = imagecreatefrompng($imagefile);
            imagecopyresampled($image_p, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            $thename = $imagefile;
            $thenames = $newname;
            $location = 'upload/' . $thenames;
            imagejpeg($image_p,$location, 100);
          } else {
            $img = imagecreatefromjpeg($imagefile);
            imagecopyresampled($image_p, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            $thename = $imagefile;
            $thenames = $newname;
            $location = 'upload/' . $thenames;
            imagejpeg($image_p,$location, 100);
          }
          rename($imagefile, 'upload/full/' . $newname);
          $titel = mysql_escape_string($_POST['titel' . $i]);
          $beskrivelse = mysql_escape_string($_POST['beskrivelse' . $i]);
          $kategori = mysql_escape_string($_POST['kategori' . $i]);
          mysql_query("INSERT INTO galleri VALUES('', '" . $bi . "', '" . $titel . "', '" . $beskrivelse . "', '" . $newname . "', '" . $dato . "', '" . $ip . "', '" . $kategori . "');");
          $done = $done+1;
        }
      }
      echo $done . ' billeder er blevet uploadet<br /><br />';
    }
Avatar billede olebole Juniormester
08. marts 2008 - 18:54 #4
Ellers tak. Du løste jo selv problemerne - og det lille skohorn, jeg gav ... man kan ikke tildele halve points  ;o)

Læg selv svar og accepter ... men tak for tanken  :)
Avatar billede olebole Juniormester
08. marts 2008 - 19:02 #5
Et lille PS: I stedet for:
    <form action="fil.php?a=t" method="post" ..........>

- kan du bruge:
    <form action="fil.php" method="post" ..........>
        <input type="hidden" name="a" value="t">

Så ligger alle variabler i $_POST-array'et - og du undgår at 'fedte rundt' med forskellige input kilder. Det er ikke en decideret fejl at bruge både get og post variabler i samme request, men det er mere logisk at vælge én af delene. Desuden er det primære formål i dette scenarium at sende noget til serveren (post) - ikke at hente noget (get)  :)
Avatar billede mstorgaard Praktikant
08. marts 2008 - 19:31 #6
Jeg benytter get for at holde samme orden på hele siden, da jeg bruger get til at definere hvilken undersige jeg benytter. Derfor vil jeg helst holde alle sidedefinitioner som get og alt data, der skal sendes som post (:

Men som du siger, er det jo primært en smagssag.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB