$POST form si la valeur d'un champ correspond au array [Résolu]

- - Dernière réponse : Dutchman24
Messages postés
23
Date d'inscription
mercredi 5 novembre 2014
Dernière intervention
3 avril 2018
- 10 mai 2017 à 19:08
Bonjour,

J'aimerais protège mon formulaire de contact contre le spam avec une question simple.

Premièrement j'ai déjà ajouter un champ invisible 'email-1' dans le formulaire, si cette champ est remplis par un robot le formulaire n'est s'envoie pas.

if(isset($_POST['email-1']) && $_POST['email-1'] == '')


Sur cette meme principe j'ai mis un champ qui demande si vous-êtes un robot? si vous répondez par "non" le formulaire est envoyé.

if(isset($_POST['norobot']) && $_POST['norobot'] == 'non')


Maintenant je ne veux pas metre 1 valeur comme ci-dessus 'non', mais un variable qui valide tout les valeurs dans l'array.

quelque chose comme :
$NON = array ('non','NON','Non','nON','nee','NEE','Nee','nEE');
if(isset($_POST['norobot']) && $_POST['norobot'] == '$NON')

Si je remplace le valeur 'non' par le variable $NON ça ne marche pas.

Merci de votre aide.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
14316
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 décembre 2018
2
Merci
Pour comparer tes chaînes :
https://secure.php.net/manual/en/function.strtolower.php
Et pour vérifier un tableau :
https://secure.php.net/manual/en/function.in-array.php

Merci NHenry 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de NHenry
Messages postés
23
Date d'inscription
mercredi 5 novembre 2014
Dernière intervention
3 avril 2018
0
Merci
Merci NHenry,

Mais comment je peux implémenter le variable $NON dans cette function :

???
$NON = array ('non','NON','Non','nON','nee','NEE','Nee','nEE');

if(isset($_POST['norobot']) && $_POST['norobot'] == $NON)
???
Dutchman24
Messages postés
23
Date d'inscription
mercredi 5 novembre 2014
Dernière intervention
3 avril 2018
> NHenry
Messages postés
14316
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 décembre 2018
-
Bonjour NHenry

Si j'envoie le form avec non ou nee je reçois le message en clean HTML
Si je envoi le form avec Yes je reçois le message en
 come le variable $message.
Pas facile a savoir ou est l'hic
Ici le mail form : Et merci d'avance...

<code php><?php
//Check submit
if($_SERVER['REQUEST_METHOD'] == "POST"){

// Defintion of variables
// Fixed variables

$destinateur = 'dutchman24@monsite'; //Email from receiver
$to = 'dutchman24'; //Name
$subject = " Formulaire de contact"; //Subject of e-mail
$spam = 120; //Anti Spam, in seconds

// Anti Robot
$NON = array ("non","nee");

//Check if the form is completed!

$error = ''; // Start with errors
$count = 0; // Count errors

if(isset($_COOKIE['mailform']))
{ $show = true;
echo 'Vous avez déjà envoyer un message anterieurement. Pour des raisons de securité nous sommes obligé de vous faire attendre '.$spam.' secondes!';
}

else {

if(strlen($_POST['nom']) < 2)
{$error .= "- Vous avez oublié votre Nom! <BR />";
$count++;
}
if(strlen($_POST['email']) < 6 || preg_match('~^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=[A-Za-z0-9]*[^A-Za-z0-9])\S{6,}$~', $_POST['email']))
{$error .= "- Votre adresse mail n'est pas valide! <BR />";
$count++;
}
if (strlen($_POST['text']) < 1 )
{$error .= "- Vous avez oublié d´ecrire un message <BR />";
$count++;
}
if (!empty($error)) // If any errors
{echo ($count == 1) ? 'L´erreur suivant est detecté <BR />' : 'Les erreurs suivantes sont detectés <BR />'; //Check if 1 ormore errors.
echo "".$error."<BR />";
}
if(strlen($_POST['email-1']) >= 1 )
{echo "<script>location.href='index.php?page=accueil#youarearobot';</script>";
}
if (strlen($_POST['norobot']) >=4 )
{echo "<script>location.href='index.php?page=accueil#youarearobot';</script>";
}

else {
// Check No Robot
if(... in_array(strtolower($_POST['norobot']), $NON))

// Send mail

//Headers
$header = "Content-type: text/html; charset=iso-8859-1\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "To: ".$to." <".destinateur.">\r\n";
$header .= "From: ".$_POST['nom']." <".$_POST['email'].">\r\n";
$header .= "Reply-To: ".$to." <".$destinateur.">\r\n";

//Send message

$message = "
<p>Afzender: ".$_POST['nom']."</p>
<p>E-mailadres: ".$_POST['email']."</p>
<p>Onderwerp: ".$_POST['subject']."</p>
<p>Bericht: ".$_POST['text']."</p>";

//mail construction

mail($destinateur, $subject, $message, $header);

//Confirmation to visitor

echo "<script>location.href='index.php?page=accueil#merci';</script>";
setcookie('mailform',1,time()+($spam*1)); // Leave cookie against spam
$show = true; // Display error

}
}
}
?>
Dutchman24
Messages postés
23
Date d'inscription
mercredi 5 novembre 2014
Dernière intervention
3 avril 2018
> NHenry
Messages postés
14316
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 décembre 2018
-
J'ai oublier de te dire que j'enlever les 3 ... avant in_array autrement ça ne marche pas.
if(in_array(strtolower($_POST['norobot']), $NON))
Dutchman24
Messages postés
23
Date d'inscription
mercredi 5 novembre 2014
Dernière intervention
3 avril 2018
> Dutchman24
Messages postés
23
Date d'inscription
mercredi 5 novembre 2014
Dernière intervention
3 avril 2018
-
Ne marche toujours pas si je tap 'oui' ou 'non' le message est envoyé.
Sauf avec 'oui' le message s'envoie en text brut avec les codes html visible, et avec 'non' en html propre.
J'ai déjà reçu 40 message de spam avec que des adresse mail mais pas de text. J'ai voulu poster mon mailform ce matin mais ceci est effacer par le moderateur ???
Dutchman24
Messages postés
23
Date d'inscription
mercredi 5 novembre 2014
Dernière intervention
3 avril 2018
-
EDIT : si je dis 40 messages je parle que des messages SPAM
Le messages normale sont complet avec text, nom, sujet, etc
Dutchman24
Messages postés
23
Date d'inscription
mercredi 5 novembre 2014
Dernière intervention
3 avril 2018
-
Ça marche Enfin :-)

Apparemment je ne peux pas poster tout le mailform mais je poste la partie clé.
Merci À NHenry.

<?php
$NON = array ("non","nee"); 

//Check if the form is completed!
$error = ''; // Start with errors
$count = 0; // Count errors
   
if(strlen($_POST['nom']) < 2)
{$error .= "- Vous avez oublié votre Nom! <BR />";
$count++;
}
if(strlen($_POST['email']) < 6 || preg_match('~^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=[A-Za-z0-9]*[^A-Za-z0-9])\S{6,}$~', $_POST['email']))
{$error .= "- Votre adresse mail n'est pas valide! <BR />";
$count++;
}
if (strlen($_POST['text']) < 1 )
{$error .= "- Vous avez oublié d´ecrire un message <BR />";
$count++;
}
// Check No Robot
if(strlen($_POST['email-1']) >= 1 )
{$error .= "<script>location.href='index.php?page=youarearobot;'</script>";
$count++;
}
if (strlen($_POST['norobot']) >=4 ) 
{$error .= "<script>location.href='index.php?page=youarearobot;</script>";
$count++;
}
// Robot question: Check if User gives good array value and make POST case insensitive
if(!in_array(strtolower($_POST['norobot']), $NON))
{$error .= "<script>location.href='index.php?page=youarearobot';</script>";
$count++;
} 
if (!empty($error)) // If any errors
{echo ($count == 1) ? 'L´erreur suivant est detecté <BR />' : 'Les erreurs suivantes sont detectés <BR />'; 
echo "".$error."<BR />";
}

else {
// Send mail
}
?>
Commenter la réponse de Dutchman24

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.