2010-09-21 12 views
0

Je suis en train de coder un formulaire en utilisant PHP et jQuery. J'ai un champ de téléchargement de fichier auquel j'ai appliqué les règles jQuery revalider suivantes:Pourquoi le champ de téléchargement ne peut-il pas sélectionner un nouveau fichier après que jQuery-validate a renvoyé une erreur?

image: { 
accept: "jpeg|jpg|png|gif", 
required: "#edit_ID:blank" 
} 

Le champ de téléchargement de fichier ne doit accepter jpeg/jpg, png ou gif images. Il n'est requis que si le champ avec l'ID "edit_ID" est laissé vide.

Ceci est mon champ de fichier de téléchargement:

<input type="file" id="image" name="image" class="input1" /> 

Le champ de téléchargement de fichiers sélectionne des fichiers sans aucun problème, mais quand jQuery renvoie une erreur à cause d'une règle violée, même si je sélectionne un nouveau fichier de mon ordinateur le fichier que j'ai sélectionné avant que l'erreur apparaisse reste là. C'est comme si elle était désactivée après que jQuery-validate ait donné une erreur.

J'ai essayé de supprimer le jeu de règles pour ce champ, je l'ai testé et je n'ai rencontré aucun problème.

Est-ce que quelqu'un a une idée de ce qui cause ce problème?

Merci.

P.S .: Je rencontre le problème dans Firefox (v.3.6.9) et IE (v.8) mais pas dans Google Chrome (v.5).

Répondre

0

Cela ne répondra pas à votre question initiale, techniquement. Mais, ce n'est pas une bonne idée de faire confiance à la programmation côté client pour faire la validation d'image; votre programme peut être trompé. Puisque vous utilisez PHP de toute façon, pourquoi ne pas utiliser PHP pour effectuer une validation côté serveur?

Tous les fichiers téléchargés sont stockés dans le tableau $ _FILES. Vous pouvez vérifier le type de fichier comme ceci:

<?php 
    foreach($_FILES as $file) 
    { 
     if(!empty($file['type'])) //only check if there's a valid file type 
     { 
      if($file['type'] != 'image/jpeg' && $file['type'] != 'image/png' && $file['type'] != 'image/gif') 
      { 
       //this file is not any one of the accepted formats, so long! 
      } 
      else{//do your processing} 
     } 
     else{//error invalid file} 
    } 
?> 

Si vous voulez instantanément des validations, vous pouvez toujours utiliser AJAX, au lieu de compter uniquement sur le côté client pour faire la validation.

+0

Je préfère utiliser la validation côté client afin que l'utilisateur ne soit pas redirigé vers une page différente avant que les erreurs ne soient affichées. Si je ne comprends pas comment résoudre le problème jQuery alors peut-être que je vais utiliser PHP. –

+0

Vous pouvez utiliser AJAX si vous n'aimez pas que l'utilisateur passe à une autre page ... –

+0

Je vais essayer ça. Merci. –