PHP ile birden fazla dosya yükleme

3 Cevap php

Bu benim HTML biçimlendirme:

<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>

Ben formu gönderdiğinizde, formu boş dosyaları göndererek edilir. Bu, print_r, gönderdiği dizi sahiptir:

Array
(
    [name] => Array
        (
            [0] => thumb.jpg
            [1] => 
            [2] => 
            [3] => 
            [4] => 
        )

    [type] => Array
        (
            [0] => image/jpeg
            [1] => 
            [2] => 
            [3] => 
            [4] => 
        )

    [tmp_name] => Array
        (
            [0] => C:\xampp\tmp\phpEE16.tmp
            [1] => 
            [2] => 
            [3] => 
            [4] => 
        )

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

    [size] => Array
        (
            [0] => 5130
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
        )

)

Tüm bu boş dosyalar gönderilmeden durdurmak için bir yolu var mı? Ben daha sonra komut aşağı bana bir baş ağrısı verecek bir his var gibi. (Hiçbir dosya varsa 4) Her dosya için hata kodunu kontrol düşündüm ve diziden o zaman tanımsız, sen ne düşünüyorsun?

3 Cevap

Bunu yapmanın tek yolu, bir dosya yükleme girişi ve başka (ve başka ...) dosya yükleme girişi ekler bir JavaScript işlevini çağıran bir + düğmesine sadece sahip olmaktır.

Ekstra Dizi değerleri, olsa sorunları vermek sadece aşağıdaki gibi genel bir yükleme fonksiyonu kullanmak ve ince olmalıdır neden görmüyorum:

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

    if (array_key_exists($source, $_FILES) === true)
    {
        $destination = str_replace('\\', '/', realpath($destination));

        if (is_array($_FILES[$source]['error']) === true)
        {
            foreach ($_FILES[$source]['error'] as $key => $value)
            {
                if ($value == UPLOAD_ERR_OK)
                {
                    if (move_uploaded_file($_FILES[$source]['tmp_name'][$key], $destination . basename($_FILES[$source]['name'][$key])) === true)
                    {
                        $result[] = $destination . basename($_FILES[$source]['name'][$key]);
                    }
                }
            }
        }

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

    return $result;
}

Belki (input.value != "") formu göndermeden önce alan değerleri kontrol ve boş eğer DOM onları kaldırmak olabilir.

Ya da, sunucu tarafı, UPLOAD_ERR_NO_FILE sabiti karşı hata kodunu kontrol edin.

Daha sonra kullanıcılar yüklemek istediğiniz her dosya için ekstra bir giriş eklemek için bir javascript işlevi çağıran bir düğmesini tıklatın izin html içine kodlanmış sadece bir dosya girişi ile başlayabiliriz. Oradaki şekilde herhangi bir gereksiz dosya girişleri olmamalıdır. Aynı şekilde size form gönderildiğinde boş girişler test ve bunları kaldırmak için javascript kullanabilirsiniz.