2010-12-14 74 views
0

HTML:服务器端表单验证PHP与多文件上传

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[]" /> 

蒙山功能克隆相同的字段时,点击“+按钮”

我算POST领域:

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

因为我想知道最终用户克隆这些字段的次数。

我想要的是确保用户必须填写他用“+ button”打开的所有字段,我不能检查所有隐藏的字段,我只想检查他打开的字段。

那么我该怎么办?

我不能这样做:

$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[]”,您都将获得一个数组。但是由于输入文件的属性访问能力默认情况下已经是二维数组,因此现在您可以将这些属性作为3D数组访问。

当您添加了一个输入文件字段的name属性“[]”,现在你会得到第1文件的名称为“$_FILES['image'][0]['name']”,因为数组的索引以0根据您的问题入手,你可以验证使用以下方式: -

<?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 2010-12-14 10:05:31

+0

@Swell - 没关系。唯一需要的是您正在使用正确的工作代码。我也感谢你的谦虚。你可以做的另一件事是,你可以写代码作为答案,并将其标记为正确的,或者将我的答案标记为正确答案。这是因为其他SO用户将会知道,他们不需要提供任何更多的答案,因为它已经解决了。希望你明白我的观点。谢谢! – 2010-12-14 10:58:16

+0

谢谢,SO用户可能会阅读我们的对话,他们会知道我的问题已经得到了解决,再次感谢。 – Swell 2010-12-14 11:16:08