Döngü sadece bir dosya ekler için

2 Cevap php
for($i = 0; $i < $uploadsNeeded; $i++){ 

 $file_name = $_FILES['uploadFile'. $i]['name']; 
 $file_name = stripslashes($file_name); 
 $file_name = str_replace("'","",$file_name);
 $uploaddir = "media/files/".$_FILES['uploadFile'. $i]['name']; 
 $copy = move_uploaded_file($_FILES['uploadFile'. $i]['tmp_name'], $uploaddir); 
 if($copy){ 
      $res = db_res("INSERT INTO `atest` SET `filename`='$file_name', `article`='$ArticleUri'");
  } 
}

Nedense şey, sadece seçilen dosyalardan birini yükleme ve veritabanında tek bir dosya eklemek için. Orada daha iyi bir yolu hepsini yakalamak için bu döngü geçmesi için eğer?

2 Cevap

Temelde hepsi aynı şeyi söylüyor: benimki dahil olmak üzere yukarıda 3 yorum bulunmaktadır. Bize sorunu belirlemenize yardımcı olmak için size yeterli bilgi vermemesi. Yani hata ayıklama için bir ilk adım alarak tavsiye ederim:

Check the values of your variables

Siz dosyaları kaydedilir ediliyor ne dizini kontrol etmek $ HTTP_POST_FILES (sunucu üzerinde bilgi oluyor dosyaları görmek için) ve basit yankı tablolar gibi değişkenler için print_r biriyle yapabilirsiniz. Eğer emin onun ne beklediğiniz yapmak için değişken tanımladıktan sonra bir echo $uploaddir; eklemeyi deneyin.

Ayrıca, $ uploadsNeeded varible dile kontrol edin; onun beklediğiniz sayı, doğru orada bir sorun olabilir eğer sen, nasıl ya da nerede bunu tanımlarken görünmüyor.

Eğer bize verdi küçük bilgilerden, benim guess Senin sorunun aşağıdaki kodu içinde yatıyor olmasıdır:

$_FILES['uploadFile' . $i]

Yerine bu deneyin ve eğer çalışırsa bakın:

$filesUploaded = Upload('uploadFile', './media/files/');

foreach ($filesUploaded as $fileUploaded)
{
    $res = db_res("INSERT INTO `atest` SET `filename` = '" . $fileUploaded . "', `article` = '$ArticleUri';");
}

Burada ihtiyacımız olacak Upload() fonksiyonudur:

function Upload($source, $destination)
{
    $result = array();

    if (array_key_exists($source, $_FILES) === true)
    {
        if (is_array($_FILES[$source]['error']) === true)
        {
            foreach ($_FILES[$source]['error'] as $key => $value)
            {
                if ($value == UPLOAD_ERR_OK)
                {
                    $filename = str_replace("'", '', stripslashes(basename($_FILES[$source]['name'][$key])));

                    if (move_uploaded_file($_FILES[$source]['tmp_name'][$key], $destination . $filename) === true)
                    {
                        $result[] = $destination . $filename;
                    }
                }
            }
        }

        else
        {
            $filename = str_replace("'", '', stripslashes(basename($_FILES[$source]['name'])));

            if (move_uploaded_file($_FILES[$source]['tmp_name'], $destination . $filename) === true)
            {
                $result[] = $destination . $filename;
            }
        }
    }

    return $result;
}

Bize kod olası hataları bulmak için $_FILES dizi yazdırırken çok yararlı olacaktır:

echo '<pre>';
print_r($_FILES);
echo '</pre>';

PS: Don't forget your SQL query is vulnerable to SQL Injections