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

Langage PHP Discussion :

"Resource id #3" au lieu de l'affichage des données de ma base de données


Sujet :

Langage PHP

  1. #21
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Je crois que tu veux faire trop de choses en même temps... C'est toi qui as écrit tout ce code ?

    On va commencer par essayer de faire fonctionner la mise à jour de la liste déroulante 'select_Nom_mnemonics'.

    Dans ta fonction go(), désactives l'appel à "fnctcours()".

    Est-ce que ta liste déroulante 'select_Nom_mnemonics' est bien mise à jour quand tu changes l'année sélectionnée ?

  2. #22
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    Je crois que tu veux faire trop de choses en même temps... C'est toi qui as écrit tout ce code ?

    On va commencer par essayer de faire fonctionner la mise à jour de la liste déroulante 'select_Nom_mnemonics'.

    Dans ta fonction go(), désactives l'appel à "fnctcours()".

    Est-ce que ta liste déroulante 'select_Nom_mnemonics' est bien mise à jour quand tu changes l'année sélectionnée ?
    Eusebe,

    J'ai trouvé la solution au problème (voir mon message précédent).

    Je t'avoue que je ne comprends pas tout mais grâce à toi, ça va aller.

    Encore un tout grand merci pour ton aide.

    beegees

  3. #23
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par beegees Voir le message
    Je ne comprends pas pourquoi le $_POST[Annee] ne me permettait pas d'utiliser ma variable.

    Tu connais la raison ?
    Oui.

    Si je résume, quand tu sélectionnes une année, ça envoie une requête au serveur (ajaxMneminics.php) pour récupérer une liste de mnémoniques et ça met à jour la liste déroulante 'select_Nom_mnemonics'.

    une fois cette mise à jour faite, tu appelles la fonction javascript fnctcours() qui exécute une autre requête AJAX pour mettre à jour la liste déroulante 'select_Nom_types'. le problème, c'est que pour retrouver cette liste, il te faut le mnémonique sélectionné ET l'année. Or, tu ne passes que le mnémonique (xhr2.send("MNEMONIC="+cours))

    Pour corriger ça, le plus simple est de récupérer les valeurs qui t'intéressent directement dans la fonction javascript. Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var mnemonique = document.getElementById('select_Nom_mnemonics').value;
    var annee = document.getElementById('select_annee').value;
    xhr.send("MNEMONIQUE="mnemonique+"&NOM_ANNEE="+annee);
    Pour faire ça, il faut bien sûr que ta balise select pour les années ait un identifiant unique (select_annee dans mon exemple).

    Un conseil pour te faciliter la vie en javascript : regardes ce qui se fait du côté des bibliothèques comme prototype, jQuery, etc...

    Exemple de simplification avec Prototype : http://amillet.developpez.com/tutori...jax-prototype/

  4. #24
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Un tout grand merci pour ton complément d'information.

    Tu m'as vraiment été d'une grande aide.

    Je reviendrai (très) bientôt sur le forum car ce que j'ai fait est une goutte dans la mer par rapport à ce que je dois encore faire.

    Merci encore.

    beegees

  5. #25
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Excuse-moi de te déranger à nouveau (si il le faut, je peux créer un nouveau post) mais j'essaie maintenant de lier la 4e (et dernière) liste déroulante.

    Pour cela, j'ai fait ceci :

    Dans Ajax_Listes_Deroulantes_Generiques_Types.js qui est la 3e liste déroulante j'ai ajouté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fnctcategories(document.getElementById('select_Nom_types').value);
    Dans la même page, je présume que je ne dois pas toucher à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	xhr2.send("MNEMONIC="+cours); //ici, NOM_ANNEE et annee devraient être génériques !!!!
    J'ai créé un nouveau fichier nommé Ajax_Listes_Deroulantes_Generiques_Categories.js qui contient ce code :

    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
    44
    45
     
    /**
    	* Méthode qui sera appelée sur le changement de la liste déroulante types
    	*/
    	function fnctcategories(type)
    	{
    		//alert(cours);
    		var xhr3 = getxhr3();
    	//	alert(xhr3);
    		// On défini ce qu'on va faire quand on aura la réponse
    		xhr3.onreadystatechange = function()
    		{
    			// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    			//alert(xhr3.readyState);
    			//alert(xhr3.status);
    			if(xhr3.readyState == 4 && (xhr3.status == 200 || xhr3.status == 0 ) )
    			{
    				alert('cool'); //cette alerte me permet de savoir qu'on arrive au moins à cet endroit du code
    				//alert(xhr3.status);
     
    				//******  Je ne comprends pas comment le contenu de leselect3 est connu à cet endroit alors que xhr3.open("POST","Scripts/ajaxLivre.php",true); se trouve                          plus bas 
    				//*******
     
     
    				leselect3 = xhr3.responseText;
     
     
    				//alert('xhr3.responseText vaut '+xhr3.responseText);
    				//						alert(leselect3);
    				// On se sert de innerHTML pour rajouter les options a la liste
    				document.getElementById('select_Nom_types').innerHTML = leselect3; //ici, le nom du select devrait être générique !!!!
    				//alert(leselect3);
     
     
    			}
    		}
     
    		// Ici on va voir comment faire du post
    		xhr3.open("POST","Scripts/ajaxCategories.php",true); //ici, on devrait rend ajaxLivre générique !!!!
    		// ne pas oublier ça pour le post
    		xhr3.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		// ne pas oublier de poster les arguments
    		// ici, l'id de l'auteur
    		xhr3.send("NOM_DU_TYPE="+type); //ici, NOM_ANNEE et annee devraient être génériques !!!!			
    	}
    J'ai aussi AjaxCategorie.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
    <?php
    session_start();
    //print_r($_POST);
    	if(isset($_POST["MNEMONIC"]))
    	{
     
    		$conn = mysql_connect("localhost","root","mdp"); 
    		$db=mysql_select_db("pharma", $conn);
    		$res = "SELECT * FROM inscrits_en WHERE MNEMONIC = '" . $_SESSION[MNEMONIC] . "' AND TYPE_DE_COURS = '" . $_SESSION[TYPE_DE_COURS] . "'";
    		//il faut faire echo'<script LANGUAGE="JavaScript">alert("'.$res.'")... AVANT mysql_query afin d'afficher la requête sql, une variable de session pourrait ne pas être reconnue, c'est une façon facile de le voir.
    		echo'<script LANGUAGE="JavaScript">alert("'.$res.'");</SCRIPT>';	
    		$res = mysql_query($res, $conn); 
     
     
     
     
     
     
    		$nombre = mysql_num_rows($res);
     
     
     
    		while($row = mysql_fetch_assoc($res))
    		{
     
    			echo "<option value='".$row["CATEGORIE"]."'>".$row["CATEGORIE"]."</option>";
    		}
    	}
    	else echo'<script LANGUAGE="JavaScript">alert("pas bon");</SCRIPT>';
     
    ?>
    Bien sûr, ça ne fonctionne pas.

    Saurais-tu stp y jeter un coup d'oeil ?

    préfères-tu que je crée un nouveau post ?

    Merci pour tout.

    beegees

  6. #26
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    J'aimerais que tu essaie de comprendre ce que tu fais, et je n'ai pas l'impression que tu fasses beaucoup d'effort de ce côté là...

    Tu veux mettre à jour une 4ème liste déroulante en fonction du mnémonique et du type de cours sélectionnés.

    Donc il te faut avoir en paramètre ces deux informations : mnémonique et type de cours.

    Ne passes pas par des variables de session, c'est inutile. Essaie de tout faire avec des paramètres GET ou POST.

    Je t'ai donné une piste dans mon dernier message pour :
    - récupérer en JavaScript la valeur sélectionnée d'une liste déroulante ;
    - passer cette valeur en paramètre de la requête AJAX.

    Essaie d'appliquer cette méthode à cette 4ème liste. S'il y a des choses que tu ne comprend pas dans ton code, n'hésites pas à le demander, mais ne me demande pas de faire ton site à ta place !

  7. #27
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Tu as raison,

    Je vais utiliser ce que tu m'as indiqué et je vais essayé de ne travailler qu'avec des variables ajax.

    Je reviendrai pour te dire si j'ai réussi.

    Encore merci à toi.

    beegees

  8. #28
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    J'ai nettoyé mon code en retirant les remarques...

    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 go(annee)
    {
    	var xhr = getXhr();
    	xhr.onreadystatechange = function()
    	{
    		if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0 ) )
    		{
    			leselect = xhr.responseText;
    			document.getElementById('select_Nom_mnemonics').innerHTML = leselect;
    			fnctcours(document.getElementById('select_Nom_mnemonics').value);				
    		}
    	}
     
    	xhr.open("POST","Scripts/ajaxMnemonics.php",true); 
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send("NOM_ANNEE="+annee); 		
     
    }
    J'ai des doutes sur ce code et tant que j'aurais des doutes sur ce code, je ne pourrai pas avancer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('select_Nom_mnemonics').innerHTML = leselect;
    On remplis la liste déroulante select_Nom_mnemonics ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fnctcours(document.getElementById('select_Nom_mnemonics').value);
    On envoie le choix que l'on a fait dans la liste déroulante select_Nom_mnemonics ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.open("POST","Scripts/ajaxMnemonics.php",true);
    Je ne comprend pas quelle page on appelle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.send("NOM_ANNEE="+annee);
    NOM_ANNEE c'est le champ de la base de donnée ?

    annee c'est quoi exactement ?

    Je me demandais aussi pourquoi tu mettais un & devant la variable.

    Je suis sûr qu'après avoir connaissance de ces explications, ça ira mieux.

    Merci d'avance à toi.

    beegees

  9. #29
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par beegees Voir le message
    J'ai des doutes sur ce code et tant que j'aurais des doutes sur ce code, je ne pourrai pas avancer :
    Ca me parait une bonne résolution
    Citation Envoyé par beegees Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('select_Nom_mnemonics').innerHTML = leselect;
    On remplis la liste déroulante select_Nom_mnemonics ?
    Oui. En fait on commence par récupérer la balise qui a comme id 'select_Nom_mnemonics'. C'est un objet javascript, qui a notamment une propriété innerHTML qui représente son contenu. Donc en faisant balise.innerHTML = "blabla", tu remplaces le contenu de la balise par "blabla". Donc ton cas, "leselect" contient le résultat de tarequête ajax, soit des balises "<option>". c'est donc bien une façon de remplir la liste déroulante select.

    Citation Envoyé par beegees Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fnctcours(document.getElementById('select_Nom_mnemonics').value);
    On envoie le choix que l'on a fait dans la liste déroulante select_Nom_mnemonics ?
    Comme pour la fois précédente, on récupère la balise qui a pour id 'select_Nom_mnemonics' avec la méthode document.getElementById(). Les balises select ont une propriété value qui contient la valeur de l'option sélectionnée. Donc l'expression "document.getElementById('select_Nom_mnemonics').value" renvoie cette valeur (le mnémonique sélectionné). Et on la passe àen paramètre à la fonction fnctcours().

    Citation Envoyé par beegees Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.open("POST","Scripts/ajaxMnemonics.php",true);
    Je ne comprend pas quelle page on appelle.
    On appelle la page "Scripts/ajaxMnemonics.php" en envoyant les paramètres en mode POST.

    Citation Envoyé par beegees Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.send("NOM_ANNEE="+annee);
    NOM_ANNEE c'est le champ de la base de donnée ?

    annee c'est quoi exactement ?
    NOM_ANNEE c'est le nom du paramètre passé à la requête. En fait quand on fait xhr.open(), on ne fait pas tout de suite une requête vers le serveur. C'est avec xhr.send() qu'on exécute cette requête. Et les paramètres passés à send() sont les paramètres transmis au serveur (selon la méthode POST ou GET). Ces paramètres doivent être définis sous la forme "parametre1=valeur1&parametre2=valeur2...".

    annee c'est une variable JavaScript qui a été passée en paramètre à ta fonction, regardes la déclaration de ta fonction : "function go(annee)"

    Citation Envoyé par beegees Voir le message
    Je me demandais aussi pourquoi tu mettais un & devant la variable.
    C'est le caractère utilisé pour séparer les paramètres. En fait, c'est comme quand tu passes d'habitude les paramètres dans un lien : "mapage.php ?parametre1=valeur1&parametre2=valeur2". Sauf qu'avec l'objet xhr, la première partie du lien (mapage.php) est défini avec la méthode open(), et la deuxième partie (après le ?) est défini avec la méthode send(). Et de plus, dans un lien les paramètres sont transmis en mode GET, alors qu'avec xhr on peut les transmettre soie en GET soit en POST (c'est ce qui est défini avec la méthode open()).

    j'espère que c'est plus clair ?

  10. #30
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Un super grand merci à toi Eusebe

    Tes explications rendent les choses bien plus claires.

    Encore un tout grand merci à toi.

    beegees

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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