IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Validation formulaire si un champs choisi est vide


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Octobre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 18
    Points : 19
    Points
    19
    Par défaut Validation formulaire si un champs choisi est vide
    Bonjour à tous,

    Comment valider un formulaire HTML/PHP uniquement si l'un des <input type="text" name="..." /> est vide ?

    Je m'explique,

    Depuis peu je reçois des spams venant de mon site ayant un formulaire libre et sans captcha ou autre sécurité.

    Pour ne pas intégrer de captcha ou autre question de vérification j'ai inséré un champ supplémentaire mais qui est masquer via le CSS du site, ce qui permet d'avoir des champs réel pour le robot tel que nom, prénom, mail, tel, message hors pour le visiteur il n'y a que prénom, mail, tel, message.

    Ma déduction est donc que le robot vas forcément vouloir remplir le champ nom qui est invisible sur le site, par cette astuce l'envoi du message s'effectue uniquement si "nom" est vide et donc le robot qui aura rempli ce champ lui ne pourra pas l'envoyé.

    Mon actuel problème est que je ne sais comment interdire l'envoi si ce champ "nom" comporte une valeur.

    Merci d'avance !

  2. #2
    Membre averti
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Points : 374
    Points
    374
    Par défaut
    Bonjour, la vérification est à faire côté serveur en php et non en javascript côté utilisateur car tu ne peux pas être sur que l'utilisateur ou le bot aura js activé.
    Tu n'as qu'à tester si la variable existe et si elle est vide et si c'est le cas, continuer le traitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( ! isset($_POST['caché']) || empty($_POST['caché'])) {
      //ton traitement
    }
    n'oubliez pas de voter si le message vous a aidé


  3. #3
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Octobre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Bonsoir croizet magenta !

    Merci pour t'a réponse. Il y a quelques minutes j'ai enfin pût comprendre et reformuler mon contrôle via javascript.

    Méthode employé avec le fichier .js exécuter pour le formulaire : (prenom étant le name du champ)

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (prenom.val() == '') {
    	prenom.removeClass('highlight');
    	$('.error').hide();			
    } else {
    	prenom.addClass('highlight');
    	$('.error').replaceWith('<div class="error">Robot refusé</div>');
    	$('.error').fadeIn('slow');
    	$(prenom).focus();
    	return false;
    }

    En effet je rajoute ta vérification sous forme de php pour contrôler au cas ou le robot n'exécute pas le script.

    Sujet résolut, je reviens vers vous si d'autre soucis apparaissent ou si les spams persistent.

    Merci et à bientôt !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Octobre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Bonjour Crozet-Magenta !

    Malgré la vérification en php je reçois encore les même type de mail (rafale de 5 en quelques secondes chaque lundi matin).

    J'ai testé la vérification js qui fonctionne bien mais j'ai un doute sur le php...

    Je vous joint le fichier php que j'ai, pouvez-vous m'indiquer ou dois-je inséré la ligne de confirmation que vous m'avez indiquer ?

    Merci beaucoup !

    process.php

  5. #5
    Membre averti
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Points : 374
    Points
    374
    Par défaut
    bonjour,
    il y a quelques problèmes dans ton fichier :
    1) tu dois choisir si tu utilises GET ou POST comme méthode et en autoriser une seule. (je te conseille de choisir POST)
    2) tu ne fais pas de vérification sur les données utilisateur : si je mets "---" dans nom, le formulaire est validé et le mail envoyé, pourtant, le nom n'est pas valide. de même pour le mail et le numéro. pour le commentaire, la validation est plus difficile à faire mais tu peux choisir une longueur minimale et si l'envoi est en mode texte tu dois échapper les caractères avec htmlentities vu que tu utilises ensuite le contenu dans du HTML
    3) petite optimisation pour les erreurs : php sait "ajouter à la suite" dans un tableau, il suffit de faire $tab[] = "un truc"pour ajouter "un truc" dans la case suivante de $tab

    pour la validation de données, php a une fonction pour valider un mail : voir ici et pour le nom tu peux par exemple faire ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (preg_match('/^[a-zA-Z\-\ ]{2,30}$/', $name)) {
        $errors[] = "nom invalide";
    }

    tu as du oublier de mettre le test du champ caché
    tu peux le mettre dans la partie validation comme ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( isset($_POST['hidden']) && !empty($_POST['hidden'])) {
        $errors[] = "désolé vous êtes un robot";
    }

    si le problème n'est toujours pas corrigé, il faudra penser à ajouter un capcha.
    n'oubliez pas de voter si le message vous a aidé


  6. #6
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Octobre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Merci pour votre réponse et excusez le retard de la mienne.

    Si je comprend bien je devrais avoir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //Validation simple HTML
    if ( isset($_POST['hidden']) && !empty($_POST['hidden'])) {
        $errors[] = "désolé vous êtes un robot";}
     
    if (!$name) $errors[count($errors)] = 'Entrez votre nom';
    if (preg_match('/^[a-zA-Z\-\ ]{2,30}$/', $name)) {
        $errors[] = "Nom invalide";}
     
    if (!$email) $errors[count($errors)] = 'Entrez votre email.'; 
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
    	$emailErr = "Mail invalide";}
     
    if (!$numero) $errors[count($errors)] = 'Entrez votre numero.';  
    if (preg_match('^[0-9]{9,13}[0-9]$', $numero)) {
        $errors[] = "numéro invalide";}
     
    if (!$comment) $errors[count($errors)] = 'Entrez votre texte.';  
     
    if (!$errors) {
    A savoir aussi que le formulaire est d'abord vérifié par une fonction .js (que j'ai joint) avant de l'envoyer au php qui lui aussi le valide.
    functions.js

    Merci encore pour votre soutien !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/11/2007, 10h19
  2. Réponses: 11
    Dernier message: 17/01/2007, 22h06
  3. [Pl / Sql ] Tester si un champ blob est vide
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 2
    Dernier message: 27/10/2006, 17h13
  4. [formulaire] savoir si un form est vide
    Par francois78 dans le forum IHM
    Réponses: 3
    Dernier message: 07/11/2005, 15h23
  5. Ne pas afficher un champs qui est vide dans ma BD
    Par yoda_style dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2004, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo