IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Ajax.request et PHPMailer [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Par défaut Ajax.request et PHPMailer
    Bonjour,

    Une petite question concernant Ajax.request et PHPMailer :

    Pour envoyer des mails via un formulaire j'utilise quelquechose du genre :

    Côté JS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    var mForm = $('id-de-mon-formulaire');
    var url = 'mon-url/send-mail.php';					  
    var params = "";
    params += "mlHost=truc.host.com&mlPort=5025&mlPort=5025&mlHtml=1&mlMaxLength=900";
    params += "&mlFrom=truc@truc.col&mlFromName="+mForm['fmNom'].value;
    params += "&mlDestination=destinataire@truc.com|destinataire2@truc.com";
    params += "&mlMail="+mForm['fmMail'].value+"&mlSociety="+mForm['fmSociety'].value+"&mlName="+mForm['fmNom'].value;
    params += "&mlPhone="+mForm['fmTel'].value+"&mlSubject="+mForm['fmSujet'].value+"&mlMessage="+mForm['fmMessage'].value;
    var myAjax = new Ajax.Request (
    	url,
           {
      	        method: "post",
     		evalScripts: false,
       	        parameters : params,
       	        onComplete: function transResult (response) {
                        if (response.responseText == 'OK') {
    	               // ici jolie message box de confirmation
                           mForm.reset();
                        }
                        else {
    	               // ici vilaine box d'erreur
                        }
            }		     	
       }					    
    );
    Et côté PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    require("../_lib/phpmailer/class.phpmailer.php");
     
    if (isset($_POST['mlMail'])) {
     
    	$sender = strtolower($_POST['mlMail']);
    	$senderSociety = $_POST['mlSociety'];
    	$senderName = ucwords($_POST['mlName']);
    	$phoneNumber = $_POST['mlPhone'];
    	$subject = ucfirst($_POST['mlSubject']);
    	$date = date("d/m/Y");
    	$hour = date("H")."h".date("i");
    	$message = $_POST['mlMessage'];		
     
    	if (strlen($message) >= $_POST['mlMaxLength']) {
    		echo 'Votre message est trop long !';
    		exit();
    	}
     
    	$mail = new PHPMailer();
    	$mail->Host=strtolower($_POST['mlHost']);
    	$mail->Mailer = "smtp";
    	$mail->Port = $_POST['mlPort'];
    	if ($_POST['mlHtml']==1) {
    		$mail->IsHTML(true);
    	}
    	$mail->CharSet="utf-8";
    	$mail->From=strtolower($_POST['mlFrom']);
    	$mail->FromName = $_POST['mlFromName'];
    	$tab_addr = explode("|",$_POST['mlDestination']);
    	for ($i=0;$i<count($tab_addr);$i++) {
    		$mail->AddAddress(strtolower($tab_addr[$i]));
    	}
    	$mail->AddReplyTo($sender);
    	$mail->Subject=$subject;
    	$mail->Body="ici en fait mon joli mail en HTML";
            if(!$mail->Send()){ //Teste si le return code est ok.
    	  echo $mail->ErrorInfo;
    	}
    	else{	  
    	  echo 'OK';
    	}
    	$mail->SmtpClose();
    	unset($mail);
    Plus d'autres tests mais sans intérêt ici.

    Mon problème est que lorsque dans mon Textarea qui contient le message j'utilise certains caractères comme "?" par exemple, le message ne pars pas.

    Quel encodage dois-je utiliser ? et de quel côté ? JS ? Php ?

    Merci par avance.

    Benjamin.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Je pense que la solution est de remplacer tous les ? (et autres caractères problématiques) par \? dans ta chaine params...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Par défaut
    Ok, mais il existerait pas une fonction avec prototype qui permette de faire ça par hasard ?

    Merci.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Non, pas à ma connaissance...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Par défaut
    Bon le fait de rajouter un "\" devant le "?" ne suffit pas, j'ai trouvé un moyen en encodant le caractère de la même manière que urlencode() en php avant d'envoyer la requête Ajax.

    J'ai codé une petite routine du coup pour faire ça en auto si ça intéresse certains :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function cleanParam(pValue) {
        var rOut = pValue;    		
        <?php                     
            echo "tabCodes = new Array();";
            for($i=33;$i<126;$i++) {
                if ((($i >= 33) && ($i <= 47))||(($i >= 58) && ($i <= 64))||(($i >= 91) && ($i <= 96))||(($i >= 123) && ($i <= 126))) {
                    $car = chr($i);                                 
                    $js = (($i==39)||($i==92)) ? "tabCodes['\\".$car."']" : "tabCodes['".$car."']";
                    $js.= " = '".urlencode($car)."';";
                    echo $js;
                }
            }                       
        ?>       		    		
        for (var iKey in tabCodes) {        
            rOut = rOut.replace(new RegExp("\\"+iKey,"g"),tabCodes[iKey]);
        }				
        return rOut;
    }
    En pensant à faire un stripslashes(urldecode($truc)) côté PHP biensûr !

    Voilà, merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Prototype] Ajax.request => Plusieurs requêtes à la suite
    Par Jonathan.b dans le forum Bibliothèques & Frameworks
    Réponses: 17
    Dernier message: 29/11/2007, 14h24
  2. [Prototype] Passage de variable sur fonction new Ajax.Request
    Par Overstone dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 31/08/2007, 11h36
  3. [Prototype] Gestion d'évenement apres Ajax.Request
    Par Cladjidane dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 22/06/2007, 15h51
  4. [Prototype] [DOM] ajax.updater() ou ajax.request()
    Par wincroc dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 13/06/2007, 11h26
  5. [AJAX] Ajax.Request et le caractère '+'
    Par jon301 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/11/2006, 21h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo