2010-12-14 5 views
0

HTML:serveur Form Side Validation PHP avec plusieurs fichiers Télécharger

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

cinque fonction qui clone les mêmes champs quand cliquez sur "+ bouton"

je compte le champ POST avec:

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

parce que je veux savoir combien de fois l'utilisateur final clone les champs. Ce que je veux est Assurez-vous que l'utilisateur doit remplir tous les champs qu'il ouvre avec "+ bouton" je ne peux pas vérifier tous les champs cachés je veux vérifier seulement le champ qu'il ouvre.

alors que puis-je faire?

je ne peux pas faire comme ceci:

$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!"; 

quelqu'un peut me aider?

merci

Répondre

3

Il y a quelques points que vous devez vous assurer au préalable. Chaque fois que vous utilisez l'attribut name d'un champ de saisie en tant que "owner[]" ou "cat[]" ou "image[]", vous obtiendrez alors un tableau. Mais puisque la capacité d'accès aux propriétés du fichier d'entrée est déjà un tableau 2D par défaut, vous pouvez maintenant accéder à ces propriétés sous la forme d'un tableau 3D.

Lorsque vous avez ajouté un « [] » pour l'attribut de champ de fichier d'entrée name, vous allez maintenant obtenir le nom du 1er fichier comme « $_FILES['image'][0]['name'] », car les indices de tableau commencent par 0. Comme par votre question, vous pouvez valider en utilisant la manière suivante: -

<?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!"; 
} 
?> 

Espérons que cela aide.

+1

J'apprécie vraiment le temps que vous avez passé à écrire ce code merci merci merci beaucoup pour votre intérêt, mais malheureusement n'a pas aidé, en fait j'ai écrit mon propre code avant votre réponse et son travail, Désolé pour perdre Votre temps .... – Swell

+0

@Swell - c'est bon. La seule chose qui est nécessaire est que vous utilisez le bon code de travail. Aussi, j'apprécie votre humilité. Une autre chose que vous pouvez faire est que soit vous pouvez écrire le code comme une réponse et le marquer comme le bon ou marquer ma réponse comme la bonne. C'est parce que les autres utilisateurs de SO sauront qu'ils n'ont pas besoin de fournir plus de réponses à cette question car elle est déjà résolue. J'espère que vous avez compris mon point de vue. Merci! –

+0

Merci, les utilisateurs de SO peut-être qu'ils lisent notre conversation et ils sauront que mon problème a été résolu, merci encore. – Swell

Questions connexes