13. april 2011 - 20:12
Der er
12 kommentarer og 1 løsning
Foreach upload fungerer ikke
Hej alle. Jeg sidder lige med et problem med en foreach lykke til en imageupload. Problemet er at den kun vil uploade 1 fil, selvom at der er 3 inputs. Her er koden: <form method="post" enctype="multipart/form-data"> <input type="file" name="fil1" ><br /> <input type="file" name="fil2" ><br /> <input type="file" name="fil3" ><br /> <input type="submit" name="filupload" value="Upload" /> </form> if(billedupload($_FILES)) { echo "SUCCESS!"; } function billedupload($_FILES) { foreach($_FILES as $arrfile){ $allow_types = array("jpg","gif","png"); $upload_dir = "public/images/test/"; if (is_uploaded_file($arrfile["tmp_name"])) { $file_ext = strtolower(pathinfo($arrfile["name"], PATHINFO_EXTENSION)); $newname = date('dmyHis').mt_rand().".".$file_ext; if (in_array($file_ext, $allow_types)) { if (move_uploaded_file($arrfile["tmp_name"], $upload_dir.$newname)) { $image_path = $upload_dir.$newname; $image_path_new = "public/images/test/thumbs/thumb_".$newname; $image = open_image($image_path); $width = imagesx($image); $height = imagesy($image); $width_new = 270; $height_new = $height * ($width_new / $width); $image_resized = imagecreatetruecolor($width_new, $height_new); imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $width_new, $height_new, $width, $height); if (!isset($image_resized)) { $image_resized = $image; }; imagejpeg($image_resized, $image_path_new); return "SUCCESS!"; } else { return false; }; } else { return false; }; } else { return false; }; }; }; Er der nogen der kan se hvad der er galt?
Annonceindlæg fra Infor
13. april 2011 - 20:18
#2
Jeg er lidt usikker på om dette vil virke... foreach($_FILES as $arrfile){ Prøv lige at udskriv: echo '<pre>'; print_r($_FILES); echo '</pre>'; Alternativt ret din form til: <input type="file" name="fil[]" ><br /> <input type="file" name="fil[]" ><br /> <input type="file" name="fil[]" ><br /> Så burde du kunne lave: foreach($_FILES['fil'] ...)
13. april 2011 - 20:23
#3
#2
Det multidimensionelle array vil snyde - for at tilgå de enkelte arrays, skal du skrive
$_FILES["fil"]["name"][0] $_FILES["fil"]["name"][1] $_FILES["fil"]["name"][2] Så det ville være bedre at tælle op og lave en while/for henover.
13. april 2011 - 20:25
#4
en udskrift af $_FILES er fx: Array ( [fil1] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [fil2] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [fil3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) ) Det er bare et ganske almindeligt array, og jeg mener bestemt at det skulle være muligt at bruge foreach med $_FILES.
13. april 2011 - 20:31
#5
Du kan jo debugge lidt videre... Inden i din foreach. Prøv da at udskriv: foreach($_FILES as $arrfile){ echo '<pre>'; print_r($arrfile); echo '</pre>';
13. april 2011 - 20:40
#6
foreach($_FILES as $arrfile) { echo "<pre>"; print_r($arrfile); echo "</pre>"; }; Dette giver: Array ( [name] => 0712100109591925786132.jpg [type] => image/jpeg [tmp_name] => C:\wamp\tmp\php4D9F.tmp [error] => 0 [size] => 147996 ) Array ( [name] => 071210011754201259684.jpg [type] => image/jpeg [tmp_name] => C:\wamp\tmp\php4DAF.tmp [error] => 0 [size] => 152871 ) Array ( [name] => 0712100100151040764086.jpg [type] => image/jpeg [tmp_name] => C:\wamp\tmp\php4DB0.tmp [error] => 0 [size] => 129443 ) Så det er som det skal være
13. april 2011 - 20:46
#7
Debug videre i din kode. Så kan du selv finde fejlen. :o) Eller hvor den fejler. Nu kan jeg se du kører windows. Måske der mangler nogle rettigheder.
13. april 2011 - 20:47
#8
hvilke rettigheder tænker du på? Den uploader jo hjertens gerne et enkelt billede, men ikke flere.
13. april 2011 - 20:56
#9
Det er jo klar den kun uploader en. Følg din kode, og du vil se du har en return "SUCCESS!"; eller FALSE, hvis upload går godt eller skidt. Men denne return komme inden dit loop er færdig med alle 3 filer. Så du skal flytte din return uden for loopet, så du når at køre alle filerne igennem.
13. april 2011 - 20:58
#10
if(billedupload($_FILES)){ echo "SUCCESS!"; } function billedupload($_FILES){ foreach($_FILES as $arrfile){ $allow_types = array("jpg","gif","png"); $upload_dir = "public/images/test/"; if (is_uploaded_file($arrfile["tmp_name"])){ $file_ext = strtolower(pathinfo($arrfile["name"], PATHINFO_EXTENSION)); $newname = date('dmyHis').mt_rand().".".$file_ext; if (in_array($file_ext, $allow_types)){ if (move_uploaded_file($arrfile["tmp_name"], $upload_dir.$newname)){ $image_path = $upload_dir.$newname; $image_path_new = "public/images/test/thumbs/thumb_".$newname; $image = open_image($image_path); $width = imagesx($image); $height = imagesy($image); $width_new = 270; $height_new = $height * ($width_new / $width); $image_resized = imagecreatetruecolor($width_new, $height_new); imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $width_new, $height_new, $width, $height); if (!isset($image_resized)){ $image_resized = $image; } imagejpeg($image_resized, $image_path_new); }else{ return false; } } else { return false; } } else { return false; } } return true; }
13. april 2011 - 21:01
#11
Oh dear god. Det er pinligt :S Tusind tak for hjælpen :) smid lige et svar, så får du pointene. Works like a charm now.
13. april 2011 - 21:06
#12
Svar
13. april 2011 - 21:10
#13
Takker for point.
Vi tilbyder markedets bedste kurser inden for webudvikling