Problème de vérification d'envoi de message via site

[Fermé]
Signaler
Messages postés
617
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
7 décembre 2014
-
Messages postés
617
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
7 décembre 2014
-
Bonjour à tous,

Je viens vers ceux qui connaissent mieux que moi concernant le php...

Je voudrais savoir pourquoi un message parviens à être envoyé avec ce type de vérification :
if (!$name) $errors[count($errors)] = 'Entrez votre nom'; 
if (!$email) $errors[count($errors)] = 'Entrez votre email.';
if (!$numero) $errors[count($errors)] = 'Entrez votre numero.';
if (!$comment) $errors[count($errors)] = 'Entrez votre texte.';

if (!$errors) {

Alors qu'avec ce type de vérification, il est impossible de l'envoyé :
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) {

Est-ce que j'aurais mal rédigé le codage ?

Vous verrez la première vérification est
if ( isset($_POST['hidden']) && !empty($_POST['hidden'])) {
$errors[] = "désolé vous êtes un robot";}

Cette vérification est pour vérifier si le champs invisible sur le site est bel et bien vide, car depuis quelques temps je n'arrête pas de recevoir des mails de publicité via mon formulaire donc j'emploie cette astuce pour évité un captcha à mes visiteurs.

Il y a une vérification avec un fichier js qui ce fait aussi mais elle ne pose pas de problème...

Merci beaucoup d'avance !
Cdt

Cordialement.
Jim

5 réponses

Messages postés
2585
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
27 octobre 2021
464
Salut,

Premièrement les deux conditions suivantes sont identiques :

if (isset($_POST['hidden']) && !empty($_POST['hidden']))
équivaut à
if (!empty($_POST['hidden']))


La fonction empty vérifie également l'existence de la variable, tu peux donc simplifier tes tests en utilisant uniquement empty.

L'erreur vient surement du nom de ton input. La valeur 'hidden' doit correspondre au type de l'input si il s'agit d'un champ caché.
Dans ton formulaire :
<form>
    <input type="hidden" name="antispam" value="1" />
</form>


dans ton traitement php :
if (!empty($_POST['antispam']))


Bonne journée
Messages postés
617
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
7 décembre 2014
62
Bonjour et merci d'avoir répondu au sujet,

J'ai modifié ce que vous m'avez conseillé mais malheureusement le message ne parviens toujours pas à être envoyé.

Bizarrement si je retire tout le reste pour n'ajouté que la vérification du numéro de téléphone par exemple, cela suffit pour que le message ne soit pas envoyé.

Je ne sais donc pas si c'est vraiment le code en lui même qui dérange ou la façon dont à été fait la structure qui ne permet pas de supporter ces vérifications...

Ce n'est que mon sentiment car en php je touche un peu mais pas suffisamment pour détecter et corriger une erreur...

Merci encore !

Cordialement.
Jim
Messages postés
2585
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
27 octobre 2021
464
Si toutes tes vérifications fonctionnent sauf pour le numéro de téléphone, c'est surement que celui-ci ne correspond pas à l'expression régulière définie (preg_match).

Essaye sans l'expression régulière pour voir si le problème vient bien de là, si oui il faudra corriger cette expression.
Messages postés
617
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
7 décembre 2014
62
Bonjour Pitet, je test ce soir et je vous tien au courant, merci !
Messages postés
617
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
7 décembre 2014
62
Re-bonjour Pitet ;)

Je viens d'essayé comme ceci :
if ( isset($_POST['hidden']) && !empty($_POST['hidden'])) {
$errors[] = "désolé vous êtes un robot";}

if (!$name) $errors[count($errors)] = 'Entrez votre nom';
if ('/^[a-zA-Z\-\ ]{2,30}$/', $name) {
$errors[] = "Nom invalide";}

if (!$email) $errors[count($errors)] = 'Entrez votre email.';
if ("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email) {
$emailErr = "Mail invalide";}

if (!$numero) $errors[count($errors)] = 'Entrez votre numero.';
if ('^[0-9]{9,13}[0-9]$', $numero) {
$errors[] = "numéro invalide";}

if (!$comment) $errors[count($errors)] = 'Entrez votre texte.';

if (!$errors) {

Mais le problème est le même, en le modifiant avec DW (DreamWeaver) il m'a indiqué que ces lignes comportait une erreur. Peut-être l'ai-je mal rédigé ?

Attention que j'ai bien dit "par exemple" donc que je ne mette que la vérification pour le nom ou mail ou nom et mail ou autre combinaison le problème est le même du moment que le code simple est modifié.

Merci encore pour vos réponses, je continu de creuser de mon coté.

Cordialement.
Jim
Messages postés
617
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
7 décembre 2014
62
Up ?
Messages postés
2585
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
27 octobre 2021
464
Oui tu as une erreur de syntaxe : tu as oublié d'utiliser la fonction preg_match dans tes conditions :
if ('/^[a-zA-Z\-\ ]{2,30}$/', $name)

à remplacer par
if (preg_match('/^[a-zA-Z\-\ ]{2,30}$/', $name))
Messages postés
617
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
7 décembre 2014
62
Merci pitet,

Désoler, j'avais mal compris.
Je pensais que c'était justement preg_match qui dérangeais.

En reprenant le chemin depuis le début, dite moi si je me trompe mais voici quelques points qui me titille :

1) Je pense que si le nom dans la form du fichier html n'est pas le même que dans le le fichier php d'envoi, la vérification ne se fait pas et donc erreur.

2) Dans la récupération des données il n'y a pas ce champs d'indiquer, selon moi, ci les données ne sont pas récupéré la vérification ne peux s'effectuer donc erreur.

3) Un autre point mais qui viens de m'échapper... Je vous dirais si il me reviens.

Pour pouvoir savoir ou j'en suis et pourquoi ça ne fonctionne pas voici les code :

1) La form dans le fichier html :
    <form method="post" action="process.php" class="form">
          <table>
			<div class="nom">
				<label for="nom">Ne remplissez pas ce champs, ceci est un test anti-spam.</label>
				<input type="text" name="prenom" id="nom"  onblur="verifNom(this)"/>
			</div>
            <tr class="element">
              <td><label>Nom</label></td>
              <td class="input"><input type="text" name="name" /></td>
            </tr>
            <tr class="element">
              <td><label>Email</label></td>
              <td class="input"><input type="text" name="email" /></td>
            </tr>
            <tr class="element">
              <td><label>Téléphone</label></td>
              <td class="input"><input type="text" name="numero" /></td>
            </tr>
            <tr class="element">
              <td><label>Message</label></td>
              <td class="input"><textarea name="comment" class="text textarea" ></textarea></td>
            </tr> 
          </table>
       <div class="element">
       	<div class="clearfix"></div>
        <input type="submit" id="submit" value="Envoyer"/>
        <div class="loading"></div>
       </div>
       <div class="error"></div>
       <div class="nonenvoyé"></div>
       </form>


2) Le code du fichier php avec la récupération de données :
//Récupération des données 
$name = ($_GET['name']) ? $_GET['name'] : $_POST['name']; 
$email = ($_GET['email']) ?$_GET['email'] : $_POST['email']; 
$numero = ($_GET['numero']) ?$_GET['numero'] : $_POST['numero']; 
$comment = ($_GET['comment']) ?$_GET['comment'] : $_POST['comment']; 

if ($_POST) $post=1; 

//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) {


Merci de votre présence, je continu de chercher et si quelque chose change je vous le poste de suite.

Merci encore !