Bu konuda ilk başlarda çok sıkıntı çekmiştim çünkü yaptığım araştırmalar beni çoklu dosya yükleme, dropzone gibi işlemlere yönlendiriyor ama bi türlü aradığım sonuca ulaşamıyordum. Belki benimle aynı dertten muzdarip birileri olurda bu yazıma ulaşırsa eminim ne demek istediğimi en iyi onlar anlayacaktır. Bir projemde üç adet resimle beraber biraz da text girişlerinin olduğu bir modül vardı onu yaparken bu yazıyı yazmak aklıma geldi.
Senaryomuza gelirsek bir formumuz var içinde de fotoğraf ve başkaca veri girişleri var ancak kullanıcı isterse tek bir resim yükleyebilir isterse onlarca resim yükleyebilir olacak şekilde tasarladık (işin bu kısmını jquery ile hallettik ) birçok sitede görmüşsünüzdür bir resim daha eklemeye yarayan bir buton yaptık kullanıcı isterse bu buton yardımıyla inputları çoğaltabiliyordu. Biz Şimdilik işin o kısmını bir kenara bırakalım ve mantığı anlatabilmek adına üç adet dosya yollayalım
Formumuzun yapısı aşağıda
<input name="ad_soyad" type="text" />
<input name="eposta" type="text" />
<input name="bilgiler" type="text" />
<input name="kullanici_dosyasi[]" type="file" />
<input name="kullanici_dosyasi[]" type="file" />
<input name="kullanici_dosyasi[]" type="file" />
Bu formda text inputlar olması gerektiği gibi kendi name lerine sahip ancak resimlerin inputlarında bir fark var hepsi aynı name’e sahip çünkü projenin özelliği her seferin de daha fazla resim yüklenebiliyor olmasıydı;
İşin bu kısmını siz zaten biliyorsunuzdur bende iyi kötü biliyordum sorun islem.php tarafında nasıl bir yol izlemem gerektiğiydi, işte onuda şöyle çözdüm. Diğer bilgilerin nereye nasıl kaydedileceğini siz bilirsiniz benim anlatacağım kısım dosyaların kaydedilme şekli olacak;
Kodlar aşağıda
if ($_POST['falan_filan']) {
for ($i = 0; $i < count($_FILES['kullanici_dosyasi']); $i++) {
// burada gelen dosyalarımızı döngüye soktuk , i değişkeni her dosyamıza bir numara vermek için lazım olacak
if ($_FILES['kullanici_dosyasi']['size'][$i] > 0) {
//ne olur ne olmaz dosya boyutu kontrolü de yapalım boş dosyalarla uğraşmayalım
if ($_FILES['kullanici_dosyasi']['size'][$i] > 1048576) {
echo "";
exit();
// bir mb dan büyük dosyaları reddedelim
} else {
// isterseniz başka kontrollerde yapın ben diğer işlere başlıyorum
$uploads_dir = 'uploads/documents'; // malum kaydedilecek dosya yolu
@$tmp_name = $_FILES['kullanici_dosyasi']["tmp_name"][$i];
@$name = $_FILES['kullanici_dosyasi']["name"][$i];
$yol = $uploads_dir . "/" . $name;
@move_uploaded_file($tmp_name, "$yol");
//ben db’ye dosyayı yoluyla beraber kaydettim ama siz isterseniz sadece adını da kaydedebilirsiniz size kalmış
$belge_kayit = $db->prepare("INSERT INTO belgeler SET belge=?");
$belge_kayit->execute(array($yol));
}
}
}
}
Hepsi bu kadar daha fazla bilgiye buradan ulaşabilirsiniz.