18071 sujets
Bonjour,
Pour un site sans enjeu, le plus simple est d'ajouter une case à cocher ou champ caché en CSS et/ou attribut hidden avec une étiquette du genre "Ne cochez PAS/ ne remplissez PAS ce champ". Les robots sont pour la plupart assez idiots enfin simplistes pour se faire avoir parce qu'ils n'utilisent pas un navigateur ou ne font pas attention (il y a bien assez d'autres sites où ils sont fonctionnels).
Si champ rempli alors c'est du spam.
Ça ne fonctionnera pas pour MS, Google, Meta, les impôts, Ameli, etc mais nous ne sommes pas ces entreprises ou organismes-là.
Les CAPTCHA sont pour leur immense majorité inaccessibles aux personnes non-voyantes, malvoyantes et plein de monde n'arrive pas à bien cliquer sur les feux rouges, bornes d'incendie, etc
L'alternative audio est inaudible (coucou reCaptcha, sérieux faut essayer pour s'en rendre compte...).
Et les services de Google ne respectent pas la législation européenne autant que je sache.
Pour un site sans enjeu, le plus simple est d'ajouter une case à cocher ou champ caché en CSS et/ou attribut hidden avec une étiquette du genre "Ne cochez PAS/ ne remplissez PAS ce champ". Les robots sont pour la plupart assez idiots enfin simplistes pour se faire avoir parce qu'ils n'utilisent pas un navigateur ou ne font pas attention (il y a bien assez d'autres sites où ils sont fonctionnels).
Si champ rempli alors c'est du spam.
Ça ne fonctionnera pas pour MS, Google, Meta, les impôts, Ameli, etc mais nous ne sommes pas ces entreprises ou organismes-là.
Les CAPTCHA sont pour leur immense majorité inaccessibles aux personnes non-voyantes, malvoyantes et plein de monde n'arrive pas à bien cliquer sur les feux rouges, bornes d'incendie, etc
L'alternative audio est inaudible (coucou reCaptcha, sérieux faut essayer pour s'en rendre compte...).
Et les services de Google ne respectent pas la législation européenne autant que je sache.
Bonjour,
Par exemple ?
Je préférerais display : none au lieu de visibility : hidden afin de ne pas affecter la mise en page mais je suppose que display : none interdit que la case soit cochée.
Modifié par boteha_2 (28 May 2025 - 15:51)
Felipe a écrit :
Pour un site sans enjeu, le plus simple est d'ajouter une case à cocher ou champ caché en CSS et/ou attribut hidden avec une étiquette du genre "Ne cochez PAS/ ne remplissez PAS ce champ"
Par exemple ?
<input tabindex="35" type="checkbox" name="obj[]" value="spam" id="spam" /><label for="spam">Ne pas cocher</label>
input[tabindex="35"] {visibility : hidden}
Je préférerais display : none au lieu de visibility : hidden afin de ne pas affecter la mise en page mais je suppose que display : none interdit que la case soit cochée.
Modifié par boteha_2 (28 May 2025 - 15:51)
Il manque un i : visibility (source : le nombre de fois où j'écris accessiblité...). Dans les 2 cas ce sera caché visuellement ET aux utilisateurs de lecteurs d'écran et/ou du clavier donc peu importe. 3 cas avec l'attribut hidden.
Euh pourquoi as-tu un tabindex positif ? Sur un élément caché peu importe, il n'est pour ainsi dire pas là mais en temps normal, aller contre l'ordre naturel de tabulation clavier n'est pas bon signe pour l'accessibilité.
Euh pourquoi as-tu un tabindex positif ? Sur un élément caché peu importe, il n'est pour ainsi dire pas là mais en temps normal, aller contre l'ordre naturel de tabulation clavier n'est pas bon signe pour l'accessibilité.
Bonjour,
Ok, c'est corrigé.
C'est un vieux script.
tabindex suit l'ordre naturel mais donc est complétement inutile...
Je vais virer ces tabindex.
Felipe a écrit :
Il manque un i : visibility (source : le nombre de fois où j'écris accessiblité...).
Ok, c'est corrigé.
Felipe a écrit :
Euh pourquoi as-tu un tabindex positif ? Sur un élément caché peu importe, il n'est pour ainsi dire pas là mais en temps normal, aller contre l'ordre naturel de tabulation clavier n'est pas bon signe pour l'accessibilité.
C'est un vieux script.
tabindex suit l'ordre naturel mais donc est complétement inutile...
Je vais virer ces tabindex.
bonjour à tous
Voilà le texte de mon formmail en php...
je suis presque certain que les erreurs de syntaxe dans mon php empêche son fonctionnement...
<?php
header('Location: https://delaplacem.fr/merci.htm');
if($_SERVER['REQUEST_METHOD'] == 'POST')
{// On vérifie que le champ "objet" est vide
if(isset($_POST['objet']) && empty($_POST['objet']))
{// On vérifie que tous les champs sont remplis
if(
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['mail']) && !empty($_POST['mail']) &&
isset($_POST['commentaires']) && !empty($_POST['commentaires'])
)
{// On "nettoie" le contenu
$nom = strip_tags($_POST['nom']);
$mail = strip_tags($_POST['mail']);
$commentaires = htmlspecialchars($_POST['commentaires']);
{// Ici vous devrez traiter les données
echo " Message de {$nom} envoyé";
}
}
}else{
http_response_code(405);
echo "Méthode non autorisée";
}
// On vérifie que le visiteur vient du formulaire
if(isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] == "https://delaplacem.fr"){
if($_SERVER['REQUEST_METHOD'] == 'POST'){
// On vérifie que le champ "objet" est vide
if(isset($_POST['objet']) && empty($_POST['objet'])){
// On vérifie que tous les champs sont remplis
if(
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['mail']) && !empty($_POST['email']) &&
isset($_POST['commentaires']) && !empty($_POST['commentaires'])
){
// On "nettoie" le contenu
$nom = strip_tags($_POST['nom']);
$email = strip_tags($_POST['mail']);
$message = htmlspecialchars($_POST['commentaires']);
// Ici vous devrez traiter les données
echo " Message de {$nom} envoyé";
}
}
}else{
http_response_code(405);
echo "Méthode non autorisée";
}
}
//inscription dans essai
$fp = fopen ("essai.txt", "a+");
fputs ($fp, $message);
fputs ($fp, $destinataire);
fputs ($fp, $r);
fputs ($fp, $r);
fputs ($fp, $to);
fputs ($fp, $ret);
fclose ($fp);
exit;
?>
Voilà le texte de mon formmail en php...
je suis presque certain que les erreurs de syntaxe dans mon php empêche son fonctionnement...
<?php
header('Location: https://delaplacem.fr/merci.htm');
if($_SERVER['REQUEST_METHOD'] == 'POST')
{// On vérifie que le champ "objet" est vide
if(isset($_POST['objet']) && empty($_POST['objet']))
{// On vérifie que tous les champs sont remplis
if(
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['mail']) && !empty($_POST['mail']) &&
isset($_POST['commentaires']) && !empty($_POST['commentaires'])
)
{// On "nettoie" le contenu
$nom = strip_tags($_POST['nom']);
$mail = strip_tags($_POST['mail']);
$commentaires = htmlspecialchars($_POST['commentaires']);
{// Ici vous devrez traiter les données
echo " Message de {$nom} envoyé";
}
}
}else{
http_response_code(405);
echo "Méthode non autorisée";
}
// On vérifie que le visiteur vient du formulaire
if(isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] == "https://delaplacem.fr"){
if($_SERVER['REQUEST_METHOD'] == 'POST'){
// On vérifie que le champ "objet" est vide
if(isset($_POST['objet']) && empty($_POST['objet'])){
// On vérifie que tous les champs sont remplis
if(
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['mail']) && !empty($_POST['email']) &&
isset($_POST['commentaires']) && !empty($_POST['commentaires'])
){
// On "nettoie" le contenu
$nom = strip_tags($_POST['nom']);
$email = strip_tags($_POST['mail']);
$message = htmlspecialchars($_POST['commentaires']);
// Ici vous devrez traiter les données
echo " Message de {$nom} envoyé";
}
}
}else{
http_response_code(405);
echo "Méthode non autorisée";
}
}
//inscription dans essai
$fp = fopen ("essai.txt", "a+");
fputs ($fp, $message);
fputs ($fp, $destinataire);
fputs ($fp, $r);
fputs ($fp, $r);
fputs ($fp, $to);
fputs ($fp, $ret);
fclose ($fp);
exit;
?>
Bonjour,
le
cdt
le
header('Location: https://delaplacem.fr/merci.htm');
devrait être après le traitement du formulaire si tu veut lui laissé une chance d'être interpréter 
cdt
Bonjour,
Si le champ objet n'est pas rempli isset($_POST['objet']) renvoie FALSE donc l'envoi du message est bloqué.
Il manque un !.
est suffisant.
ou si la champ objet est text et renvoie un résultat vide :
De manière ,générale si tu emploies Empty tu n'a pas besoin d'employer isSet car isSet est inclus dans Empty, va vérifier dans la doc php.net..
PS : quel est le type du champ objet ?
Modifié par boteha_2 (30 May 2025 - 16:34)
if(isset($_POST['objet']) && empty($_POST['objet']))
Si le champ objet n'est pas rempli isset($_POST['objet']) renvoie FALSE donc l'envoi du message est bloqué.
Il manque un !.
if(!isSet($_POST['objet']))
est suffisant.
ou si la champ objet est text et renvoie un résultat vide :
if(Empty($_POST['objet']))
De manière ,générale si tu emploies Empty tu n'a pas besoin d'employer isSet car isSet est inclus dans Empty, va vérifier dans la doc php.net..
PS : quel est le type du champ objet ?
Modifié par boteha_2 (30 May 2025 - 16:34)
merci Boteha_2, pour ton aide...
le php est un peu de l'hébreu pour moi et me plonger dans ce langage me demanderai un effort dont je ne suis plus capable. Rien que l'apprentissage des opérateurs a du mal à s'imprimer
J'ai modifié quelques lignes et j'ai de manière systématique un message d'erreur au moment où je fais des essais de mon formulaire
voici le php :
_____________
<?php
header('Location: https://delaplacem.fr/merci.htm');
if($_SERVER['REQUEST_METHOD'] == 'POST');{
// On vérifie que le champ "objet" est vide
if(!isset($_POST['objet']));
// On vérifie que tous les champs sont remplis
if(
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['mail']) && !empty($_POST['mail']) &&
isset($_POST['commentaires']) && !empty($_POST['commentaires'])
);
// On "nettoie" le contenu
$nom = strip_tags($_POST['nom']);
$mail = strip_tags($_POST['mail']);
$commentaires = htmlspecialchars($_POST['commentaires']);
// Ici vous devrez traiter les données
echo " Message de {$nom} envoyé";
la ligne 26 }else{
http_response_code(405);
echo "Méthode non autorisée"};
// On vérifie que le visiteur vient du formulaire
if(isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] == "https://delaplacem.fr");
if($_SERVER['REQUEST_METHOD'] == 'POST');
// On vérifie que le champ "objet" est vide
if(isset($_POST['objet']) && empty($_POST['objet'])){
// On vérifie que tous les champs sont remplis
if(
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['mail']) && !empty($_POST['email']) &&
isset($_POST['commentaires']) && !empty($_POST['commentaires'])
)
// On "nettoie" le contenu
$nom = strip_tags($_POST['nom']);
$email = strip_tags($_POST['mail']);
$message = htmlspecialchars($_POST['commentaires']);{
// Ici vous devrez traiter les données
echo " Message de {$nom} envoyé";
} else{
http_response_code(405);
echo "Méthode non autorisée";
}
------------------------------------------
et le message d'erreur
Erreur d'analyse : erreur de syntaxe, jeton inattendu « else », fin de fichier attendue dans /htdocs/formmail.php à la ligne 26
il s'agit sans doute des opérateurs } et { que j'ai retrouvé dans le manuel et que je supprimerais bien....
le php est un peu de l'hébreu pour moi et me plonger dans ce langage me demanderai un effort dont je ne suis plus capable. Rien que l'apprentissage des opérateurs a du mal à s'imprimer
J'ai modifié quelques lignes et j'ai de manière systématique un message d'erreur au moment où je fais des essais de mon formulaire
voici le php :
_____________
<?php
header('Location: https://delaplacem.fr/merci.htm');
if($_SERVER['REQUEST_METHOD'] == 'POST');{
// On vérifie que le champ "objet" est vide
if(!isset($_POST['objet']));
// On vérifie que tous les champs sont remplis
if(
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['mail']) && !empty($_POST['mail']) &&
isset($_POST['commentaires']) && !empty($_POST['commentaires'])
);
// On "nettoie" le contenu
$nom = strip_tags($_POST['nom']);
$mail = strip_tags($_POST['mail']);
$commentaires = htmlspecialchars($_POST['commentaires']);
// Ici vous devrez traiter les données
echo " Message de {$nom} envoyé";
la ligne 26 }else{
http_response_code(405);
echo "Méthode non autorisée"};
// On vérifie que le visiteur vient du formulaire
if(isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] == "https://delaplacem.fr");
if($_SERVER['REQUEST_METHOD'] == 'POST');
// On vérifie que le champ "objet" est vide
if(isset($_POST['objet']) && empty($_POST['objet'])){
// On vérifie que tous les champs sont remplis
if(
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['mail']) && !empty($_POST['email']) &&
isset($_POST['commentaires']) && !empty($_POST['commentaires'])
)
// On "nettoie" le contenu
$nom = strip_tags($_POST['nom']);
$email = strip_tags($_POST['mail']);
$message = htmlspecialchars($_POST['commentaires']);{
// Ici vous devrez traiter les données
echo " Message de {$nom} envoyé";
} else{
http_response_code(405);
echo "Méthode non autorisée";
}
------------------------------------------
et le message d'erreur
Erreur d'analyse : erreur de syntaxe, jeton inattendu « else », fin de fichier attendue dans /htdocs/formmail.php à la ligne 26
il s'agit sans doute des opérateurs } et { que j'ai retrouvé dans le manuel et que je supprimerais bien....
Bonjour,
Enlève le ; à la fin et remplace-le par {
Cela fera une erreur fatale en moins mais j'ai peur qu'il en reste d'autres.
Par ailleurs, cela ,ne provoque pas d'erreur mais comme déjà dit il est redondant d'employer isSet avec Empty.
Essaye cela à la place du code ci-dessus.
if(
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['mail']) && !empty($_POST['mail']) &&
isset($_POST['commentaires']) && !empty($_POST['commentaires'])
);
Enlève le ; à la fin et remplace-le par {
Cela fera une erreur fatale en moins mais j'ai peur qu'il en reste d'autres.
Par ailleurs, cela ,ne provoque pas d'erreur mais comme déjà dit il est redondant d'employer isSet avec Empty.
if (!empty ($_POST['nom']) && !empty ($_POST['mail']) && !empty ($_POST['commentaires']))
{
Essaye cela à la place du code ci-dessus.
bonjour à tous, et merci pour votre aide....
trop de manipulations, mélange des !empty et empty dans les test
syntaxe des if go to et else inadéquate
Je préfère revenir à ma version "sans pot de miel" en attendant une solution acceptable
<?php
header('Location: https://delaplacem.fr/merci.htm');
$nom = $_POST['Nom'];
$mail = $_POST['Mail'];
$objet = $_POST['objet'];
$commentaires= $_POST['commentaires'];
$to = 'michel@delaplacem.fr';
$ret="\n\r";
$r= "\n";
$subject = 'Formulaire';
if(empty($nom))
echo "remplir le champ nom";
if(empty($mail))
echo " merci de completer le champ adresse mail";
//ok pas vide //on convertit les caractètres HTML du commentaire
$commentaires = htmlentities($commentaires);
//mise en forme du message
$message = " Nom : $nom\n Mail : $mail\n \n commentaires : $commentaires ";
// Envoi du mail
if(mail($to, $subject, $message)) {
echo "Les informations ont bien été envoyées";
} else {
echo "Une erreur est survenue lors de l'envoi";
}
//inscription dans essai
$fp = fopen ("essai.txt", "a+");
fputs ($fp, $message);
fputs ($fp, $destinataire);
fputs ($fp, $r);
fputs ($fp, $subject);
fputs ($fp, $r);
fputs ($fp, $to);
fputs ($fp, $ret);
fclose ($fp);
exit;
?>
trop de manipulations, mélange des !empty et empty dans les test
syntaxe des if go to et else inadéquate
Je préfère revenir à ma version "sans pot de miel" en attendant une solution acceptable
<?php
header('Location: https://delaplacem.fr/merci.htm');
$nom = $_POST['Nom'];
$mail = $_POST['Mail'];
$objet = $_POST['objet'];
$commentaires= $_POST['commentaires'];
$to = 'michel@delaplacem.fr';
$ret="\n\r";
$r= "\n";
$subject = 'Formulaire';
if(empty($nom))
echo "remplir le champ nom";
if(empty($mail))
echo " merci de completer le champ adresse mail";
//ok pas vide //on convertit les caractètres HTML du commentaire
$commentaires = htmlentities($commentaires);
//mise en forme du message
$message = " Nom : $nom\n Mail : $mail\n \n commentaires : $commentaires ";
// Envoi du mail
if(mail($to, $subject, $message)) {
echo "Les informations ont bien été envoyées";
} else {
echo "Une erreur est survenue lors de l'envoi";
}
//inscription dans essai
$fp = fopen ("essai.txt", "a+");
fputs ($fp, $message);
fputs ($fp, $destinataire);
fputs ($fp, $r);
fputs ($fp, $subject);
fputs ($fp, $r);
fputs ($fp, $to);
fputs ($fp, $ret);
fclose ($fp);
exit;
?>
Bonjour,
Avec le pot de miel tu peux faire :
Les mails des robots ne partiront pas mais tu les verras dans ton journal.
Avec le pot de miel tu peux faire :
// Envoi du mail
if (empty ($objet))
{
if(mail($to, $subject, $message))
{
echo "Les informations ont bien été envoyées";
}
else
{
echo "Une erreur est survenue lors de l'envoi";
}
}
Les mails des robots ne partiront pas mais tu les verras dans ton journal.
Ok.
Je suppose que tu n'as pas oublié de créer un champ caché "objet" dans le HTML
Personnellement je viens de le faire sur un formulaire de mail piraté de temps en temps.
Je vérifie aussi l'existence d'un REFERER mais cela ne sert pas à grand chose.
Je récupère l'adresse IP de tout mail reçu.
Quand ce sont des spams je bloque cette adresse.
Il me semble que le plus efficace est de repérer les répétitions de contenu et/ou de provenance.
C'est un peu plus compliqué à faire.
Je suppose que tu n'as pas oublié de créer un champ caché "objet" dans le HTML
Personnellement je viens de le faire sur un formulaire de mail piraté de temps en temps.
Je vérifie aussi l'existence d'un REFERER mais cela ne sert pas à grand chose.
Je récupère l'adresse IP de tout mail reçu.
Quand ce sont des spams je bloque cette adresse.
$spam = array ('46.161.9.48', '5.188.211.13', etc...);
if (in_array ($_SERVER['REMOTE_ADDR'], $spam)) Exit ();
Il me semble que le plus efficace est de repérer les répétitions de contenu et/ou de provenance.
C'est un peu plus compliqué à faire.
Merci pour ta réponse
voilà le lien vers le formulaire en place
https://delaplacem.fr/formulaire.htm
le sujet qui est la variable objet ne peut être complété
voilà son code
<input name="objet" type="text" size="48">
<td height="66" bgcolor="#0000FF" width="415"><b>
<font color="#660000"> </font><font color="#FFFFFF" size="4">sujet:</font></b></td>
<td height="66" bgcolor="#0000FF" width="415" bordercolor="#C0C0C0">
si tu peux le compléter , je verrai ce qui se passe ...
voilà le lien vers le formulaire en place
https://delaplacem.fr/formulaire.htm
le sujet qui est la variable objet ne peut être complété
voilà son code
<input name="objet" type="text" size="48">
<td height="66" bgcolor="#0000FF" width="415"><b>
<font color="#660000"> </font><font color="#FFFFFF" size="4">sujet:</font></b></td>
<td height="66" bgcolor="#0000FF" width="415" bordercolor="#C0C0C0">
si tu peux le compléter , je verrai ce qui se passe ...