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 champs vides et regex


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut validation formulaire champs vides et regex
    Bonjour à tous,

    Après plusieurs jorus de galère je vous post mon code
    si quelqu'un ouvait me debugger car j'en peux plus je n'arrive pas à faire marcher mon formulaire
    j'ai tenté de plausiuers manière mais rie n'y fait
    je tourne sur wordpress donc je n'aborde pas la conexion à la bdd...
    voici mon code html
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form action="<?php the_permalink(); ?>" method="post"  autocomplete="on">
    <!--sur le champs nom mon required suffit côté client, il faudrait que je passe une vérification de champs comme pour le message-->
    	<p style="font-size:2em;margin-top:0px;"> <label for="nom" > Votre NOM <span class="required"> *</span></label> <input type="text" name="nom" id="nom" placeholder="<?php echo $nom ?>" />
    	</p>
    	<p style="font-size:2em;margin-top:0px;"> <label for="email"> Votre E-MAIL <span class="required"> *</span></label> <input type="email" name="email" id="email" placeholder="<?php echo $email ?>"/>
    	</p>
    	<p style="font-size:2em;margin-top:0px;"> <label for="telephone"> Votre TELEPHONE<span class="required"> *</span></label> <input type="text" name="telephone" id="telephone"  placeholder="<?php echo $telephone ?>"/> 
    	</p>
    	<input type="submit" name="Submit" value="Envoyer">   
    </form>

    et le code php sur la meme page en haut
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php
    //si les différents champs sont remplis alor on commence les traitemebts
    if (isset($_POST['submit']))
    { //alors 1
    	//Récupération des données du formulaire  avec htmlentities qui remplace les caract par leur equiv html pour eviter les injections sql : le code injecté n'aura aucun effet 
    	$nom		= htmlentities ($_POST['nom']);//je crée la variable nom
    	$email		= htmlentities ($_POST['email']);//je crée la variable email
    	$telephone	= htmlentities ($_POST['telephone']);//je crée la variable telephone
    	//Définition des variables servant au traitement de l'adresse électronique et du téléphone en utilisant des expressions régulières.
    	$Syntaxenom='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#i'; //definit les symboles à bannir dans le nom
    	$Syntaxemail='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#i'; //definit les symboles à bannir dans l'adresse mail du visiteur
    	$Syntaxetel='#^0[1-68]([-. ]?[0-9]{2}){4}$#'; //les regex pour le tel	
    	/* On vérifie que tous les champs sont remplis */
        if ( empty($nom) || empty($email) || empty($telephone) )
        {
          $alert = 'Tous les champs doivent être renseignés';
        }
        /* On vérifie que le format des saisies est correct */
        elseif (preg_match($Syntaxenom, $nom) 
                || preg_match($Syntaxemail, $email) 
                || preg_match($Syntaxetel, $telephone))
        {
     
          $alert = 'L\'adresse '.$expediteur.' n\'est pas valide';
        }
     
        /* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
        elseif (!isset($_COOKIE['sent']))
        {
    //...On renseigne l'entete de l'email à envoyer
    							$destinataire='corgier.amandine@free.fr';
    $sujet='formulaire de contact';
    $message='une question est arrivée! <br/>
    Nom : '.$nom.' <br/>
    email : '.$email. '<br/>
    telephone : '.$telephone. '<br />' ;
    $entete_mail='From :'.$email . PHP_EOL . 'Content-type: text/html; charset=UTF-8' . PHP_EOL;
     
            /* Envoi de l'e-mail */
            if (mail($destinataire,$sujet,$message,$entete_mail))
            {
                echo 'E-mail envoyé avec succès';
    	}
     
            else
            {
                echo 'Erreur d\'envoi de l\'e-mail';
            }
     
        }
     
        else
        {
     
        }
    }
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quel est ton problème ? Qu'obtiens-tu ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    et bien justement Rien
    kon se retrouve avec un champ vide ou plusieurs : aucun mesage ne fait que recharger la page on dirait
    idem pour les caractères interdits

    le formulaire es dispo ici

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il y a déjà un problème de majuscule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['Submit']))
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut revision du code
    alors j'ai revu un brin mon code, seulement le formulaire accepte, malgré la condition sur la zone de telephone, les lettres dans le champs (où il ne devrait accepter que les chiffres), ce n'est pas normal, je reçois le mail malgré tout, et là je désespère de trouver un jour ou le code foire...
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
    //Récupération des données du formulaire  avec htmlentities qui remplace les caract par leur equiv html pour eviter les injections sql : le code injecté n'aura aucun effet 
    $nom		= htmlentities ($_POST['nom']);//je crée la variable nom
    $email		= htmlentities ($_POST['email']);//je crée la variable email
    $telephone	= htmlentities ($_POST['telephone']);//je crée la variable telephone
     
    //si les différents champs sont remplis alor on commence les traitemebts
    if (isset($_POST['submit']))
    { //alors 1
    	//Définition des variables servant au traitement de l'adresse électronique et du téléphone en utilisant des expressions régulières.
    	 //definit les symboles à bannir dans le nom
    	$Syntaxemail='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#i'; //definit les symboles à bannir dans l'adresse mail du visiteur
    	$Syntaxetel="/^[0-9]{10}$/i"; //les regex pour le tel	
    	/* On vérifie que tous les champs sont remplis */
        if ( empty($nom) && empty($email) && empty($telephone) )
        {
          echo 'Tous les champs doivent être renseignés';
        }
        /* On vérifie que le format des saisies est correct */
        elseif (preg_match($Syntaxemail, $email) && preg_match($Syntaxetel, $telephone))
        {
           echo 'Ne pas utiliser de caractères spéciaux';
        }
     
        /* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
        else
        {
    //...On renseigne l'entete de l'email à envoyer
    							$destinataire='corgier.amandine@free.fr';
    $sujet='formulaire de contact';
    $message='une question est arrivée! <br/>
    Nom : '.$nom.' <br/>
    email : '.$email. '<br/>
    telephone : '.$telephone. '<br />' ;
    $entete_mail='From :'.$email . PHP_EOL . 'Content-type: text/html; charset=UTF-8' . PHP_EOL;
     
    /* Envoi de l'e-mail */
    if (mail($destinataire,$sujet,$message,$entete_mail))
    {
        echo 'E-mail envoyé avec succès';
    }
    else
    {
        echo 'Erreur d\'envoi de l\'e-mail';
    }
    }
    }
    ?>

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ta condition est à l'envers : tes deux expressions décrivent un email et un numéro de téléphone valides.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    ma condition est à l'envers cad ???

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    ^[0-9]{10}$ représente une chaine de 10 chiffres.
    preg_match($Syntaxetel, $telephone) valide donc que ton numéro de téléphone est bien une chaine de 10 chiffres et toi tu en déduis "Ne pas utiliser de caractères spéciaux"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    //Récupération des données du formulaire  avec htmlentities qui remplace les caract par leur equiv html pour eviter les injections sql : le code injecté n'aura aucun effet 
     
     
    /*Exécution si les champs sont remplis */
    if ( !empty($nom) && !empty($email) && !empty($telephone) )
    { // alors 1
    	$nom		= htmlentities ($_POST['nom'], ENT_QUOTES);//je crée la variable nom
    	$email		= htmlentities ($_POST['email'], ENT_QUOTES);//je crée la variable email
    	$telephone	= htmlentities ($_POST['telephone'], ENT_QUOTES);//je crée la variable telephone
    	$Syntaxemail='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#i'; //definit les symboles à bannir dans l'adresse mail du visiteur
    	$Syntaxetel="#^0[1-9]([\-\. ]?[0-9]{2}){4}$#i"; //les regex pour le tel	
    	if ( preg_match($Syntaxemail, $email) && preg_match($Syntaxetel, $telephone) )
    	{ // alors 2
    		//...On renseigne l'entete de l'email à envoyer
    		$destinataire='corgier.amandine@free.fr';
    		$sujet='formulaire de contact';
    		$message='une question est arrivée! <br/>
    			Nom : '.$nom.' <br/>
    			email : '.$email. '<br/>
    			telephone : '.$telephone. '<br />' ;
    		$entete_mail='From :'.$email . PHP_EOL . 'Content-type: text/html; charset=UTF-8' . PHP_EOL;
    		mail($destinataire,$sujet,$message,$entete_mail);
    		echo 'E-mail envoyé avec succès'; 
    	}	 // fin alors 2
    	else
    	{ echo "Une erreur est survenue lors de l'envoi du formulaire par email"; }
    } // fin alors 1
    ?>
    effectivement ! ce code te semble cohérent ? parce que on peut pas faire plus simple et ca bloque makgré tout . Pour le coup je n'ai aucun message qui s'affiche si erreur ou si mail envoyé.
    Je suis à l'ouest et je ne vois pas ce qui peux foirer dans ce code.
    Il n'y a pas d'erreur de syntaxe.

Discussions similaires

  1. [Débutant] Validation formulaire champ date
    Par titom59280 dans le forum Développement Web avec .NET
    Réponses: 1
    Dernier message: 26/02/2014, 18h18
  2. [AC-2003] Problème ouverture formulaire champs vide
    Par alu1308 dans le forum IHM
    Réponses: 3
    Dernier message: 18/07/2013, 14h48
  3. Empêcher la validation d'un formulaire si champs à vide
    Par ghohm dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/07/2007, 16h21
  4. [FORMULAIRE] champs vides ?
    Par stolx_10 dans le forum IHM
    Réponses: 22
    Dernier message: 17/07/2006, 16h23
  5. [ODBC] Valider formulaire avec champs vides
    Par dorot dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 12/07/2006, 17h15

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