Formulaire et code de securité antispam

Petit nouveau ! | 7 Messages

25 avr. 2008, 09:19

Bonjour, j'ai mis en palce un formulaire avec code de securité.
Si le formulaire est bien rempli et que le capcha est bon, l'utilisateur est redirigé automatiquement.
Par contre si le capcha est mauvais, tout est stoppé a cause de l'instruction Die. J'aimerai à la place faire aussi une redirection mais je n'y arrive pas.
Voici le code du traitemant de mon formulaire:

Code : Tout sélectionner

<?php // On initialise la session session_start(); //on vérifie que la code est toujours mémorisé en session et qu'il fait 6 caractères if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) die("Erreur !"); // on vérifie que la code entré est valide if($_SESSION['code'] != $_POST['verif']) die("Code de securité invalide !"); //Traitement du formulaire si le code de securité est bon if($_POST['action'] == 'submitted') { $adress = "[email protected] "; $sujet = "Formulaire "; $message = "FORMULAIRE \n\n"; $message .= "------------------- Parametres d'acces ------------------- \n"; $message .= "Email: {$_POST['email']}\n"; $message .= "Mot de passe choisi: {$_POST['password']} Mot de passe confirmé: {$_POST['pass2']}\n"; $message .= "------------------- Informations société ------------------- \n"; $message .= "Raison sociale: {$_POST['raison']}\n"; $message .= "N°RCS/Siren/Siret: {$_POST['siret']} Code NAF/APE: {$_POST['ape']}\n"; $message .= "N°TVA Intracommunautaire: {$_POST['tva']}\n"; $message .= "Activité: {$_POST['activite']}\n"; $message .= "------------------------- Contact --------------------------- \n"; $message .= "Civilité: {$_POST['titre']} Nom/prénom: {$_POST['nom']}\n"; $message .= "Adresse/Rue: {$_POST['fonction']}\n"; $message .= "code postal: {$_POST['tel']}\n"; $message .= "Ville: {$_POST['gsm']}\n"; $message .= "Téléphone: {$_POST['fax']}\n"; $message .= "------------------ Adresse de facturation ----------------- \n"; $message .= "Adresse: {$_POST['adresse']}\n"; $message .= "Responsable comptable: {$_POST['resp']}\n"; $message .= "---------------------------------------------------------- \n"; $message .= "ORIGINE DU FORMULAIRE: FRANCE \n"; $message .= "---------------------------------------------------------- \n"; $entete = "From: ma boutique\n"; mail($adress, $sujet, $message, $entete); //page de sortie redirection $insertGoTo = "redirection_si_ok.php"; if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } // on détruit les variables de session, désormais inutiles session_unset(); session_destroy(); ?>
J'ai essayé avec header location mais en fait meme si le code capcha est faux , celà traite quand meme le formulaire
Pouvez-vous m'aider ?
Merci d'avance

Mammouth du PHP | 1353 Messages

25 avr. 2008, 10:45

Bonjour,

Pourquoi ne pas simplement remplacer l'instruction die("Code de securité invalide !"); par un header("page de destination"); ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 7 Messages

25 avr. 2008, 11:02

ben si tu as bien lu mon message, je dis que lorsque je fais celà, meme si le code de securité est mauvais, le traitement du formulaire est effectué quand meme .....donc ça gaze pas
Merci quand meme pour le lien.
Modifié en dernier par jumper le 25 avr. 2008, 11:05, modifié 1 fois.

Mammouth du PHP | 1353 Messages

25 avr. 2008, 11:04

oups désolé je m'étais arreté apres le code apparemment :(

Pourquoi ne pas entourer le traitement du formulaire d'un else {} après le if($_SESSION['code'] != $_POST['verif'])

Comme ca tu es sur de n'entrer dans le traitement que si le code est valide...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 7 Messages

25 avr. 2008, 11:08

Oui là faut peut etre que je parte sur quelque chose comme ça mais en grand débutant que je suis, je n'arrive pas vraiment à tout saisir .... serais-ce abuser que de te demander comment tu verrai la chose ? :D

Mammouth du PHP | 1353 Messages

25 avr. 2008, 11:16

Le if - else fonctionne de la façon suivante :
if(condition)
   {
   //j'execute ce code uniquement si la condition est vraie
   }
else
    {
    //j'éxecute ce code dans tous les autres cas, c'est à dire si ma condition n'est pas vraie
    }
Donc dans ton cas l'idée est la suivante :

Si le code est invalide ==> header("autre_page")
Sinon traitement du formulaire

je pense qu'avec ces indications tu pourras adapter ton code toi même ;)

(petit indice supplémentaire : tu peux "imbriquer" des conditions, donc rien n'empeche d'avoir un if dans un else ou dans un autre if... par exemple
if(condition)
    {
    action
    }
else
    {
    if(autre condition)
         {
         }
     else 
         {
         }
    }
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 7 Messages

25 avr. 2008, 11:20

voici les changements que j'ai effectués.

Code : Tout sélectionner

<?php // On initialise la session session_start(); /* on vérifie que la code est toujours mémorisé en session et qu'il fait 6 caractères */ if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) { $insertGoTo = "monsite/redirect_secu.ph"; if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } else { if($_SESSION['code'] == $_POST['verif']) { $adress = "[email protected] "; $sujet = "Envoi de formulaire d'enregistrement"; $message = "UN ENVOI DE FORMULAIRE A ETE EFFECTUE DEPUIS MON SITE \n\n"; $message .= "------------------- Parametres d'acces ------------------- \n"; $message .= "Email: {$_POST['email']}\n"; $message .= "Mot de passe choisi: {$_POST['password']} Mot de passe confirmé: {$_POST['pass2']}\n"; $message .= "------------------- Informations société ------------------- \n"; $message .= "Raison sociale: {$_POST['raison']}\n"; $message .= "N°RCS/Siren/Siret: {$_POST['siret']} Code NAF/APE: {$_POST['ape']}\n"; $message .= "N°TVA Intracommunautaire: {$_POST['tva']}\n"; $message .= "Activité: {$_POST['activite']}\n"; $message .= "------------------------- Contact --------------------------- \n"; $message .= "Civilité: {$_POST['titre']} Nom/prénom: {$_POST['nom']}\n"; $message .= "Fonction dans l'entreprise: {$_POST['fonction']}\n"; $message .= "Téléphone: {$_POST['tel']}\n"; $message .= "Téléphone portable: {$_POST['gsm']}\n"; $message .= "Fax: {$_POST['fax']}\n"; $message .= "------------------ Adresse de facturation ----------------- \n"; $message .= "Adresse: {$_POST['adresse']}\n"; $message .= "Responsable comptable: {$_POST['resp']}\n"; $message .= "------------------ Adresse de livraison ------------------ \n"; $message .= "Adresse: {$_POST['adresseliv']}\n"; $message .= "Tel. service livraisons: {$_POST['telliv']}\n"; $message .= "Fax service livraisons: {$_POST['faxliv']}\n"; $message .= "---------------- Informations comptables ----------------- \n"; $message .= "Moyen de paiement souhaité: {$_POST['paiement']}\n"; $message .= "N° IBAN: {$_POST['iban']}\n"; $message .= "Code SWIFT/BIC: {$_POST['swift']}\n"; $message .= "N° compte bancaire: {$_POST['compte']}\n"; $message .= "Titulaire du compte: {$_POST['titcompte']}\n"; $message .= "Nom et domiciliation de la banque: {$_POST['banque']}\n"; $message .= "---------------------------------------------------------- \n"; $message .= "ORIGINE DU FORMULAIRE: FRANCE \n"; $message .= "---------------------------------------------------------- \n"; $entete = "From: Mon site\n"; mail($adress, $sujet, $message, $entete); //page de sortie $insertGoTo = "monsite/redirect_revendeurs_fr.php"; if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } } session_unset(); session_destroy(); ?>
alors, en cas de bon code, ok, c'est redirigé sur redirect_revendeurs_fr.php
mais si le code est mauvais tout s'arrete sur form_fr.php (le nom du fichier contenant le code plus haut), la redirection vers redirect_secu.ph ne se fait pas , j'ai juste une page blanche...
pas facile !!

Petit nouveau ! | 7 Messages

26 avr. 2008, 13:14

Personne n'as une idée de ce qui coince ??

Mammouth du PHP | 19672 Messages

26 avr. 2008, 16:49

Cette variables est obsolète : $HTTP_SERVER_VARS

Si tu es sous PHP5, utilise $_SERVER à la place (avec les mêmes index) : teste avec ça et reviens si ça bafouille toujours.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

lux
Eléphant du PHP | 372 Messages

26 avr. 2008, 17:08

Au passage, quand tu postes du code tu peux utiliser les balises PHP au lieu des balises Code, ça coloriera le code plus joliment, ce sera plus lisible 8-)

Eléphant du PHP | 422 Messages

26 avr. 2008, 19:09

Essaye avec
header("location:...");
exit();
Pour moi, mettre le exit a marché ...

Petit nouveau ! | 7 Messages

02 mai 2008, 15:35

Bonjour
J'ai modifié mon code en utilisant vos 2 dernieres réponses, mais toujours pareil !!
Code bon, pas de problème la redirection est ok
Par contre si le code est mauvais, toujours page blanche sur le formulaire de traitement.... :(
Traverser la Manche en avion ?? ça va pas la tête !!??
Louis Blériot

Petit nouveau ! | 7 Messages

03 mai 2008, 15:19

Euréka !!
En fait dans ma précipitation, j'avais oublié un morceau de code ...... :roll:
voici le fichier de traitement du formulaire en état de marche.
Si quelqu'un est intéressé par le syteme de formulaire en entier, je suis bien sur disposé à donner tous les codes (formulaire, captcha, traitement .... etc).
<?php 
// On initialise la session 
session_start(); 
/* on vérifie que la code est toujours mémorisé en session et qu'il fait 6 caractères */ 
if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) die("Erreur !");
if($_SESSION['code'] != $_POST['verif'])
{ 
   $insertGoTo = "redirect_NOT_OK.ph"; 
   if (isset($_SERVER['QUERY_STRING'])) { 
       $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; 
      $insertGoTo .= $_SERVER['QUERY_STRING']; 
      } 
   header(sprintf("Location: %s", $insertGoTo));
    
} 
else 
{ 
if($_SESSION['code'] == $_POST['verif']) 
{ 
    
   $adress = "[email protected] "; 
   $sujet = "Formulaire "; 
   $message = "UN ENVOI DE FORMULAIRE A ETE EFFECTUE DEPUIS MON SITE \n\n"; 
    
   $message .= "------------------- Parametres d'acces   ------------------- \n"; 
   $message .= "Email: {$_POST['email']}\n"; 
   $message .= "Mot de passe choisi: {$_POST['password']}  Mot de passe confirmé: {$_POST['pass2']}\n"; 
   $message .= "------------------- Informations société ------------------- \n"; 
    
   $message .= "Raison sociale: {$_POST['raison']}\n"; 
   $message .= "N°RCS/Siren/Siret: {$_POST['siret']}  Code NAF/APE: {$_POST['ape']}\n"; 
   $message .= "N°TVA Intracommunautaire: {$_POST['tva']}\n"; 
   $message .= "Activité: {$_POST['activite']}\n"; 
   $message .= "------------------------- Contact --------------------------- \n"; 
   $message .= "Civilité: {$_POST['titre']}  Nom/prénom: {$_POST['nom']}\n"; 
   $message .= "Fonction dans l'entreprise: {$_POST['fonction']}\n"; 
   $message .= "Téléphone: {$_POST['tel']}\n"; 
   $message .= "Téléphone portable: {$_POST['gsm']}\n"; 
   $message .= "Fax: {$_POST['fax']}\n"; 
    
    
   $message .= "------------------ Adresse de facturation ----------------- \n"; 
   $message .= "Adresse: {$_POST['adresse']}\n"; 
   $message .= "Responsable comptable: {$_POST['resp']}\n"; 

   $message .= "------------------ Adresse de livraison ------------------ \n"; 
   $message .= "Adresse: {$_POST['adresseliv']}\n"; 
   $message .= "Tel. service livraisons: {$_POST['telliv']}\n"; 
   $message .= "Fax service livraisons: {$_POST['faxliv']}\n"; 

   $message .= "---------------- Informations comptables ----------------- \n"; 
   $message .= "Moyen de paiement souhaité: {$_POST['paiement']}\n"; 
   $message .= "N° IBAN: {$_POST['iban']}\n"; 
   $message .= "Code SWIFT/BIC: {$_POST['swift']}\n"; 
   $message .= "N° compte bancaire: {$_POST['compte']}\n"; 
   $message .= "Titulaire du compte: {$_POST['titcompte']}\n"; 
   $message .= "Nom et domiciliation de la banque: {$_POST['banque']}\n"; 
   $message .= "---------------------------------------------------------- \n"; 
   $message .= "ORIGINE DU FORMULAIRE: FRANCE \n"; 
   $message .= "---------------------------------------------------------- \n"; 
    
    
    
    
   $entete = "From: MON SITE\n"; 
   mail($adress, $sujet, $message, $entete); 
   //page de sortie 
   $insertGoTo = "redirect_OK_fr.php"; 
   if (isset($_SERVER['QUERY_STRING'])) { 
       $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; 
      $insertGoTo .= $_SERVER['QUERY_STRING']; 
      } 
   header(sprintf("Location: %s", $insertGoTo)); 
} 
} 
session_unset(); 
session_destroy(); 
?> 

Bonne journée :wink:
Traverser la Manche en avion ?? ça va pas la tête !!??
Louis Blériot