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

JavaScript Discussion :

[AJAX] Signe "+" posant problème


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut [AJAX] Signe "+" posant problème
    Bonjour,
    Dans le code ci-dessous, le signe "+" entraîne une erreur de réponse à l'utilisateur :
    $repons1 est la variable contenant la réponse entrée par l'utilisateur dans un formulaire. La réponse attendue est "être + avoir". Le programme détecte une réponse fausse quand l'utilisateur rentre pourtant la bonne réponse. Voici le code :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $comparaison = strcmp($repons1, "être + avoir");
     
    if ($comparaison == 0) {
    echo "Exact !";
    }
    else
    {
    echo "Erreur !";
    }

    Comment régler ce problème ?
    Je vous remercie de votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    As-tu controlé le contenu de $repons1 ?
    var_dump($repons1);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Ton test fonctionne donc ca doit venir de ta variable, la preuve :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $repons1 = "être + avoir";
    $comparaison = strcmp($repons1, "être + avoir");
     
    if ($comparaison == 0) {
    echo "Exact !";
    }
    else
    {
    echo "Erreur !";
    }
    ?>

    renvoie "Exact !"
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Points : 59
    Points
    59
    Par défaut
    la fonction strcmp est sensible à la casse.
    Je pense que le probleme vient de ton accent ê ou des majuscules selon la maniere dont l'utilisateur écrit dans le formulaire.
    essayes la fonction strtoupper($resul1) pour mettre en minuscules la réponse au formulaire que tu comparas à ta chaine sans le ê.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    La fonction var_dump($repons1); me renvoie :

    être avoir

    Le signe "+" s'est donc volatilisé.

    La réponse à l'utilisateur transite par Ajax pour s'afficher sur la même page que la page contenant le formulaire. Peut-être est-ce Ajax qui ne digère pas ce signe. Auquel cas on pourrait résoudre la question comment ?

    merci beaucoup

  6. #6
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Elle ne s'envole pas toute seule, tu dois faire un traitement qui vire certains caractères...
    Vérifie.

    Tu passes par POST pour la soumission ?
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Non, je passe par GET

  8. #8
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    regarde du côté de l'encodage.

    Voici un test complet qui fonctionne...
    Code PHP : 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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
    	<title>Untitled</title>
    </head>
    <body>
    <form post="get" action="<?php echo basename(__FILE__); ?>">
    <input type="text" name="repons1" />
    <input type="submit" name="send" value="Envoyer" />
    </form>
    <?php
    if( filter_has_var( INPUT_GET, 'send' ) ) 
        {
    $repons1 = $_GET['repons1'];
    $comparaison = strcmp($repons1, "être + avoir");
     
    if ($comparaison == 0) {
    echo "Exact !";
    }
    else
    {
    echo "Erreur !";
    }
    }
    ?>
    </body>
    </html>
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Bonjour et merci pour tout votre travail.
    J'ai testé votre proposition. L'erreur suivante m'est renvoyée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Fatal error: Call to undefined function: filter_has_var() in /mnt/102/sdb/e/4/.../xxx.php on line 9
    Mon code est un peu plus compliqué que celui que vous proposez du fait que j'utilise le langage Ajax. Peut-être se trouve-t-il là l'explication du dysfonctionnement.
    L'utilisateur entre ses réponses dans un formulaire puis demande le contrôle de ses réponses à une fonction faisant appel à Ajax, afin de recevoir la correction de son exercice sur la même page que celle où se trouve le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type = "button" name = "send" value = "Je veux voir mon résultat." class="button" onclick = "envReq(exercice)">
    Merci encore de votre attention et de votre temps.

  10. #10
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    AJAX n'est pas un langage...
    Désolé pour le coup du "filter_has_var", tu dois tourné sous PHP4 c'est pour ca que ça ne prend pas, il te suffit de changer le test.

    Bref si tu n'indiques pas le chemin parcouru par ta variable avec le code relatif, ça va être difficile de t'aider
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    J'ai trouvé où le signe "+" disparaît. C'est dans l'URL qui est sensé transmettre la variable $repons1 au fichier .php qui doit la traiter.

    Que conviendrait-il de faire pour que le caractère "+" puisse être inclus dans l'argument passé dans l'URL ?

    merci encore

  12. #12
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    En clair c'est ce que l'on te dit depuis le début !!
    A toi de voir quel traitement est effectué sur la chaîne...
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  13. #13
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par dimi2 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type = "button" name = "send" value = "Je veux voir mon résultat." class="button" onclick = "envReq(exercice)">
    d'où vient la variable "exercice" ?

    est ce que tu protèges le texte envoyée au script PHP ? avec la fonction "encodeURIComponent" par exemple :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    'script.php?argument=' + encodeURIComponent(document.getElementById('leChampTexte').value)

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Bonjour et merci pour votre attention.

    J'ai testé encodeURIcomponent(). Les espaces sont bien encodés par des "%20" mais pas le signe "+"... C'eût été trop beau :-)...

    Finalement je transforme le signe "+" entré par l'utilisateur en signe "#" et j'entre dans la correction "avoir # être" plutôt que "avoir + être"... Pas très pro mais ça marche :-)

    Voici le code, s'il peut servir à d'autres :

    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
     
    chaine = document.f.elements[0].value;
    recherche = chaine.indexOf("+",0);
     
    		 if (recherche != "-1")
    		 {
    		 longueur = chaine.length;
    		 i = 0;
    		 chaine2 = "";
    		   while (i < longueur)
    		   {
    		   lettre = chaine.substr(i,1);
    		   if (lettre != "+")
    		   	  {
    		   	  chaine2 = chaine2 + lettre;
    			  }
    			else
    			  {
    			  chaine2 = chaine2 + "#";
    			   } 
    			 i = i + 1; 
    			}
    En tout cas merci à toutes les personnes qui ont pris sur leur temps pour m'aider.

  15. #15
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par dimi2 Voir le message
    J'ai testé encodeURIcomponent(). Les espaces sont bien encodés par des "%20" mais pas le signe "+"... C'eût été trop beau :-)...
    tu as testé comment ? quand j'affiche le résultat avec "alert" je vois bien les "+" remplacés par "%2B"
    tu as essayé avec quel navigateur ?

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    J'ai testé sous EasyPHP et sous Internet Explorer 7. J'avais fait une erreur de code. Maintenant le signe "+" est bien transmis au fichier PHP mais la comparaison de l'entrée utilisateur avec la réponse attendue renvoie une erreur alors que l'entrée utilisateur est exacte :

    J'ai codé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    futur01.php?repons1="+encodeURIComponent(document.f.reponse1.value);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $comparaison = strcmp($repons1, "avoir + être");
     
    if ($comparaison == 0 ) {
    	echo "Exact !";
    	}
    	else {
    	echo "Erreur !";
    	}

  17. #17
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par dimi2 Voir le message
    J'ai codé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    futur01.php?repons1="+encodeURIComponent(document.getElementById(document.f.reponse1.value));
    ton code JavaScript n'est pas correct, tu dois passer une chaine de caractère comme argument de la fonction "encodeURIComponent". là tu passes un objet JavaScript

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Nos messages se sont croisés. Le code précisé au message précédent fonctionne (le signe "+" est bien transmis au fichier futur01.PHP), mais la comparaison entrée-utilisateur / réponse attendue ne fonctionne pas.

    Sans doute faut-il décoder avant comparaison. Mais comment décoder sous PHP ce qui a été codé sous javascript ?

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    J'ai résolu le problème en déclarant la réponse attendue par la fonction utf8_encode.
    Merci pour vos idées à tous qui m'ont guidé petit à petit vers la résolution de ma question.

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

Discussions similaires

  1. Assembly posant problème hors machine de developpement
    Par theMonz31 dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 15/06/2007, 09h57
  2. [PostgreSQL 7.4] pg_dump et pg_user posant problème
    Par novices dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/04/2007, 16h24
  3. [AJAX]Tutoriel autocompletion > problème accents
    Par worldwide dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/07/2006, 13h48
  4. [VB]Lecture dans une base de donnée posant problème
    Par polo-j dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/03/2006, 00h16
  5. [Mail] Envoi de mail avec une boucle posant problème
    Par dj-julio dans le forum Langage
    Réponses: 7
    Dernier message: 09/01/2006, 10h44

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