2011-12-18 16 views
0

私は、ユーザーが複数のファイルをアップロードできるスクリプトを持っています(最大8個)。 HTMLは、PHPの部分によって生成される:

$max_no_img=8; 
for($i=1; $i<=$max_no_img; $i++){ 
    <div class='photo photo$i'> 
     <div class='new_label'> 
     Foto $i: 
     </div> 
     <div class='new_input'> 
     <input type='file' name='images[]' /> 
     </div> 
    </div>"; 
} 

だからアレイimages[] 8つの値から成ります。しかし、ユーザーがフォームを送信するたびに、フォームは8個のアイテムの配列を生成しているので、データベースに8個の値を挿入します(空であるかどうかに関わらず)。

空の値を設定解除し、ファイルを自分のフォルダにコピーして、データベースにリンクを挿入したいとします。しかし、ここではエラーが発生する部分があります。

$_FILESの配列は4つのもので構成されています。 name,tmp_name,errorおよびsize。どうすればそれを得ることができますか(完全にはimages[0]と言う)は配列から設定解除されるので、実際に値を持つアイテムを続けることができます。

私は、しかし、結果なしで...

unset($_FILES['images'][0]) 

unset($_FILES['images']['name'][0]) 
unset($_FILES['images']['tmp_name'][0]) 
unset($_FILES['images']['error'][0]) 
unset($_FILES['images']['size'][0]) 

、$ _FILES-ARRYから値の設定を解除するにはどのように何かアドバイスを、これを試してみましたか?

+0

うーん、 '解除($ _ FILES [」 images '] [0]) 'が動作するはずです。 'var_dump($ _ FILES)'を投稿してください –

答えて

2

あなただけの代わりに、処理のそれらを無視したり、任意の項目を設定解除することができます

if (!empty($_FILES['images'])) { 
    for ($i = 0; $i < count($_FILES['images']['name']); $i++) { 
     if (empty($_FILES['images']['name'][$i])) { 
      // This item is empty 
      echo "Item $i references an empty field.\n"; 
      continue; 
     } 

     echo "Item $i is a valid file.\n"; 
    } 
} 
+0

ありがとう!これが最も完全な解決策でした:-) – Michiel

2

実際にはunsetのアイテムは必要ありません。単純にアップロードされたファイルに対応していない項目をスキップ:

for($i=1; $i <= $max_no_img; $i++) { 
    if(empty($_FILES['images']['name'][$i])) { 
     continue; // that's all it takes 
    } 
} 
関連する問題