Bonjour,

j'ai un souci que je n'arrive pas a résoudre, j'ai fais une messagerie instantané avec jquery et php qui fonctionne très bien MAIS quand je mets exactement " comment tu vas ??? " et me ressort " comment tu vas jQuery17207514670558739454_1413548967624? "

le alerte du js me ressort " comment tu vas ??? "

JS:

var xhr;
        $(this).keydown(function(event) {
            if ( event.which == 13 ) 
            {
                var message = $(this).val();
                var contact = $(this).attr('data-id');
                 if (!xhr || xhr.readyState === 4) 
                 {
                    xhr = $.ajax({
                        url: 'PHP/js.messenger.php',
                        type: 'POST',
                        data: 'envoie=true&contenu=' + message + '&utilisateur=' + contact,
                        dataType: 'json',
                        success: function(data) 
                        {
                        }
                    });
                }
                $(this).val('');
            }
        });
        $('#button_area_messenger').click(function() {
            var message = $('#text_area_messenger').val();
            var contact = $('#text_area_messenger').attr('data-id');
            $.ajax({
                url: 'PHP/js.messenger.php',
                type: 'POST',
                data: 'envoie=true&contenu=' + message + '&utilisateur=' + contact,
                dataType: 'json',
                success: function(data) 
                {
                }
            });
            $('#text_area_messenger').val('');
        });

PHP :

$trim_message = trim($_POST'contenu']);
    $id_destinataire = $_POST'utilisateur'];
    $id_expediteur = $_SESSION'id'];
    if (!empty($trim_message) and !empty($id_destinataire)) 
    {
        mysql_connect(DB_SERVER,DB_LOGIN,DB_PASS);
        mysql_select_db(DB_NAME);
        mysql_query('SET NAMES'.DB_ENC);
        //$preg_message = preg_replace('?{2,}', '?', $trim_message); // Test
        $message = mysql_real_escape_string($trim_message);
        $expediteur = intval($id_expediteur);
        $destinataire = intval($id_destinataire);
        $time = time();
        mysql_query('INSERT INTO messagerie( id_expediteur, id_destinataire, message, date, lu) values ("'.$expediteur.'", "'.$destinataire.'", "'.$message.'", "'.$time.'", "0")');
        mysql_close();
    }

je cherche mais je comprends pas , pouvez vous m'aider ?

5 réponses


ClementParis
Réponse acceptée

Certains caractères ne sont pas fait pour être transmis tels quels via une URL, comme les espaces ou les points d'interrogation par exemple.

Il faut que tu utilises la fonction JavaScript encodeURIComponent() lorsque tu récupères tes variables, comme ceci :

var message = encodeURIComponent($(this).val());
var contact = encodeURIComponent($(this).attr('data-id'));

kaloutch
Auteur

Super merci clement !!

je suis pas un pro du JS mais j'essai de me démerder ^^ et j'apprends.

du coup le fais de pas mettre encodeURIComponent() peu etre une fail du code ?

kaloutch
Auteur
data: $(this).serialize(),

"serialize" fait il les sécurités ?

Il faut bien faire des erreurs pour apprendre ^^

En fait si tu passes des paramètres en URL sans les encoder proprement, tu peux te retrouver avec des caractères accentués, des espaces et autres qui ne fonctionnent pas bien dans les URL. C'est pas forcément un problème de sécurité, c'est surtout que dans certains cas ça peut amener des bugs.

La définition de la fonction serialize() de jQuery est : " Encode un ensemble d'éléments de formulaire comme une chaîne de caractère pour soumission.". En fait cette fonction (et aussi serializeArray() qui pourrait t'intéresser) sert à récupérer les données d'un formulaire et à les encoder pour pouvoir les traiter en AJAX par exemple. Donc ces données sont formatées correctement, de la même façon que la fonction encodeURIComponent() en JS natif ;)

kaloutch
Auteur

ok super ^^ ! merci beaucoup