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

AJAX Discussion :

[AJAX] passer plusieurs variables et renvoyer du html


Sujet :

AJAX

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Points : 104
    Points
    104
    Par défaut [AJAX] passer plusieurs variables et renvoyer du html
    Bonjour à tous,

    Je découvre l'Ajax, car j'ai enfin un peu le temps de m'y mettre, et je souhaiterais comme exercice faire un truc tout simple :

    J'ai un lien html qui affiche le genre d'un membre : homme ou femme

    Si on clique sur ce lien et qu'on est un homme ca le change en femme et vice et versa.

    Aussi lorsque je clique sur le lien, ca met à jour la base de données, en envoyant deux variables : l'ID du membre et le genre

    Voici ce que j'ai fait pour l'instant :

    Dans mon head :

    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
    	<script type="text/javascript">
     
    		function getXhr(){
    			var xhr = null; 
    			if(window.XMLHttpRequest) // Firefox et autres
    			   xhr = new XMLHttpRequest(); 
    			else if(window.ActiveXObject){ // Internet Explorer 
    			   try {
    						xhr = new ActiveXObject("Msxml2.XMLHTTP");
    					} catch (e) {
    						xhr = new ActiveXObject("Microsoft.XMLHTTP");
    					}
    			}
    			else { // XMLHttpRequest non supporté par le navigateur 
    			   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    			   xhr = false; 
    			} 
    			return xhr;
    		}
     
    		function genre(){
    				var xhr = getXhr()
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						alert(xhr.responseText);
    					}
    				}
    				xhr.open("GET","ajax_membre_genre.inc.php?",true);
    				xhr.send(null);
    			}
     
     
    		</script>
    mon html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div id="contenu_genre" style="float:left;">
    <a href="#" onclick="genre();" class="lienGras">Homme</a></div>

    et mon 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
    $sSql="
    			UPDATE
    				matable
    			SET
    				genre= ?
    			WHERE
    				id_membre = ?
    		";
    		$oSth = $GLOBALS['BDD']->prepare($sSql);
    		$oSth->execute(array($_GET['genre'], $_GET['id_membre']));
     
    		switch($_GET['genre']){
     
    			case 0 :
    				// le membre est un homme
    				echo '<a href="#" onclick="genre();" class="lienPetitNoir">homme</a>';
    			break;
     
    			case 1 :
    				// le membre est une femme
    				echo '<a href="#" onclick="genre();" class="lienGras">femme</a>';
    			break;
    		}
    le php fnctionne, mais ce que je n'arrive pas a mettre en place c'est la liaison entre ces éléments, j'ai cherché un peu partout sur le forum, mais n'est pas trouvé d'explications.

    Merci de votre aide

  2. #2
    Membre régulier Avatar de simotaqi
    Inscrit en
    Février 2010
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 144
    Points : 117
    Points
    117
    Par défaut
    bonjour ,
    pour faire , tu doit mettre un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById('contenu_genre').innerHTML=xhr.responseText;
    a la place de alert

    ainsi, homme va etre changer selon la respose du code php

    Tous les chemins menent a la connaissance. Lequel est le plus court?
    de meme , Tous les chemins menent a l'ignorance, Lequel est le plus long?


    -------- ^ ^----------
    ------SMOoOTQ-------
    ---------( - )---------

  3. #3
    Membre régulier Avatar de simotaqi
    Inscrit en
    Février 2010
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 144
    Points : 117
    Points
    117
    Par défaut
    tu dois egalement specifier les variables $_GET['genre'] et $_GET['id_genre'] de ton code php

    essaie plutot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xhr.open("GET","ajax_membre_genre.inc.php?genre="+valeurgenre+"&id_genre="+valeurid,true);
    a la place de xhr.open("GET","ajax_membre_genre.inc.php?",true);

    car tu si tu travail avec la method get , tu dois passer les variable par ton url
    Tous les chemins menent a la connaissance. Lequel est le plus court?
    de meme , Tous les chemins menent a l'ignorance, Lequel est le plus long?


    -------- ^ ^----------
    ------SMOoOTQ-------
    ---------( - )---------

  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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Attention aussi à deux écueils assez courants :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" onclick="genre();" class="lienGras">Homme</a></div>
    Tu dois mettre un return false après l'appel de la fonction, sinon, le comportement normal du lien sera lancé, ce qui va provoquer un rechargement de la page et casser la requête :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" onclick="genre();return false;" class="lienGras">Homme</a></div>

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch($_GET['genre']){
     
    	case 0 :
    		// le membre est un homme
    		echo '<a href="#" onclick="genre();" class="lienPetitNoir">homme</a>';
    	break;
     
    	case 1 :
    		// le membre est une femme
    		echo '<a href="#" onclick="genre();" class="lienGras">femme</a>';
    	break;
    }
    En faisant comme ça, lorsque tu intègreras le retour dans ta page, le code JavaScript (contenu de l'attribut onclick) ne sera pas évalué et donc pas fonctionnel.
    Il faut donc renvoyer uniquement le contenu du lien (homme ou femme) et intégrer cela directement dans le lien existant, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('contenu_genre').getElementsByTagName('a')[0].innerHTML=xhr.responseText;
    voire en ajoutant un id à ton lien (la meilleure solution).
    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 régulier
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Points : 104
    Points
    104
    Par défaut
    Merci pour toutes ces réponses que j'ai misent en place.
    Bon c'est pas encore ca, mais plutôt que de vous demander d'ou le problème peut venir, j'aimerai essayer de trouver, c'est comme ca que ca rentre
    Mais autant en php, pas de soucis, mais en ajax, comment faites vous pour débuger ?
    Sachant qu'au préalable j'ai testé le php qui marche sans soucis ?

    Avez-vous des petites techniques qui me feront surement progresser ?

    Merci encore.

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonsoir,
    Mais autant en php, pas de soucis, mais en ajax, comment faites vous pour débuger ?
    Installes Firebug sur ton firefox.
    Montres nous ton nouveau code pour qu'on puisse t'aider.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Points : 104
    Points
    104
    Par défaut
    Je viens de comprendre mon erreur, merci Firebug
    En fait j'avais sécurisé ma page ajax.php avec une variable.

    Du genre : dans ma page qui contient le javascript, je déclare une variable $ajax = TRUE ;

    et dans mon ajax.php, je vérifie si cette variable est à TRUE, le truc c'est que comme c'est pas un include, la variable n'était pas reconnue. j'ai donc un resultat, pas encore celui que j'attends, mais je compte bien y arriver

    Ma question maintenant, c'est comment proteger mes pages ajax qui contiennent le php, car il suffit de l'appeler, et de lui passer les parametre attendus et surtout déclarés dans le js pour que le script s'execute... ?

    un grand merci pour votre aide

  8. #8
    Membre régulier Avatar de simotaqi
    Inscrit en
    Février 2010
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 144
    Points : 117
    Points
    117
    Par défaut
    bon, est ce que tu peux préciser ta question, je ne sais pas qu'est ce que tu veux dire par "proteger tes pages ajax"??
    Tous les chemins menent a la connaissance. Lequel est le plus court?
    de meme , Tous les chemins menent a l'ignorance, Lequel est le plus long?


    -------- ^ ^----------
    ------SMOoOTQ-------
    ---------( - )---------

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Points : 104
    Points
    104
    Par défaut
    Ok,
    En fait quand j'appelle mes fonctions php via ajax, j'utilise cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.open("GET","ajax_membre_genre.inc.php?genre="+valeurgenre+"&id_genre="+valeurid,true);
    Ce qui signifie que si j'affiche le code de la page, je récupère l'url, et peux m'amuser à passer n'importe quoi dans l'url, et même charger un robot de se faire plaisir.

    Ce que je voudrais, c'est être sure que celui qui appelle la page ajax_membre_genre.inc.php en a les droits.

    Merci

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Tu dois mettre un return false après l'appel de la fonction, sinon, le comportement normal du lien sera lancé, ce qui va provoquer un rechargement de la page et casser la requête :
    c'est obselete et ça ne fonctionne plus sur MSIE

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par laurentg2003 Voir le message
    c'est obselete et ça ne fonctionne plus sur MSIE

    Bien sûr que si.

    D'où tiens-tu ça ?

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Points : 104
    Points
    104
    Par défaut
    le return false marche très bien en effet.

    Et concernant la sécurisation des pages ajax.php dont je parle plus haut, vous faites comment ?

  13. #13
    Membre régulier Avatar de simotaqi
    Inscrit en
    Février 2010
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 144
    Points : 117
    Points
    117
    Par défaut
    moi , je travaille avec ajax mais j'ai jamais posé cette question;
    Tous les chemins menent a la connaissance. Lequel est le plus court?
    de meme , Tous les chemins menent a l'ignorance, Lequel est le plus long?


    -------- ^ ^----------
    ------SMOoOTQ-------
    ---------( - )---------

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/06/2007, 15h40
  2. Passer plusieurs variables
    Par god_enel dans le forum Langage
    Réponses: 13
    Dernier message: 05/02/2007, 16h03
  3. [SQL] Passer plusieurs variables à l'aide des checkbox
    Par urbalk dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/10/2006, 19h32
  4. [XSL] Passer une variable a une balise HTML dans un fichier
    Par poseidon2 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 09/03/2006, 16h39

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