2010-12-14 12 views
0

HTML:サーバーサイドのフォーム検証PHPアップロード

:「+ボタン」

上のクリックは、私はPOSTフィールドをカウントしたときに同じフィールドのクローンを作成する機能whith

Owner: input type="text" name="owner[]" /> 
Category: 
<select name="cat[]"> 
     <option value="clothes">Clothes</option> 
     <option value="shoes">Shoes</option> 
     <option value="accessories">Accessories</option> 
</select> 
Upload: <input type="file" name="image[]" /> 

$num = count($_FILES['image']['name']); 

エンドユーザーがフィールドを何回クローンするかを知りたいからです。

私が望むのは、ユーザーが彼が "+ボタン"を押さえたすべてのフィールドを埋める必要があることを確認します。隠しフィールドをすべてチェックします。

どうすればいいですか?

私はこのような行いカント:

$owner = $_POST['owner'][$i]; 
$cat = $_POST['cat'][$i]; 
$file = $_FILES['image'][$i]; 

if ($owner && $cat && $file) 
    echo "bla bla bla"; 
else 
    echo "fill all the fields!"; 

誰も私を助けることができますか?

は、あなたが事前に確認する必要がありますいくつかのポイントがありますが、あなたに

答えて

3

に感謝します。入力フィールドのname属性を「owner[]」または「cat[]」または「image[]」とすると、配列が取得されます。しかし、入力ファイルのプロパティへのアクセス機能はデフォルトで既に2D配列であるため、3D配列としてこれらのプロパティにアクセスすることができます。

入力ファイルのフィールドのname属性の「[]」を追加したら、あなたは今、配列インデックスは、あなたの質問を1として0で始まるので、あなたが検証することができ、「$_FILES['image'][0]['name']」として第一のファイルの名前を取得します次のようにしてください: -

<?php 
$numOwners = count($_POST['owner']); 
$numCats = count($_POST['cat']); 
$numFiles = count($_FILES['image']); 

// Check to see if the number of Fields for each (Owners, Categories & Files) are the same 
if ($numFiles === $numCats && $numFiles === $numOwners) { 
    $boolInconsistencyOwners = FALSE; 
    $boolInconsistencyCats = FALSE; 
    $boolInconsistencyFiles = FALSE; 

    for ($i = 0; $i < $numFiles; $i++) { 
     if (empty($_POST['owner'][$i])) { 
      $boolInconsistencyOwners = TRUE; 
      break; 
     } 

     if (empty($_POST['cat'][$i])) { 
      $boolInconsistencyCats = TRUE; 
      break; 
     } 

     if (!is_uploaded_file($_FILES['image'][$i]['tmp_name'])) { 
      $boolInconsistencyFiles = TRUE; 
      break; 
     } 
    } 

    if ($boolInconsistencyOwners || $boolInconsistencyCats || $boolInconsistencyFiles) { 
     echo "I knew that there will be some problems with users' mentality!"; 
     // Redirect with proper Error Messages 
    } 
    else { 
     echo "Wow, Users have improved & have become quite obedient!"; 
     // Proceed with normal requirements 
    } 
} 
else { 
    echo "Something fishy is going on!"; 
} 
?> 

希望します。

+1

本当にありがとう、このコードを書いてくれてありがとう、ありがとう、ありがとう、あなたの興味のためにありがとう、ありがたいことに、私はあなたの答えとその仕事の前に私自身のコードを書きました。あなたの時間.... – Swell

+0

@Swell - それは大丈夫です。必要なのは、正しい作業コードを使用していることだけです。また、私はあなたの謙虚さに感謝します。あなたができるもう1つのことは、答えとしてコードを書いて正しいものとしてマークするか、正しいものとして私の答えをマークすることです。これは、他のSOユーザーが、既に解決されているので、この質問に答えを出す必要がないことを知っているからです。あなたが私のことを理解してくれることを願いますありがとう! –

+0

ありがとう、SOユーザーが多分私たちの会話を読んで、私の問題が解決されたことを彼らは知っているでしょう。 – Swell