Formulaire (de merde)

Formulaire (de merde) - PHP - Programmation

Marsh Posté le 01-05-2018 à 17:19:43    

Salut HFR, je vous la fait courte :  [:lefab:2]  
 
J'ai sur www.sido.fr un formulaire de contact.
 
Le truc c'est que php et moi ça fait deux. Bon, je suis pas à la rue non plus, mais c'est vraiment pas mon truc.
 
Concrètement, il fonctionne.  [:djekyl:1]  
 
J'ai trois champs "Pseudo" "Email" "Message" et le problème est que quand le champ pseudo contient un espace cela ne fonctionne plus, le message part pas.
 
Et honnêtement, je ne sais pas pourquoi  :sweat:  
 
Voici mon code php :
 

Code :
  1. <?php
  2. if($_POST)
  3. {
  4.     $to_email       = "blablabla@blablabla.com"; //Recipient email, Replace with own email here
  5.     $from_email     = 'blabla@blabla.com'; //from mail, it is mandatory with some hosts and without it mail might endup in spam.
  6.    
  7.     //check if its not an ajax request just exit!
  8.     if(!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
  9.         print "Une erreur est survenue !";
  10.         exit;
  11.     }
  12.    
  13.     //Sanitize input data using PHP filter_var().
  14.     $sender_name    = filter_var($_POST["form_user_name"], FILTER_SANITIZE_STRING);
  15.     $sender_email   = filter_var($_POST["form_user_email"], FILTER_SANITIZE_EMAIL);
  16.     $country_code   = filter_var($_POST["form_country_code"], FILTER_SANITIZE_NUMBER_INT);
  17.     $message        = filter_var($_POST["form_message"], FILTER_SANITIZE_STRING);
  18.     $subject        = "Nouveau mail depuis Sido.fr !";
  19.    
  20.     //additional php validation
  21.     if(strlen($sender_name)<3){ // If length is less than 4 it will output JSON error.
  22.         $output = json_encode(array('type'=>'error', 'text' => 'Votre nom est trop court, ou le champ est vide !'));
  23.         die($output);
  24.     }
  25.     if(!filter_var($sender_email, FILTER_VALIDATE_EMAIL)){ //email validation
  26.         print json_encode(array('type'=>'error', 'text' => 'Hmmm, votre mail semble avoir un problème !'));
  27.         exit;
  28.     }
  29.     if(strlen($message)<3){ //check emtpy message
  30.         print json_encode(array('type'=>'error', 'text' => 'Votre message semble trop court... '));
  31.         exit;
  32.     }
  33.    
  34.  //email body
  35.     $message_body =  "Message from $sender_name\n";
  36.     $message_body .=  "------------------------------\n";
  37.     $message_body .=  "$message\n";
  38.     $message_body .=  "------------------------------\n";
  39.     $message_body .=  "$sender_name\n";
  40.     $message_body .=  "$sender_email\n";
  41.    
  42.     //proceed with PHP email.
  43.     $headers = 'From: '. $sender_name .'' . "\r\n" .
  44.     'Reply-To: '.$sender_email.'' . "\r\n" .
  45.     'X-Mailer: PHP/' . phpversion();
  46.    
  47.     $send_mail = mail($to_email, $subject, $message_body, $headers);
  48.    
  49.     if(!$send_mail){
  50.         //If mail couldn't be sent, this is probably server's fault, check your mail configuration or consult your host
  51.         print json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration or consult your web host.'));
  52.         exit;
  53.     }else{
  54.         /*$code_html = "<script>$(`#my_contact_form`).toggle();</script>"
  55.         print $code_html*/
  56.         print json_encode(array('type'=>'message', 'text' => 'Salut '. $sender_name.'!  Merci beaucoup pour ton petit mail !'));
  57.         exit;
  58.     }
  59. }
  60. ?>


Je pense qu'il me faut modifier "$sender_name    = filter_var($_POST["form_user_name"], FILTER_SANITIZE_STRING);"
 
Mais je pensait que FILTER_SANITIZE_STRING me nettoyait les champs dont les espaces...
 
Une idée les enfants ?


Message édité par bigsido le 01-05-2018 à 17:55:44

---------------
Site perso de Sido, un développeur-front gentil sur paris : www.sido.fr
Reply

Marsh Posté le 01-05-2018 à 17:19:43   

Reply

Marsh Posté le 01-05-2018 à 18:09:48    

Bonjour,

 

Essaye de voir ce que vaut ta variable après nettoyage.

 

Sinon je pense plus que c'est le header du mail qui n'aime pas l'espace :

Code :
  1. $headers = 'From: '. $sender_name


Je ne connais pas bien les headers de mails, mais n'est-ce pas plutôt une adresse mail qui est attendue ici ?

 

EDIT : il semblerait que si : https://tools.ietf.org/html/rfc4021#section-2.1.2


Message édité par MaybeEijOrNot le 01-05-2018 à 18:11:53

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 02-05-2018 à 00:34:38    

[:goumite:2]  
 
Bon, pour une raison que j'ignore, le $send_mail n'était pas pris en compte si le $sender_name contenait un espace....  [:henri gaud l'eau:5]  
 
Me demandez pas pourquoi, j'en sais foutre rien  [:herbert de vaucanson:1]  
 
Donc, après plein de test à la con j'ai contourné le bordel en enlevant à la barbare les espace sur $send_name  
 

Code :
  1. $sender_name_base    = filter_var($_POST["form_user_name"], FILTER_SANITIZE_STRING);
  2.     $sender_name = str_replace(' ', '', $sender_name_base);


 
Et là... bah ça marche niquel  [:iryngael:4]  
 
Php de merde  [:tante foufoune:3]


---------------
Site perso de Sido, un développeur-front gentil sur paris : www.sido.fr
Reply

Marsh Posté le 03-05-2018 à 00:28:19    

il y'a la fonction trim() pour supprimer les espaces avant et après une chaine de caractère
et si tu veux t'amuser un peu, il ya PHPMailer
https://github.com/PHPMailer/PHPMailer


Message édité par tompouss le 03-05-2018 à 00:34:29

---------------
collectionneur de pâtes thermiques
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed