24. januar 2005 - 18:31
Der er
14 kommentarer og 2 løsninger
Foreach til fil upload
Hey! Her har jeg 2 eksempler. Det første virker fint. Men det gør nummer 2 ikke, hvordan gør man det korrekt? <? //Eksempel 1 if (isset($_POST['submit_array'])){ foreach ($_POST['billed'] as $key => $billed){ echo "Så er det gjort for {$key}<br>"; echo "\$billed = {$billed}<br><br>"; } echo "Efter foreach<br>"; }else{ ?> <form action="" method="post" enctype="multipart/form-data"> <input type="text" name="billed[1]"><br> <input type="text" name="billed[2]"><br> <input name="submit_array" type="submit" value="Send Array"> </form> <? } ?> <? //Eksempel 2 if (isset($_POST['submit_array'])){ foreach ($_POST['billed'] as $key => $billed){ //$_FILES['billed']['tmp_name'] virker heller ikke if (substr($_FILES['billed']['name'],-3)!="jpg"){ die ("<META HTTP-EQUIV=Refresh CONTENT='0; URL=admin.php?vis={$_GET['vis']}'><br><p style='font:13px,arial,verdana,sans-serif;'>Fil formatet skal være jpg!</p>"); } $til = "img/pic_{$key}.jpg"; move_uploaded_file($_FILES['billed']['tmp_name'], $til); $src_img = ImageCreateFromJPEG($til); $dst_img = imagecreatetruecolor(507,350); $imginfo = getimagesize($til); ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, 507, 350, $imginfo[0], $imginfo[1]); ImageJPEG($dst_img, $til, "65"); imagedestroy($dst_img); echo "Så er det gjort for {$key}<br>"; } echo "Efter foreach<br>"; }else{ ?> <form action="" method="post"> <input type="file" name="billed[1]"><br> <input type="file" name="billed[2]"><br> <input name="submit_array" type="submit" value="Send Array"> </form> <? } ?>
Annonceindlæg fra itavis
24. januar 2005 - 18:33
#1
ups enctype="multipart/form-data"> er selvfølgelig i eksempel 2
24. januar 2005 - 19:03
#2
Tror den skulle være der sådan her: <?php if (isset($_POST['submit_array'])) { for ($key=0;$key<count($_FILES['billed']['name']);$key++) { if (substr($_FILES['billed']['name'][$key],-3)!="jpg") { die ("<META HTTP-EQUIV=Refresh CONTENT='0; URL=admin.php?vis={$_GET['vis']}'><br><p style='font:13px,arial,verdana,sans-serif;'>Fil formatet skal være jpg!</p>"); } $til = "img/pic_{$key}.jpg"; move_uploaded_file($_FILES['billed']['tmp_name'][$key], $til); $src_img = imagecreatefromjpeg($til); $dst_img = imagecreatetruecolor(507,350); $imginfo = getimagesize($til); imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, 507, 350, $imginfo[0], $imginfo[1]); imagejpeg($dst_img, $til, "65"); imagedestroy($dst_img); echo "Så er det gjort for {$key}<br>"; } echo "Efter foreach<br>"; }else{ ?> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="billed[]"><br> <input type="file" name="billed[]"><br> <input name="submit_array" type="submit" value="Send Array"> </form> <? } ?> Jeg vil dog anbefale en anden måde at navngive dine billeder på, da man næste gang der uploades, overskriver.
24. januar 2005 - 19:04
#3
<? if (isset($_POST['submit_array'])){ foreach ($_FILES['billed']['tmp_name'] as $key => $billed){ if (is_uploaded_file($billed)) { if (substr($_FILES['billed']['name'][$key],-3)!="jpg"){ die ("<META HTTP-EQUIV=Refresh CONTENT='0; URL=admin.php?vis={$_GET['vis']}'><br><p style='font:13px,arial,verdana,sans-serif;'>Fil formatet skal være jpg!</p>"); } $til = "img/pic_{$key}.jpg"; move_uploaded_file($billed, $til); $src_img = ImageCreateFromJPEG($til); $dst_img = imagecreatetruecolor(507,350); $imginfo = getimagesize($til); ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, 507, 350, $imginfo[0], $imginfo[1]); ImageJPEG($dst_img, $til, "65"); imagedestroy($dst_img); echo "Så er det gjort for {$key}<br>"; } } echo "Efter foreach<br>"; }else{ ?> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="billed[]"><br> <input type="file" name="billed[]"><br> <input name="submit_array" type="submit" value="Send Array"> </form> <? } ?>
24. januar 2005 - 19:06
#4
Ja, der er vi rimeligt enige ;O)
24. januar 2005 - 19:14
#5
Jamen det er jo dejligt! Tester det lige efter spise tid. Virker det får i hver 2*pointz/2 .... ;)
24. januar 2005 - 19:14
#6
Havde faktisk brugt en foreach først, men da $billede ikke bliver brugt, lavede jeg det om til en for :) Men hele humlen i begge eksempler er, der kommer et 3d array.
24. januar 2005 - 19:17
#7
I mit eksempel bruger jeg nu $billed 2 steder i foreach-løkken.
24. januar 2005 - 19:18
#8
...men der er osse tilføjet en: if (is_uploaded_file($billed)) {
24. januar 2005 - 19:18
#9
Kunne også godt se at $billed ikke blev brugt. Men min erfaring med foreach og for er hvad jeg har lært siden igår, så manglede lige lidt øverblik og forståelse af as => tingen. Øvelse gør mester..
24. januar 2005 - 19:19
#10
Man kan jo sige at hvis den ligger i arrayet, så er den også uploadet :)
24. januar 2005 - 19:22
#11
Det er nu ikke sikkert at den er uploadet af den grund, da du kan uploade navnet på en local fil. Jeg synes det er god kotume at tjekke med: is_uploaded_file().
24. januar 2005 - 19:23
#12
Du har sikkert ret. Roder sjældent med upload.
24. januar 2005 - 19:24
#13
Jeps, det er helt rigtig. Det havde jeg også taget forbehold for i den sammenhæng hvor det skal ind. Det her var bare en lille test jeg lavede før jeg satte det ind på den påtænkte plads.
24. januar 2005 - 20:23
#14
Hey! Detox brugte din måde, da den passer bedst ind i mine koder. Må gerne se lidt ens ud jo... :) Men I fortjener sku begge points, så smid lige et svar begge 2!
24. januar 2005 - 20:24
#15
Håber du lærte lidt så :)
24. januar 2005 - 20:38
#16
Ok, ja,
Vi tilbyder markedets bedste kurser inden for webudvikling