Afficher un message d'erreur sur formulaire php

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Highbonoboo, 14 Mai 2009.

  1. Highbonoboo
    Highbonoboo Nouveau WRInaute
    Inscrit:
    14 Mai 2009
    Messages:
    7
    J'aime reçus:
    0
    Bonjour,

    voilà quelques temps que je m'arrache les cheveux avec mon 1er formulaire php.
    Si tous les champs sont remplis, un mail m'est envoyé et je redirige vers une page html "merci.html".
    jusque là pas de soucis. Sauf que j'aimerais que s'affiche un message type "Vous devez remplir tous les champs" sur mon formulaire lorsqu'un des champs n'est pas saisi.
    N'y arrivant pas, en attendant de trouver une solution, je redirige vers une page "erreur.html" lorsque les champs ne sont pas tous remplis...

    Une bonne âme pour me donner un coup de main ?

    Merci d'avance.

    Voilà le code de ma page de traitement "contact.php :

    <?php

    if(isset($_POST) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message']) && isset($_POST['sujet'])){
    extract($_POST);
    if(!empty($nom) && !empty($email) && !empty($message) && !empty($sujet)){
    $message=str_replace("\'","'",$message);
    $sujet=str_replace("\'","'",$sujet);
    $destinataire="[email protected]";
    $msg="
    Nom : $nom \n
    Sujet : $sujet \n
    Email : $email \n
    Message : $message";
    $entete="From: $nom \n Reply-To: $email";
    mail($destinataire,$sujet,$msg,$entete);
    Header("Location: http://mondomaine.com/merci.html");

    }
    else{
    Header("Location: http://mondomaine.com/erreur1.html");
    }
    }
    ?>
     
  2. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    déjà, extract($_POST); pose de gros problèmes de sécurité, car on peut y insérer les variables que l'on veut dans ton script, de cette façon
     
  3. ybet
    ybet WRInaute accro
    Inscrit:
    22 Novembre 2003
    Messages:
    7 419
    J'aime reçus:
    1
    J'utilise un truc un peu particulier mais qui marche.

    Vient de le taper de mémoire, peut-être quelques erreurs de syntaxe. En plus, via $correct, je fais d'autres trucs comme supprimer des messges avec des termes interdits comme médicaments ou autres. Tu a aussi une autre solution http://www.ybet.be/internet14/php-10-a/contact.phh (l'extension est bonne, c'est pour pouvoir le visualiser), avec comme explications -http://www.ybet.be/internet14/php-10-a.php
     
  4. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    le mieux étant de faire une première vérification en js, puis la 2° en php. Comme ça, pour l'internaute classique, le message lui indiquera le problème avant de poster. Pour les spammeurs, le filtre php bloquera le reste
     
  5. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    Et les internautes qui ont le javascript désactivé ;)
     
  6. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    ben pareil, ça sera bloqué, si besoin, par la partie php
     
  7. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 011
    J'aime reçus:
    133
    Perso je ne fais jamais de validation côté navigateur : toujours côté serveur.
     
  8. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    faire les 2 est plus pratique : ça évite le "post" d'un formulaire incomplet, pour l'internaute "classique" (js activé et qui ne tente pas de spam ou hack)
     
  9. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 011
    J'aime reçus:
    133
    En fait j'ai une classe de gestion de formulaire qui me génère les messages d'erreurs et recharge le formulaire si des erreurs sont présentes dans la saisie de celui-ci, donc ça ne me dérange pas :)
     
  10. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    J'utilise le même principe que décrit plus haut.
    Avant de récupérer les variables, j'ai un
    $valid=1;

    dès qu'une variable _post n'est pas ou mal renseignée, je passe en $valid=0;

    a la fin, je vérifie, si $valid==1 je traite les résultats.
     
  11. Highbonoboo
    Highbonoboo Nouveau WRInaute
    Inscrit:
    14 Mai 2009
    Messages:
    7
    J'aime reçus:
    0
    Merci beaucoup pour vos réponses. J'essaie ta solution Ybet dès que possible :)
     
  12. Highbonoboo
    Highbonoboo Nouveau WRInaute
    Inscrit:
    14 Mai 2009
    Messages:
    7
    J'aime reçus:
    0
    Bon je vais peut être passer pour un attardé mental... ben tant pis :oops:

    J'ai supprimé dans mon code les conditions :
    if(!empty($nom) && !empty($prenom) && !empty($adresse) && !empty($email) && !empty($message) && !empty($sujet)){
    pour les remplacer par le code (adapté à mes champs) de Ybet.
    J'ai ajouté sur mon formulaire html les <?echo $erreur_nom;?> pour chacun de mes inputs.

    Résultat : Parse error: syntax error, unexpected T_VARIABLE...

    Si vous pouviez me la refaire en me parlant comme si j'avais 2 ans avant que je termine ma plaquette de Rénie, ça soulagerait mon début d'ulcère :? :lol:

    Merci d'avance

    Je vous remets mon code de départ :

    <?php

    if(isset($_POST) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message']) && isset($_POST['sujet'])){
    extract($_POST);
    if(!empty($nom) && !empty($email) && !empty($message) && !empty($sujet)){
    $message=str_replace("\'","'",$message);
    $sujet=str_replace("\'","'",$sujet);
    $destinataire="mon adresse email";
    $msg="
    Nom : $nom \n
    Sujet : $sujet \n
    Email : $email \n
    Message : $message";
    $entete="From: $nom \n Reply-To: $email";
    mail($destinataire,$sujet,$msg,$entete);
    Header("Location: http://(...)/merci.html");

    }
    else{
    Header("Location: http://(...)/erreur1.html");
    }
    }
    ?>
     
  13. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    Oui oui c'etait sous entendu que le javascript ne suffisait pas et qu'il fallait aussi une vérification coté serveur pour les spammeur comme tu as dis mais aussi pour ceux qui désactivent javascript :)
     
  14. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    parce que, en fait, la vérification côté serveur va bien au delà d'une simple vérification que champs vides ou non. Il faut aussi "nettoyer" le contenu, pour éviter l'injection de code, surtout si le formulaire est incomplet et qu'on le réaffiche. Car là, c'est le niveau basique du hacker
     
  15. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    aaaaahh c'est ca les injections :d je viens de comprendre :d
    c'est quelque chose que je gere sur mes sites et je ne savais même pas que ça s'appelait comme ça :lol:
     
  16. Highbonoboo
    Highbonoboo Nouveau WRInaute
    Inscrit:
    14 Mai 2009
    Messages:
    7
    J'aime reçus:
    0
    Une bonne âme pour finir de m'aider ?
     
  17. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Rhaaaa

    bon alors fait à la va-vite :

    Code:
    <?php
    	//par defaut le message est valide et l'alerte est vide//
    	$valid=1;$alert="";
    	/////////////////////////////////////////////////////////
    
    	//test nom est rempli////////////////////////////////////
    	if(isset($_POST['nom']) && !empty($_POST['nom']))
    	{
    		$nom=$_POST['nom'];
    	}
    	else
    	{
    		//nom pas rempli : le message n'est pas valide et on le renseigne dans l'alerte
    		$nom="";$valid=0;$alert.="Merci de renseigner votre nom<br/>";
    	}
    	////////////////////////////////////////////////////////
    	
    	//test email est rempli
    	if(isset($_POST['email']) && !empty($_POST['email']))
    	{
    		$email=$_POST['email'];
    	}
    	else
    	{
    		//email pas rempli : le message n'est pas valide et on le renseigne dans l'alerte
    		$email="";$valid=0;$alert.="Merci de renseigner votre adresse Email<br/>";
    	}
    	////////////////////////////////////////////////////////
    	
    	//test message est rempli
    	if(isset($_POST['message']) && !empty($_POST['message']))
    	{
    		$message=$_POST['message'];
    	}
    	else
    	{
    		//message pas rempli : le message n'est pas valide et on le renseigne dans l'alerte
    		$message="";$valid=0;$alert.="Votre message est vide<br/>";
    	}
    	////////////////////////////////////////////////////////
    	
    	//test sujet est rempli
    	if(isset($_POST['sujet']) && !empty($_POST['sujet']))
    	{
    	$sujet=$_POST['sujet']
    	}
    	else
    	{
    	//sujet pas rempli : le message n'est pas valide et on le renseigne dans l'alerte
    	$sujet="";$valid=0;$alert.="merci de renseigner le sujet de votre message<br/>";
    	}
    	////////////////////////////////////////////////////////
    
    	//test si le message est toujours valide:
    	if($valid==1)
    	{
    		$message=str_replace("\'","'",$message);
    		$sujet=str_replace("\'","'",$sujet);
    		$destinataire="mon adresse email";
    		$msg="
    		Nom : $nom \n
    		Sujet : $sujet \n
    		Email : $email \n
    		Message : $message";
    		$entete="From: $nom \n Reply-To: $email";
    		mail($destinataire,$sujet,$msg,$entete);
    		Header("Location: http://(...)/merci.html");
    	}
    	else
    	{echo "<p><strong>Votre message n'est pas correctement rempli :</strong></p>
    		   <p>".$alert."</p>";
    		   
    		//////////////////////////////////////////////////////////////////////////////////////////////
    		//Ici, fais ensuite ce que tu veux: une redirection (bof, faut tout ressaisir si on s'est gouré, et d'habitude on abandonne, ou alors une autre solution :
                    //tu peux ici réafficher le formulaire en remplissant les champs avec les variables// ////////
    		//celles qui ont été renseignées restent, les autres seront vides, ///////////////////////////
    		//et on repart pour un tour tant que tout n'est pas rempli////////////////////////////////////
    		//////////////////////////////////////////////////////////////////////////////////////////////
    		
    	}
    ?>
    
     
  18. Highbonoboo
    Highbonoboo Nouveau WRInaute
    Inscrit:
    14 Mai 2009
    Messages:
    7
    J'aime reçus:
    0
    Merci infiniment, tu m'enlèves une grosse épine du pied !
    Excellent !

    Merci encore...
     
  19. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Bon maintenant que t'as un code qui semble marcher et qui est commenté, fais un effort, comprends-le, il est très simple :)
     
  20. Highbonoboo
    Highbonoboo Nouveau WRInaute
    Inscrit:
    14 Mai 2009
    Messages:
    7
    J'aime reçus:
    0
    Pour info, nickargall, le code que tu m'as donné ne donne pas ce que je voulais. Au lieu de mettre le message d'erreur dans le champ non rempli ou sur le formulaire lui-même, cela fait apparaitre une page blanche en haut de laquelle apparait le message d'alerte.

    J'ai suivi ton conseil, j'ai acheté un bouquin sur le php et visité des dizaines de site pour essayer de comprendre le pourquoi du comment, mais sans résultat, malheureusement.

    Je vais essayer de trouver une autre solution...

    En tout cas merci beaucoup pour ton aide
     
  21. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Bien sur, le code que je t'ai donné ne peut pas fonctionner tel quel, il faut l'adapter à ton site ... même avec les commentaires que j'ai placé ca reste du chinois pour toi ?
     
  22. Highbonoboo
    Highbonoboo Nouveau WRInaute
    Inscrit:
    14 Mai 2009
    Messages:
    7
    J'aime reçus:
    0
    Non non ce n'est plus tout à fait du chinois. Comme je te l'ai dit j'ai pas mal bossé sur la question. A présent je comprends bien la logique du code et la syntaxe, le test sur les variables, le test sur les champs remplis ou vide, les conditions suivies des "else".
    Seulement, mon problème de départ était de faire en sorte que les alertes ou les "echo" conséquence des "else" s'affichent sur mon formulaire, à coté ou dans les champs nom remplis.
    Avant de poster mon problème ici, j'avais réussi en compilant des infos sur différents forums à pondre un code (beaucoup moins évolué que le tien), à base de "isset" et de "!empty" suivi d'un "echo". Cela me donnait en résultat mon "echo" sur une page blanche. C'est pour cela que j'ai demandé de l'aide, pour que l'echo ou le message d'alerte ne s'affiche plus sur une page blanche, mais dans mes champs non remplis.
    Juste pour dire que je ne me suis pas tourné les pouces en attendant que quelqu'un fasse mon code. A force de chercher à résoudre la chose, j'ai appris bien plus que je n'avais besoin. Faire un chat, un livre d'or, sécuriser des pages avec mot de passe... mais toujours pas à régler mon problème initiale. Je finirai bien par trouver :wink:

    En tout cas encore merci pour ton aide. Car même si je n'ai toujours pas ma solution, j'en ai beaucoup appris (à mon petit niveau :oops: )
     
Chargement...
Similar Threads - Afficher erreur php Forum Date
comment afficher l erreur 404 URL Rewriting et .htaccess 28 Juillet 2021
Afficher une erreur 404 pour un utilisateur Développement d'un site Web ou d'une appli mobile 27 Octobre 2010
champs de texte afficher un message d'erreur Problèmes de référencement spécifiques à vos sites 28 Mars 2006
Afficher des infos depuis plusieurs page en PHP Développement d'un site Web ou d'une appli mobile 23 Mars 2022
Afficher la dernière version d'un fichier php ? Développement d'un site Web ou d'une appli mobile 8 Novembre 2021
Devra-t-on afficher les émissions de gaz à effet de serre de nos sites? Droit du web (juridique, fiscalité...) 28 Mars 2021
Afficher module avis Google sur un site web via le GTM ? Google : l'entreprise, les sites web, les services 18 Mars 2021
Afficher stats analytics sur mon site Google Analytics 14 Novembre 2020
Ne pas afficher certaines conversions dans Google Ads AdWords 8 Juillet 2020
Afficher les produits suivants en ajax Développement d'un site Web ou d'une appli mobile 12 Mai 2020
Google a-t-il le droit d'afficher directement les informations des sites sans leur accord ? Droit du web (juridique, fiscalité...) 21 Février 2020
API pour afficher les avis Google sur son site Google : l'entreprise, les sites web, les services 10 Novembre 2019
Afficher les tags sur wordpress Développement d'un site Web ou d'une appli mobile 3 Août 2019
Extension Chrome utile pour afficher le code source HTML, JS, CSS Développement d'un site Web ou d'une appli mobile 5 Juillet 2019
Google My Business :Comment afficher sa zone de couverture et pas son adresse ? Google : l'entreprise, les sites web, les services 19 Juin 2019
Afficher/cacher données dans un tableau Développement d'un site Web ou d'une appli mobile 9 Mars 2019
Afficher des valeurs d'une colonne à l'autre selon condition Développement d'un site Web ou d'une appli mobile 11 Février 2019
Google Chrome va afficher à nouveau les sous-domaines Google : l'entreprise, les sites web, les services 18 Septembre 2018
Google PageSpeed Insight : Afficher en priorité le contenu visible Développement d'un site Web ou d'une appli mobile 16 Août 2018
Afficher valeur id onclick sur checkbox Développement d'un site Web ou d'une appli mobile 21 Février 2018