× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum des Webmasters
 Anti spam par image
Ajouter un message à la discussion
Pages : [1] 2 3 4 5 ... Fin
Page 1 sur 6 [Fin]
mac_marco
  Posté le 18/07/2020 @ 22:28 
Aller en bas de la page 
Petit astucien

Bonsoir.

Encore une fois, je fais appel aux maîtres es PHP (Jean-pierre, Zoulouman, etc.) qui m'ont bien aidé jusqu'à présent .

Je souhaite mettre un anti-spam sur mon formulaire de contact et j'aime assez l'idée des lettres à recopier.

Pour cela, je me base sur le tutoriel suivant : https://phpsources.net/code/php/formulaires/468_securitecaptcheprotection-anti-spam

J'ai crée le page "securitecode.php" avec le code proposé et dans le navigateur j'ai bien une image qui s'affiche.

J'ai ajouté les champs pour l'image et la réponse dans mon code HTML et tout s'affiche parfaitement : https://www.webandyou.ch

Ou je sèche complètement, c'est sur la deuxième partie du tuto, la partie formulaire, je ne vois pas ou mettre le code et comment !

J'ai essayé de diverses manières, mais quelque soit la manière, mon formulaire est validé et envoi le message !

Code HTML du formulaire dans la page HTML:

<form action="http://www.webandyou.ch/envoi_contact.php" id="contact-form" name="contact-form" method="post">
              <div class="row">
               
                <!-- Nom -->
                <div class="form-group col-md-6">
                  <input type="text" name="name" id="name" required placeholder="Nom*" class="form-control">
                </div>
                
                <!-- Prénom -->
                <div class="form-group col-md-6">
                  <input type="text" name="prenom" id="prenom" required placeholder="Prénom*" class="form-control">
                </div>
                
                <!-- Email -->
                <div class="form-group col-md-6">
                  <input type="email" name="email" id="email" required placeholder="E-Mail*" class="form-control">
                </div>
                
                <!-- Téléphone -->
                <div class="form-group col-md-6">
                  <input type="text" name="telephone" id="telephone" required placeholder="Téléphone*" class="form-control">
                </div>
              </div>
              <div class="form-group col-md-12">
                <textarea name="message" id="description" placeholder="Message" class="form-control"></textarea>
              </div>
              <div class="col-md-12">
              <!-- Securitecode -->
              <input name="secure" type="text" size="10" />
                  <img src="securitecode.php" alt="Code de sécurité" />
              
              <!-- Half Inputs -->
                    <div class="half clearfix text-center">
                        <!-- Send Button -->
                        <button type="submit" id="submit" class="btn btn-default btn-success btn-lg">Envoyer</button>
                        <!-- End Send Button -->
                    </div>
              </div>
              <!-- END ROW -->
            </form> 

Et le code pour le traitement du formulaire:

<?php

echo ' <b style="font-size:25px;"> </b>Votre demande nous est bien parvenue. Nous prendrons contact avec vous dans les plus brefs délais.<br>Merci !<br><br>';

$errors = '';
$limit_size=10000000;
$myemail = 'toto@toto.ch'; /*Replace with your email*/
if(empty($_POST['name']) ||
empty($_POST['prenom']) ||
empty($_POST['email']) ||
empty($_POST['telephone']) ||
empty($_POST['message']))
{
$errors .= "\n Error: Champs requis";
}

/*data*/
$name = htmlspecialchars($_POST['name']);
$prenom = htmlspecialchars($_POST['prenom']);
$email = htmlspecialchars($_POST['email']);
$telephone = htmlspecialchars($_POST['telephone']);
$message = htmlspecialchars($_POST['message']);
$headers = "From: $email";
/*  modif erreur !
if (!eregi(
"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$",
$email))
{
*/
if(!preg_match("/^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$/", $email)) {
$errors .= "\n Error: Invalide Email Addresse";
}
if( empty($errors))
{
$to = $myemail;
$email_subject = "Demande de contact de:  $name";
$txt = "Une demande de CONTACT vous est adressée.\n Nom: $name \n Prénom: $prenom \n Email: $email \n Téléphone: $telephone \n Message: \n $message";
// preparing attachments
$files = array();
/*  modif erreur !
if($file_one)
{
array_push($files,$file_one);
}
*/
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
$message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"utf-8\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $txt . "\n\n";
$message .= "--{$mime_boundary}\n";
for($x=0;$x<count($files);$x++){
$file = fopen('tmp/'.$files[$x],"rb");
$data = fread($file,filesize('tmp/'.$files[$x]));
fclose($file);
$data = chunk_split(base64_encode($data));
$message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$files[$x]\"\n" .
"Content-Disposition: attachment;\n" . " filename=\"$files[$x]\"\n" .
"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
$message .= "--{$mime_boundary}\n";
}
mail($to, $email_subject, $message, $headers);
}

?>

Si une âme charitable pouvait me donner un coup de main, une bonne ou l'attend si un jour elle passe par Genève !

Mille mercis pour votre patience et votre aide.

Publicité
Jean-Pierre
 Posté le 19/07/2020 à 11:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Marco

Mais dis-moi, le code en question n'est pas complet niveau champ du formulaire sur phpsources.net ? Ou alors j'ai loupé une marche.

En plus dans ton code ça date un peu et là le if (!eregi( est obsolète !

JP

Edit : En plus sur cette ligne, pas besoin de placer le lien en dur, suffit de mettre envoi_contact.php simplement puisqu'étant au même niveau.

<form action="http://www.webandyou.ch/envoi_contact.php"

En plus, déjà soulevé par tonton Zouzou me semble bien :

echo ' <b style="font-size:25px;"> </b>Votre demande nous est bien parvenue. Nous prendrons contact avec vous dans les plus brefs délais.<br>Merci !<br><br>';

Normal que cette réponse soit aussitôt retournée car elle est "directe" et non conditionnelle = if (...

Bref, as-tu réalisé une sauce mélange aux trois herbes ?



Modifié par Jean-Pierre le 19/07/2020 11:43
mac_marco
 Posté le 19/07/2020 à 12:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour Jean-Pierre .

Oui, c'est un peu une salade mêlée .

Mais je suis une brêle en PHP et j'essaie de faire au mieux. J'ai essayé le reCaptcha de Google mais je bloque au niveau serveur.

Alors si quelqu'un peut m'aider ce serait sympa.

Je souhaiterais juste un anti spam simple et je trouvais le système de l'image joli.

Là je teste sur mon site, mais c'est pour le site d'un ami carrossier. Moi le spam ne me gêne pas, je supprime au fur et à mesure.

Help me, please

Jean-Pierre
 Posté le 19/07/2020 à 12:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Arf je pige mieux

Tiens regarde, un script au fiston -->

https://forum.pcastuces.com/envoi.asp?type=Edit&REP_ID=6196728&SUJET_ID=18255&FORUM_ID=2

A te lire

mac_marco
 Posté le 19/07/2020 à 12:59 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Oui, j'avais vu et mémorisé le tutoriel mais je souhaitais garder le système avec l'image.

Et je n'arrive pas à comprendre ou mettre le code indiqué dans la deuxième partie du tutoriel. Quoi que je fasse le

formulaire part sans le contrôle de l'image !

Jean-Pierre
 Posté le 19/07/2020 à 13:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

En ce cas faut chercher un autre script

mac_marco
 Posté le 19/07/2020 à 13:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Et aurais-tu une piste ?

Jean-Pierre
 Posté le 19/07/2020 à 13:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Oui GG

mac_marco
 Posté le 19/07/2020 à 13:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Publicité
Jean-Pierre
 Posté le 19/07/2020 à 13:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

c'est sur la partie serveur que je retrouve le même problème, à savoir, ou et comment mettre le code

et comment le rendre compatible avec mon HTML et mon PHP:

La partie serveur ? Tu possèdes un serveur dédié ?

T'occupe pas du serveur = mais remplace dans tes termes et ta pensée par PHP.

Jean-Pierre
 Posté le 19/07/2020 à 14:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Perso j'ai une erreur de création de l'image de sécurité sur ce code :

<?php
	// on démarre une session pour pouvoir mémoriser le code
	session_start();
	// http://www.6ma.fr/tuto/image-de-securite-pour-formulaires-php/
	// on définit les caractères utilisés pour le code généré
	$liste = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	// génére le code en piochant dans les caractères de la liste
	$code = '';
	while(strlen($code) != 6) 
	{
	   $code .= $liste[rand(0,36)];
	}
	// on mémorise le code de 6 caractères généré en session
	$_SESSION['code']=$code;

	// on créé une image de 70 x 20 pixels (larg x hauteur)
	$img = imageCreate(70, 20) or die ("Problème de création GD");
	// Choix de la couleur de fond, ici ça donne du Gris ( RVB)
	$background_color = imagecolorallocate ($img, 238, 238, 238);
	// Choix de la couleur de la police, ici du noir
	$ecriture_color = imagecolorallocate ($img, 0, 0, 0);
	// le code la police utilisée
	$code_police=5;
	// on créé une image jpeg en empêchant la mise en cache
	header('Expires: Mon, 26 Jul 2050 05:00:00 GMT');
	header('Cache-Control: no-store, no-cache, must-revalidate');
	header('Cache-Control: post-check=0, pre-check=0', false);
	header("Content-type: image/jpeg");
	// on introduit le code dans l'image
	imageString($img, $code_police,(70-imageFontWidth($code_police) * strlen("".$code.""))/2,0, $code,$ecriture_color);
	// on créé une image avec une qualité médiocre de 30%
	// pour éviter qu'un robot puisse la lire
	imagejpeg($img,'',30);
	// on libère la mémoire
	imageDestroy($img);
?>

Quel est ton code si pas indiscret de cette création ?

Licette et JP

mac_marco
 Posté le 19/07/2020 à 14:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Je pars sur la base de ce tutoriel:

https://phpsources.net/code/php/formulaires/468_securitecaptcheprotection-anti-spam

Je crée le fichier "securitecode.php" comme indiqué

<?php
    session_start();

    $largeur  = 120;
    $hauteur  = 40;
    $longueur = 5;
    $liste = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $code    = '';
    $counter = 0;

$image = imagecreate($largeur, $hauteur) or die('Impossible d\'initializer GD');

for( $i=0; $i<10; $i++ ) {
   imageline($image,
   mt_rand(0,$largeur), mt_rand(0,$hauteur),
   mt_rand(0,$largeur), mt_rand(0,$hauteur),
   imagecolorallocate($image, mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)
));
 }

for( $i=0, $x=0; $i<$longueur; $i++ ) {
   $charactere = substr($liste, rand(0, strlen($liste)-1), 1);
   $x += 10 + mt_rand(0,10);
   imagechar($image, mt_rand(3,5), $x, mt_rand(5,20), $charactere,
   imagecolorallocate($image, mt_rand(0,155), mt_rand(0,155), mt_rand(0,155)));
   $code .= strtolower($charactere);
 }
   
  header('Content-Type: image/jpeg');
  imagejpeg($image);
  imagedestroy($image);

  $_SESSION['securecode'] = $code;
// fin du code
?>

Et si j'appelle la page, l'image est bien créée.

https://www.webandyou.ch/securitecode.php

Ce que je ne comprend pas c'est la deuxième partie:

Le formulaire :


<?php session_start(); ?>

    <body>

<?php
       if (isset($_POST['submitform'])){
       $secure = isset($_POST['secure']) ? strtolower($_POST['secure']) : '';
          if ($secure == $_SESSION['securecode']) {
             echo 'Le code de sécurité est ok';
             unset($_SESSION['securecode']);
          }
          else {  echo 'Le code de sécurité est incorrecte!';
             }
        }
?>
          <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" >
             Code de sécurité:
                  <input name="secure" type="text" size="10" />
                  <img src="securitecode.php" alt="Code de sécurité" />
                  <input type="submit" name="submitform" value="Envoyer" />
          </form>

    </body>

Mon code formulaire HTML et traitement du formulaire en PHP est indiqué dans mon premier message .



Modifié par mac_marco le 21/07/2020 05:51
mac_marco
 Posté le 19/07/2020 à 15:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Alors voilà, j'ai réussi à mettre en place le formulaire sur le lien que tu m'as proposé:

http://www.php-astux.info/script-formulaire-contact.php

A part la mise en forme qui devrait être adaptable via les CSS, le message de confirmation ou d'erreur me renvoi sur

une page qui ne me plaît pas du tout. Tu peux tester c'est fonctionnel à cette adresse: https://www.webandyou.ch/index-copie.php

Je pense que l'erreur vient de ce code:

// Action du formulaire (si votre page a des paramètres dans l'URL)
// si cette page est index.php?page=contact alors mettez index.php?page=contact
// sinon, laissez vide
$form_action = '';

Je suis censé mettre quoi ?

J'ai essayé en laissant vide, en mettant la page d'accueil, mais toujours le même résultat:

Merci pour ton aide.

mac_marco
 Posté le 19/07/2020 à 17:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Je viens de m'apercevoir que le formulaire ne transmet que le message !

Aucune trace du nom et de l'adresse mail !

Grrrrrrrrrr ! J'en ai marre !

midnightblue
 Posté le 19/07/2020 à 22:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Oui, c'est vrai qu'on peut parfois en avoir marre..

En ce qui me concerne, pour éviter les conflits de header, j'envoie en guise de captcha de vrais images en .jpg...représentant chacune un caractère.

On va me dire que... Mais çà marche du feu de Dieu! Couplé à un anti-flood maison et un pot de miel, cà tient le coup depuis 2004. Et un seul fichier, madame.

Mais que demande le peuple ? Ah oui le code ! Si vous le voulez bien.

*µ*

Jean-Pierre
 Posté le 19/07/2020 à 22:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

En effet, j'ai encore tenté et ça foire

Idem sur trois autres sites proposant avec captcha

Tu as aussi ça : https://www.htmlpie.com/fr/products/php-contact-form-script

Et le rendu : https://www.htmlpie.com/preview/php-contact-form-script-with-captcha-and-validation/sample-page.php

A toi de voir, je ne connais pas ce site.

JP (Licette est au pieu )



Modifié par Jean-Pierre le 19/07/2020 22:19
Malcolm
 Posté le 19/07/2020 à 22:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

salut,

question bébête, mais pourquoi tenir à tout prix à une image à recopier ? car cas de cas il y a déjà pas mal de ressources qui existent, noramment le système google : https://www.synbioz.com/blog/tech/mettre-en-place-recaptcha-sur-un-formulaire

personnellement j'ai parfois du mal à recopier les chiffres, ça m'ennuie de me retrouver face à ce type de captcha, qui est, de plus, assez peu "accessible". j'ai préféré l'autre option avec des questions réponses visible ici : http://www.php-astux.info/article-formulaires-anti-spam.php

sue ce, au dodo

Publicité
Jean-Pierre
 Posté le 19/07/2020 à 22:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Dis-donc toi fiston, as-tu vu l'heure ?

Aller, comme ta frangine Licette : au pieu direct !

Non mais... as-tu vu tes cernes ?

mac_marco
 Posté le 20/07/2020 à 06:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour, bonjour.

Midnightblue:

On va me dire que... Mais çà marche du feu de Dieu! Couplé à un anti-flood maison et un pot de miel, cà tient le coup depuis 2004. Et un seul fichier, madame.

Mais que demande le peuple ? Ah oui le code ! Si vous le voulez bien.

Ben oui !

Jean-Pierre:

Je vais allez voir, mais le mieux serait de réussir à faire fonctionner le code d'Astux. Mais comme précisé, je ne reçois pas les données au complet mais seulement le message !

Malcolm:

personnellement j'ai parfois du mal à recopier les chiffres, ça m'ennuie de me retrouver face à ce type de captcha, qui est, de plus, assez peu "accessible". j'ai préféré l'autre option avec des questions réponses visible ici : http://www.php-astux.info/article-formulaires-anti-spam.php

Comme précisé plus haut, le formulaire installé a l'air de fonctionner mais ne me renvois que le message ! Pas de nom, ni d'email !

Sur ce, au boulot pour la semaine.

Je vais continuer à chercher mais si une âme charitable pouvait m'aider ce serait sympa. Merci d'avance.

Malcolm
 Posté le 20/07/2020 à 07:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

tu peux essayer de mettre un "?" dans action ?

comme ceci :

// Action du formulaire (si votre page a des paramètres dans l'URL)
// si cette page est index.php?page=contact alors mettez index.php?page=contact
// sinon, laissez vide
$form_action = '?';

si tu as pris mon exemple e formulaire, voici ce qu'il faut modifier pour avoir nom et email :

remplacer

  • $message = str_replace($caracteres_speciaux, $caracteres_remplacement, $message);
  • // Envoi du mail

par

  • $message = str_replace($caracteres_speciaux, $caracteres_remplacement, $message);
  • 		$message .= "\r\n".'Formulaire envoyé par : '.$nom.' (email='.$email.')';
  • // Envoi du mail

mac_marco
 Posté le 20/07/2020 à 12:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Malcolm :

Je vais tester, merci.

Mais j’aimerais bien faire fonctionner celui avec les images.

Jean-Pierre
 Posté le 20/07/2020 à 13:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

A ce propos de l'image en question, ça donne quoi chez toi ?

Et n'importe qui d'autre peut nous donner cette info, ce serait

http://lalimacefolle.com/tests/marco/imagesecu.php

Car perso ça donne :



Modifié par Jean-Pierre le 20/07/2020 15:11
midnightblue
 Posté le 20/07/2020 à 14:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour mac_marco,

Ce petit script pour s'adapter à ton cas si tu tiens à l'image. Deux fichiers requis

1 - captcha.php qui génère ton image

2- formulaire.php ... comme son nom l'indique.

Pour le code des deux fichiers : http://www.i12.fr/1/pca/indexmacmarco.php

Voilou.

*µ*

Jean-Pierre
 Posté le 20/07/2020 à 15:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

midnightblue

Et le test sur ma page php juste au dessus : ça donne quoi chez toi ?

Jean-Pierre
 Posté le 20/07/2020 à 15:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Marco

Au fait : sais-tu que ton site pond 6 cookies sans prévenir tes visiteurs et si tu ne fais rien : tu risques les menottes

Aimes-tu les oranges ?

midnightblue
 Posté le 20/07/2020 à 15:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

midnightblue

Et le test sur ma page php juste au dessus : ça donne quoi chez toi ?

Microsoft Edge : nada

Chrome : nothing

*µ*

Publicité
Pages : [1] 2 3 4 5 ... Fin
Page 1 sur 6 [Fin]

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
9,99 €Adaptateur Bluetooth USB TP-Link UB400 à 9,99 €
Valable jusqu'au 24 Septembre

Amazon fait une promotion sur l'adaptateur Bluetooth USB TP-Link UB400 qui passe à 9,99 €. Cet adaptateur à brancher sur un port USB va vous permettre d'ajouter le bluetooth à votre ordinateur et d'utiliser ensuite sans fil vos périphériques bluetooth : souris, clavier, casque, manette, téléphone, ...


> Voir l'offre
16,99 €Câble plat Ethernet RJ45 Ugreen Cat 7 10 Gbps 15 m à 16,99 € avec le code N2IO5SYA
Valable jusqu'au 22 Septembre

Amazon fait une promotion sur le câble plat Ethernet RJ45 Ugreen Cat 7 10 Gbps 600 Mhz d'une longueur de 15 m à 16,99 € avec le code N2IO5SYA. On le trouve habituellement à 31,99 €. Pour profiter de l'offre, saisissez le code N2IO5SYA sur la page de paiement. La livraison en point relais est gratuite.


> Voir l'offre
179,99 €Ecran incurvé Acer 27 pouces ED270RPbiipx (FullHD, 165 Hz) à 179,99 €
Valable jusqu'au 22 Septembre

Amazon propose actuellement l'écran incurvé Acer ED270RPbiipx à 179,99 € livré gratuitement alors qu'on le trouve ailleurs à plus de 200 €. Cet écran possède une diagonale de 27 pouces, est Full HD (1920x1080), possède une dalle incruvée (courbure 1500R) VA à 165 Hz et dispose d'entrées DP et 2xHDMI.


> Voir l'offre

Sujets relatifs
ajout d'image sur fb par répétition
Récupération d'image .. pour envois par mail
Pied de page qui passe par dessus l'image de fond
remplacer une image par une autre
Choix d'édito par l'image.
formulaire avec contrôle anti-spam
faire un boutton changé image dans un anti boot
Remplacement Flash par image gif ou jpeg
envoi de mails en nombre et anti spam
email par image
Plus de sujets relatifs à Anti spam par image
 > Tous les forums > Forum Forum des Webmasters