Jump to content

Multiple upload not working ... only 1 taken charge


drisate

Recommended Posts

Hey guys ... for some reason i am trying to upload more then 1 file but the only one taken charge is the first one ... Why?

 

<?php

// POST Debug
echo '<pre>';
print_r($_POST);
echo '</pre>';
echo '------------<pre>';
print_r($_FILES);
echo '</pre>';

$idir = "../images/"; // Path To Images Directory
$tdir = "../images/thumbs/"; // Path To Thumbnails Directory
$twidth = "79"; // Maximum Width For Thumbnail Images
$theight = "59"; // Maximum Height For Thumbnail Images

if ($_POST) {
    $insert = mysql_query("INSERT $table (id, marque, prix, anne, modele, description) VALUE ('', '$_POST[marque]', '$_POST[prix]', '$_POST[anne]', '$_POST[modele]', '$_POST[description]')") or
        die(mysql_error());
    $show = "3"; // profile

    // debug
    $count = count($_FILES['userfile']['name']) + 1;
    echo "<h1>There is : $count</h1><br>";

    for ($i = 0; $i < $count; $i++) {

        $rand = rand("1000", "90000") . "-";

        echo "- Image num: $i<br>";

        if ($_FILES['userfile']['size'][$i] != "0") {

            echo "($i) " . $_FILES['userfile']['name'][$i] . " Prix en charge<br>";

            $_FILES['userfile']['name'][$i] = $rand . $_FILES['userfile']['name'][$i];

            // Uploading/Resizing Script
            $url = $_FILES['userfile']['name'][$i]; // Set $url To Equal The Filename For Later Use
            if ($_FILES['userfile']['type'][$i] == "image/jpg" || $_FILES['userfile']['type'][$i] ==
                "image/jpeg" || $_FILES['userfile']['type'][$i] == "image/pjpeg") {
                $file_ext = strrchr($_FILES['userfile']['name'][$i], '.'); // Get The File Extention In The Format Of , For Instance, .jpg, .gif or .php
                $copy = copy($_FILES['userfile']['tmp_name'][$i], "$idir" . $_FILES['userfile']['name'][$i]); // Move Image From Temporary Location To Permanent Location
                if ($copy) { // If The Script Was Able To Copy The Image To It's Permanent Location
                    print 'Image uploaded successfully.<br />'; // Was Able To Successfully Upload Image
                    $simg = imagecreatefromjpeg("$idir" . $url); // Make A New Temporary Image To Create The Thumbanil From
                    $currwidth = imagesx($simg); // Current Image Width
                    $currheight = imagesy($simg); // Current Image Height
                    if ($currheight > $currwidth) { // If Height Is Greater Than Width
                        $zoom = $twidth / $currheight; // Length Ratio For Width
                        $newheight = $theight; // Height Is Equal To Max Height
                        $newwidth = $currwidth * $zoom; // Creates The New Width
                    } else { // Otherwise, Assume Width Is Greater Than Height (Will Produce Same Result If Width Is Equal To Height)
                        $zoom = $twidth / $currwidth; // Length Ratio For Height
                        $newwidth = $twidth; // Width Is Equal To Max Width
                        $newheight = $currheight * $zoom; // Creates The New Height
                    }
                    $dimg = imagecreate($newwidth, $newheight); // Make New Image For Thumbnail
                    imagetruecolortopalette($simg, false, 256); // Create New Color Pallete
                    $palsize = ImageColorsTotal($simg);
                    for ($i = 0; $i < $palsize; $i++) { // Counting Colors In The Image
                        $colors = ImageColorsForIndex($simg, $i); // Number Of Colors Used
                        ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']); // Tell The Server What Colors This Image Will Use
                    }
                    imagecopyresized($dimg, $simg, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight); // Copy Resized Image To The New Image (So We Can Save It)
                    imagejpeg($dimg, "$tdir" . $url); // Saving The Image
                    imagedestroy($simg); // Destroying The Temporary Image
                    imagedestroy($dimg); // Destroying The Other Temporary Image
                    print 'Image thumbnail created successfully.'; // Resize successful
                } else {
                    print '<font color="#FF0000">ERROR: Unable to upload image.</font>'; // Error Message If Upload Failed
                }
            } else {
                print '<font color="#FF0000">ERROR: Wrong filetype (has to be a .jpg or .jpeg. Yours is '; // Error Message If Filetype Is Wrong
                print $file_ext; // Show The Invalid File's Extention
                print '.</font>';
            }
        }

    }

}

?>

 

Array
(
    [anne] => 
    [marque] => 10
    [model] => 
    [prix] => 
    [description] => 
    [b1] => Ajouter
)

------------
Array
(
    [userfile] => Array
        (
            [name] => Array
                (
                    [0] => 
                    [1] => avatar-63671.jpg
                    [2] => drisate_1.jpg
                )

            [type] => Array
                (
                    [0] => 
                    [1] => image/pjpeg
                    [2] => image/pjpeg
                )

            [tmp_name] => Array
                (
                    [0] => 
                    [1] => /tmp/phpyCD6Ag
                    [2] => /tmp/php6h5K01
                )

            [error] => Array
                (
                    [0] => 4
                    [1] => 0
                    [2] => 0
                )

            [size] => Array
                (
                    [0] => 0
                    [1] => 7741
                    [2] => 12852
                )

        )

)

I'm not sure what you are asking, but three things.

By setting $count = count(...) + 1, you'll have the for loop iterate one beyond your total number of files. I'm guessing, your output below, would have futher read "There is : 4".

 

Also, you may gain better traction, using move_uploaded_file() rather than copy(). PHP docs suggest that if you wish to use copy() in a move sense, then use rename().

 

You're killing your $i counter (probably why it doesn't run more than once). You have an inner for loop using $i (which kills the $i for the outer loop). Change that to $k or something else, and it should run through 'em all.

 

If that is confusing, think of it this way: whatever value $palsize is, that will be the value of $i after the first image is uploaded.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.