Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
901 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème d'envoi de mail avec formulaire Ajax +Json

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème d'envoi de mail avec formulaire Ajax +Json

n°2247011
tompouss
Petit chat
Posté le 28-12-2014 à 19:18:13  profilanswer
 

Bonjour,
 
ca fait quelques jours que je tourne en rond pour l'envoi de mail via formulaire (le truc basique quoi).
Mais cette fois ci j'ai rajouté de l'Ajax et Json pour l'envoi des données au server.
 
Problème: les mail de tests n'arrive plus depuis quelques jours.
Au début je pensais à un soucis de code, mais je suis de plus en plus sceptique et me demande si l'adresse ip de mon host n'est pas blacklistée, ceci dit
je n'ai aucun message d'erreur en retour, rien.
A vous de juger
 
Le code Jquery:
 

Code :
  1. <script type="text/javascript">
  2.    
  3.                 $('#contact').on('submit', function(e)
  4.                 {
  5.                     e.preventDefault();
  6.                     var error = false;
  7.                     //simple validation at client's end
  8.                     //loop through each field and we simply change border color to red for invalid fields       
  9.                     $("#contact input,#contact textarea" ).each(function(){
  10.                         $(this).css('border-color','');
  11.                         if(!$.trim($(this).val()))
  12.                         { //if this field is empty
  13.                             $(this).css('border-color','red'); //change border color to red   
  14.                             error = true; //set do not proceed flag
  15.                         }
  16.                         //check invalid email
  17.                         var email_reg = /^([w-.]+@([w-]+.)+[w-]{2,4})?$/;
  18.                         if($(this).attr("type" )=="email" && !email_reg.test($.trim($(this).val())))
  19.                         {
  20.                             $(this).css('border-color','red'); //change border color to red   
  21.                             error = true; //set do not proceed flag             
  22.                         } 
  23.                     });
  24.                     if(!error) //everything looks good! proceed...
  25.                     {
  26.                         var $this = $(this);
  27.                        
  28.                    
  29.                         $.ajax({
  30.                                 url: $this.attr('envoi_mail.php'), // Le nom du fichier indiqué dans le formulaire
  31.                                 type: $this.attr('POST'), // La méthode indiquée dans le formulaire (get ou post)
  32.                                 data: $this.serialize(), // Je sérialise les données (j'envoie toutes les valeurs présentes dans le formulaire)
  33.                                 dataType: 'json', // JSON
  34.                                 success: function(json)
  35.                                 {
  36.                                     if(json.message_sent == true)
  37.                                     {
  38.                                         $('#contact_results').show();
  39.                                         $('#contact_results').addClass('.success_message');
  40.                                         $('#contact_results').text('Mail envoyé !');
  41.                                         $("form input,form textarea" ).val('');
  42.                                     } else {
  43.                                      
  44.                                         if((json.message_sent == false) && (json.error == false) )
  45.                                         {
  46.                                             $('#contact_results').show();
  47.                                             $('#contact_results').addClass('.error_message');
  48.                                             $('#contact_results').text('Erreur lors de l'envoi n
  49.                                             de votre message: raison indéterminée');
  50.                                             $("form input,form textarea" ).val('');
  51.                                         } 
  52.                                         else
  53.                                         {
  54.                                             $('#contact_results').addClass('.error_message');
  55.                                             $('#contact_results').text('Error: les infos rentrées dans le formulaire semblent incorrectes');
  56.                                         }
  57.                                            
  58.                                     }
  59.                                 }
  60.                             });
  61.                        
  62.                                
  63.                      }
  64.                  };
  65.                    
  66.      
  67.                
  68.     </script>


Le formulaire:
 

Code :
  1. <div id="form_contact">
  2.                
  3.                    
  4.                     <div id="contact_results">
  5.                            
  6.                     </div>
  7.                
  8.                
  9.                      
  10.                      
  11.                     <form action="envoi_mail.php" id="contact" method="POST">
  12.                       <p>
  13.                           <label for="prenom" class="prenom">Prénom</label>
  14.                           <br /><input id="prenom" name="prenom" type="text" autofocus>
  15.              
  16.                       </p>
  17.                       <p>
  18.                           <label for="nom" class="nom">Nom</label>
  19.                           <br /><input id="nom" name="nom" type="text" autofocus>
  20.                      
  21.                       </p>
  22.                       <p>
  23.                           <label for="email">Email</label>
  24.                           <br /><input id="email" name="email" type="email" autofocus>
  25.                      
  26.                       </p>
  27.                       <p>
  28.                           <label for="sujet" class="sujet">Sujet</label>
  29.                           <br /><input id="sujet" name="sujet" type="text" autofocus>
  30.                        
  31.                       </p>
  32.                       <p>
  33.                           <label for="message">Message</label>
  34.                           <br /><textarea id="message" name="message" rows="10" cols="80" autofocus></textarea>
  35.                    
  36.                       </p>
  37.                       <p>
  38.                           <input type="submit" class='bouton_noir' value="Envoyer" />
  39.                       </p>
  40.                   </form>
  41.             </div><!-- end of #form_contact -->


le code PHP:
 

Code :
  1. <?php
  2.     if(isset($_POST["user_prenom"]) && isset($_POST["user_nom"])
  3.         && isset($_POST["user_email"]) && isset($_POST["user_subject"])
  4.             && isset($_POST["user_message"]))
  5.     {
  6.               // array to pass back data
  7.         $user_datas =[];
  8.         $return_infos   = [];
  9.         $to_email       = "mon adresse@yahoo.fr"; //Recipient email, Replace with own email here
  10.         $input_error    = false;
  11.         $message_sent   = false;
  12.      
  13.      
  14.         $user_datas = [
  15.             "prenom" => $_POST["user_prenom"],
  16.             "nom" =>    $_POST["user_nom"],
  17.             "email" => $_POST["user_email"],
  18.             "sujet" => $_POST["user_subject"],
  19.             "message" => $_POST["user_message"],
  20.           ];
  21.            
  22.        
  23.        
  24.         //var_dump($user_datas);
  25.         /*$user_prenom = filter_input(INPUT_POST, $_POST["user_prenom"], FILTER_SANITIZE_STRING);
  26.         $user_nom = filter_input(INPUT_POST, $_POST["user_nom"], FILTER_SANITIZE_STRING);
  27.         $user_email = filter_input(INPUT_POST, $_POST["user_email"], FILTER_SANITIZE_EMAIL);
  28.         $user_sujet = filter_input(INPUT_POST, $_POST["user_subject"], FILTER_SANITIZE_STRING);
  29.         $user_message = filter_input(INPUT_POST, $_POST["user_message"], FILTER_SANITIZE_STRING); */
  30.      
  31.        foreach($user_datas as $k => $v)
  32.        {
  33.            if(is_string($user_datas[$v]))
  34.            {
  35.                $input_error = false;
  36.            }
  37.            else
  38.            {
  39.                $input_error = true;
  40.                break;
  41.            }
  42.              
  43.        }
  44.        //var_dump($user_datas);
  45.  
  46.     // return a response ===========================================================
  47.         // if there are any errors in our errors array, return a success boolean of false
  48.         if (!($input_error))
  49.         {
  50.             $user_datas_ok=$user_datas;
  51.             $headers = 'From: '.$user_datas_ok["email"]. "rn" .
  52.                     'Reply-To: '.$to_email. "rn" .
  53.                     'X-Mailer: PHP/' .phpversion();
  54.              
  55.             if( mail($to_email, "dkdkdkdkdkdkkdkd",
  56.                 ",c,d,c,c,c,", 'HAL <HAL@hotmail.com>')) // tentative d'envoi du message   
  57.             { 
  58.                 $message_sent=true;
  59.          
  60.             }
  61.             else{
  62.              
  63.                 $message_sent=false;
  64.              
  65.             }
  66.            
  67.  
  68.         }
  69.        
  70.        
  71.        
  72.         header('Content-type: application/json;charset=utf-8');   
  73.         echo json_encode([
  74.                         'message_sent' => $message_sent,
  75.                         'error' => $input_error
  76.          ]);
  77.  
  78.   }


Voyez vous un probleme dans mon code, qui expliquerait que le message n'arrive pas  ?
 
Merci d'avance
 
Tom


---------------
collectionneur de pâtes thermiques
mood
Publicité
Posté le 28-12-2014 à 19:18:13  profilanswer
 

n°2247032
OrcusZ
Pro AMD | .Net lover
Posté le 29-12-2014 à 09:18:30  profilanswer
 

Bonjour,
 
Je pense que ton soucis viens de ta partie JS/AJAX et/ou PHP.
Tu envoie this.serialize(); mais je pense que ceci ne récupère pas le contenu de tes inputs. Un console.log sur this.serialize() s'impose.
 
Ensuite partie PHP tu fait utilise ces $_POST:
 

Code :
  1. if(isset($_POST["user_prenom"]) && isset($_POST["user_nom"])
  2.         && isset($_POST["user_email"]) && isset($_POST["user_subject"])
  3.             && isset($_POST["user_message"]))


 
Personnellement je ne vois rien avec ces noms là ( peut-être dans ton this.serialize();
 
Pour finir dans ta function ajax : success ( tu devrait enlever tout les if pour avoir l'affiche des erreurs php pour débuguer )
 
et aussi mettre la function ajax error
 

Code :
  1. error : function(rep){
  2. }


 
ainsi en qu'a d'erreur de ta requête tu peux déboguer aussi.
 
En espérant que ça t'aiguille vers la solution à ton problème.


---------------
Made you your own sentence without believing that of the others...
n°2247096
MaybeEijOr​Not
but someone at least
Posté le 30-12-2014 à 15:58:26  profilanswer
 

Bonjour,
 
Je n'ai pas vraiment regardé ton code mai ça me fait penser à ce sujet :
 
http://forum.hardware.fr/hfr/Progr [...] 2920_1.htm

n°2247097
rufo
Pas me confondre avec Lycos!
Posté le 30-12-2014 à 16:20:28  profilanswer
 

Comme le faisait remarquer OrcusZ, je doute fort que ton code ait marché avant à la vue des noms de variables dans les isset($POST['...']) :/
 
Ca me fait plus penser à qq'un qui a récupérer des boutons de code par-ci par-là et a essayé de les assembler sans les comprendre
 
Dans ton php, si tu fais un print_r($_POST), tu vois quoi ?
 
Edit : appréciation toute personnelle : je ne vois vraiment pas l'utilité d'ajax pour un simple formulaire de contact :/


Message édité par rufo le 30-12-2014 à 16:21:26

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2247139
tompouss
Petit chat
Posté le 31-12-2014 à 10:26:50  profilanswer
 

Allélouia ca marche enfin.
 
 
J'ai dormi pendant 5 jours et je viens de débuguer  :whistle:  
Il y avait des erreurs de syntaxes et d'autres grosses comme des maisons (le coup de $POST était énorme  :D )
 
dans tous les coins
 
 
 
 
@ rufo : effectivement pas beaucoup d'intéret mais c'est surtout pour me faire la main avec ajax ;)


Message édité par tompouss le 31-12-2014 à 10:28:11

---------------
collectionneur de pâtes thermiques
n°2247142
rufo
Pas me confondre avec Lycos!
Posté le 31-12-2014 à 10:38:29  profilanswer
 

Ajax peut être une vraie plaie pour l'accessibilité des sites web aux handicapés visuels :o Leur lecteur d'écran ne détecte aps forcément quand une portion de la page a changé de contenu suite à une requête ajax contrairement à l'envoi d'un formulaire u un clic sur un lien qui envoie l'utilisateur sur une nouvelle url : là, le lecteur d'écran n'a pas de pb ;)
 
L'autre jour, j'entends que seulement 5 à 7% des sites web étaient accessibles à ces personnes :(


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2247145
OrcusZ
Pro AMD | .Net lover
Posté le 31-12-2014 à 11:39:33  profilanswer
 

Hummm, ça serait cool si on pouvais connaitre la nature de l'écran de l'utilisateur pour ce genre de cas...

 

En tout cas bravo si tu as résolu ton problème

Message cité 1 fois
Message édité par OrcusZ le 31-12-2014 à 11:39:58

---------------
Made you your own sentence without believing that of the others...
n°2247146
rufo
Pas me confondre avec Lycos!
Posté le 31-12-2014 à 11:48:55  profilanswer
 

OrcusZ a écrit :

Hummm, ça serait cool si on pouvais connaitre la nature de l'écran de l'utilisateur pour ce genre de cas...
 
En tout cas bravo si tu as résolu ton problème


L'écran d'une personne malvoyante est le même que le tien. Elle a juste un soft de lecture du contenu de l'écran (ex : NVDA) qui lui lit la page affichée ou ce qui se trouve sous le curseur de la souris ou au niveau du curseur du clavier si elle utilise les raccourcis clavier pour naviguer (ce qui est souvent le cas).
 
D'où l'intérêt de mettre de bons libellés explicites sur les liens et dans l'attribut "title" pour l'aider dans son choix des liens à cliquer (en effet, le soft regroupe dans une sorte de menu, tous les liens de la page).
D'où l'intérêt d'utiliser les bonnes balises html pour leur sémantique et non leur rendu visuel (ex : <th> pour un entête de colonne de tableau et non un simple <td> car à chaque passage à la ligne du tableau, le soft relit l'entête de la colonne).
...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2247152
OrcusZ
Pro AMD | .Net lover
Posté le 31-12-2014 à 13:25:00  profilanswer
 

Re,
 
Merci pour l'information je ne le savais pas et ferais encore plus attention qu'avant :)


---------------
Made you your own sentence without believing that of the others...
n°2247156
rufo
Pas me confondre avec Lycos!
Posté le 31-12-2014 à 14:18:56  profilanswer
 

Un lien caché pour aller direct au contenu de la page est très appréciable aussi. Sinon, l'utilisateur se tape la lecture du menu principal et contextuel du site à chaque fois. Ca devient très vite lourd. Pour s'en convaincre, installez-vous NVDA ( http://www.nvda-fr.org/download.php ) sur votre PC, fermez les yeux (encore que c'est pas obligé) et essayez de naviguer sur votre site sans souris (qu'avec le clavier).
Si vous arrivez à utiliser votre site sans pb, parfait, votre site est accessible. Sinon, vous allez très vite voir ce qui merde :/ Et je vous parle même pas quand il s'agit non plus d'un site type "vitrine" ou blog mais d'un intranet.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème d'envoi de mail avec formulaire Ajax +Json

 

Sujets relatifs
Problème avec tuple sur Python 3.4.1Envoi de mail depuis un usf avec corp du mail variable
Formulaire php-htmlC: probleme de compil sur un typede => ferror: syntax error before ''
Problème mise à jour des entity JPA /glassfishProblème Script sql developer Oracle
Probleme avec FMODex en C pour lecture de .wav/.mp3[Resolu][VBA]pointeur sur une sous-feuille dans un sous formulaire
Formulaire web pour accéder à des données sur fichier excel 
Plus de sujets relatifs à : Problème d'envoi de mail avec formulaire Ajax +Json


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR