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 :

Remplir une liste dynamiquement à partir d'un fichier PHP


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Remplir une liste dynamiquement à partir d'un fichier PHP
    Bonjour,
    Alors en fait je bloque sur un truc qui me parait tout bete mais je n'y arrive pas....
    Je vous explique mon probleme depuis le début:
    Alors en fait j'ai une page HTML classique,en fait dans cette page j'aimerai afficher une liste de langue.
    Mais la liste de langue doit etre générée dynamiquement,en effet cette liste de langue peut changer suivant les langues présentes dans un fichier XML.
    Je vous expique donc ce que j'ai fait.

    J'ai d'abord un fichier XML (SOURCE-XML.xml) de type:

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <rows>
     
    	<row id="0">
     
    		<cell xml:lang="en">English sentence 1</cell>
     
    		<cell xml:lang="fr">Phrase Francaise 1</cell>
     
                    <cell xml:lang="sp">Phrase Espagnol 1</cell>
     
                    <cell xml:lang="jp">Phrase Japonaise 1</cell>
     
                    <cell xml:lang="it">Phrase Italienne 1</cell>
     
                    <cell xml:lang="ar">Phrase Arabe 1</cell>
     
    		</row>
     
    	<row  id="1">
     
    		<cell xml:lang="en">English sentence 2</cell>
     
    		<cell xml:lang="fr">Phrase Francaise 2</cell>
     
                    <cell xml:lang="sp">Phrase Espagnol 2</cell>
     
                    <cell xml:lang="jp">Phrase Japonaise 2</cell>
     
                    <cell xml:lang="it">Phrase Italienne 2</cell>
     
                    <cell xml:lang="ar">Phrase Arabe 2</cell>
     
    		</row>
     
    </rows>
    que je parse avec un fichier PHP (pour récupérer les langues) de ce type:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    <?php
    $nom_fichier="SOURCE-XML.xml";
     
    //Copie de la totalité du fichier XML dans une string
    $tout=file_get_contents("$nom_fichier");
     
    //Récupération des données
    $token=strtok($tout, '<');
    $token=strtok('>');
    $a=0;
     
    while($token!="/rows"){
                            $token=strtok('<');
                            $token=strtok('>');
                            if($token=="cell xml:lang=\"en\""){
                                    $table[$a]="Anglais";
                                    $a++;
                            }
                            else if($token=="cell xml:lang=\"fr\""){
                                    $table[$a]="Francais";
                                    $a++;
                            }
                            else if($token=="cell xml:lang=\"jp\""){
                                    $table[$a]="Japonais";
                                    $a++;
                            }
                            else if($token=="cell xml:lang=\"ru\""){
                                    $table[$a]="Italien";
                                    $a++;
                            }
                            else if($token=="cell xml:lang=\"ch\""){
                                    $table[$a]="Espagnol";
                                    $a++;
                            }
                            else if($token=="cell xml:lang=\"sp\""){
                                    $table[$a]="Arabe";
                                    $a++;
                            }
                     }
     
    //Ne marche que si le fichier xml contient au moins une langue
    $nbrOcc=0;
    $y=0;
    $i=0;
    $z=0;            
    $list[$i]=$table[0];
    $i++;
    for($z=1;$z<$a;$z++){
            $lang=$table[$z];
            for($y=0;$y<$i;$y++){
                    if($list[$y]==$lang)$nbrOcc++;
            }
      if($nbrOcc==0){
            $list[$i]=$lang;
            $i++;
      }
      $nbrOcc=0;
    }
    echo "<select name='langage'>";
     
    for($z=0;$z<$i;$z++){
            echo "<option value='$list[$z]'>$list[$z]</option>";
    }
     
    echo "</select>";
    ?>
    donc la je recupere bien une liste avec les différentes langues de mon fichier,
    maintenant ce que je voudrai faire c'est transmettre cette liste à ma page HTML pour qu'elle l'affiche.

    j'arrive à récupérer le code de la liste dans une variable javascript grace à AJAX avec cette fonction:

    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
     
    function rec_lang() {
     
    		var xhr_object = null; 
     
    	   if(window.XMLHttpRequest) // Firefox 
    	      xhr_object = new XMLHttpRequest(); 
    	   else if(window.ActiveXObject) // Internet Explorer 
    	      xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
    	   else { // XMLHttpRequest non supporté par le navigateur 
    	      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	      return; 
    	   }
    	    xhr_object.open("GET", "PHP/rec_lang.php", false); 
    		xhr_object.send(null); 
    		if(xhr_object.readyState == 4) {
    		alert(xhr_object.responseText);
    		listlang = eval(xhr_object.responseText);
    		alert(listlang);
    		alert("Liste de langue bien générée !");
    	   }
     
     
     
    }
    Et voilà,j'aimerai maintenant afficher ma liste dans ma page html,il faut pour celà que j'invoque la fonction rec_lang() et une fois recu la liste que je l'affiche dans ma page mais je n'ai aucune idée de comment faire.
    En effet d'habitude je fais ma liste avec un simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <FORM>
    	Langue source <select name="langsName" id="langs" onChange="var ls = document.getElementById('srcLang'); ls.value = document.getElementById('langs').value;">
    	<option value="default" label=""></option>
    	<option value="ar" label="">Arabe</option>
    	<option value="en" label="">Anglais</option>
    	<option value="sp" label="">Espagnol</option>
    	<option value="fr" label="">Francais</option>
    	<option value="it" label="">Italien</option>
    	<option value="jp" label="">Japonais</option>
    	</select>
    <FORM>
    Mais là j'aimerai que la liste soit celle générée par le fichier PHP car le contenu du fichier XML peut changer pour n'avoir plus que 3 langues par exemple...

    Voilà,j'espere que j'ai été assez clair.
    Et donc si quelqu'un connaissais une solution celà m'aiderait grandement...
    Merci

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 309
    Points : 91
    Points
    91
    Par défaut
    mais cette partie te permet d'afficher ta liste en PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    echo "<select name='langage'>";
     
    for($z=0;$z<$i;$z++){
    	echo "<option value='$list[$z]'>$list[$z]</option>";
    }
     
    echo "</select>";

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Merci de ta réponse faamugol,

    Alors,Oui cette partie me permet d'afficher ma liste en php mais pas dans ma page HTML,car en fait cette fonction est dans une page php .

    Mais je ne veux pas inclure m'a fonction php directement (en mettant les balises <?php ...?> )dans ma page html (car j'ai plein d'autre fonctions dans ma page html que ne supporte pas php donc impossible de renommer ma page en .php).
    Je veux juste faire appel a cette fonction/page php (d'ailleurs les echo n'ont peut-etre rien n'a faire là car c'était pour voir si mon fichier me rendait bien la liste...j'aurai juste à récupérer les parametres je pense).

    (Sinon J'avais déjà réussi à insérer ma page php avec des iframes mais c'est vraiment moches en en plus je ne peux pas récupérer vraiment la langue choisi..).

    En fait ce que je voudrai c'est juste récupérer les différentes langues que me renvoit le fichier php et les afficher dans la liste et les utiliser comme dans une liste classique...

    Mais merci quand meme pour ta réponse!!!

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 309
    Points : 91
    Points
    91
    Par défaut
    à mon avis il n'y pas de facon de recuperr ce qui du coté PHP (server) vers HTML sans passer par <?PHP ?>

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Il faut récupérer la liste (le select donc) grâce à une id (ou toute autre méthode) puis ajouter les options avec javascript dans le select (avec appendChild).
    En gros tu aurais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sel = getElementById('langs') ;
    opt = document.createElement('option') ;
    opt.value = "valeur" ; opt.textContent = "contenu" ;
    sel.appendChild(opt) ;
    Évidemment, tout ça dans une boucle en fonction du retour de xhr_object.responseText

    Cela répond à ta question ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Tout d'abord merci pour vos réponses:

    Citation Envoyé par faamugol
    à mon avis il n'y pas de facon de recuperr ce qui du coté PHP (server) vers HTML sans passer par <?PHP ?>
    Et bien avec ajax je peux récupérer ce que m'envoie le fichier PHP(le serveur),c'est ce que je fais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listlang = eval(xhr_object.responseText);
    Je stocke ce que m'envoie mon fichier PHP dans la variable listlang.
    Maintenant je veux afficher celà dans mon fichier HTML.(Surement en utilisant javascript mais il se pose le probleme de l'initialisation de la variable etc...)

    Citation Envoyé par Tsukaniki
    Il faut récupérer la liste (le select donc) grâce à une id (ou toute autre méthode) puis ajouter les options avec javascript dans le select (avec appendChild).
    En gros tu aurais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sel = getElementById('langs') ; 
    opt = document.createElement('option') ; 
    opt.value = "valeur" ; 
    opt.textContent = "contenu" ; 
    sel.appendChild(opt) ;
    Évidemment, tout ça dans une boucle en fonction du retour de xhr_object.responseText

    Cela répond à ta question ?
    Ta réponse m'intéresse beaucoup car il me semble que c'est ca que je veux faire mais je ne comprends pas exactement ce que tu me dit.Pourrai-tu me détaillé un peu plus le raisonnement?

    Merci beaucoup

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonjour,
    Bon alors ca y est j'arrive à charger ma liste à partir de mon fichier php.....

    Mais j'ai encore un PROBLEME!!!

    Je vous mets d'abord la solution que j'ai trouvée en fait,dans ma fonction ajax,je mets ce que mon renvoi le fichier php dans un innerHTML en fonction de l'ID:

    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
     
    function rec_lang() {
     
    		var xhr_object = null; 
     
    	   if(window.XMLHttpRequest) // Firefox 
    	      xhr_object = new XMLHttpRequest(); 
    	   else if(window.ActiveXObject) // Internet Explorer 
    	      xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
    	   else { // XMLHttpRequest non supporté par le navigateur 
    	      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	      return; 
    	   }
    	    xhr_object.open("GET", "PHP/rec_lang.php", false); 
    		xhr_object.send(null); 
    		if(xhr_object.readyState == 4) {
    		alert(xhr_object.responseText); 
    		listlang = eval(xhr_object.responseText);
    		alert(listlang);
    		document.getElementById('langs').innerHTML =listlang;
    		document.getElementById('langt').innerHTML =listlang;
    		alert("Langue bien générée !");
    	   }
     
     
     
    }
    que je charge comme celà dans mon fichier HTML:

    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
     
    <div id='langs' style='display:inline'>
    	<FORM name="langs">
    	Langue source <select name="langsName" id="langs" onchange="if (this.selectedIndex > 0){langt.langtName.disabled = false;}" onClick="var ls = document.getElementById('srcLang'); ls.value = document.getElementById('langs').value;">
    	<div id='langss' style='display:inline'>
    	<option value='-1'>Choisir une langue</option>
    	</div>
    	</select>
    	</form>
       </div>
       <div id='langt'style='display:inline'>
       <form name="langt">
    	Langue de destination 1 <select name="langtName" id="langt" disabled onchange="if (this.selectedIndex > 0){nimp.langtName2.disabled = false;}" onClick="var lt = document.getElementById('trgLang'); lt.value = document.getElementById('langt').value;">
     
    	<div id='langtt' style='display:inline'>
    	<option value='-1'>Choisir une langue</option>
    	</div>	
    	</select>
    	</form>
    	</div>
    Le probleme c'est que comme vous le voyez dans le code,je ne veux pas remplir une liste déroulante mais plusieurs et que je dois récupérer des variables en fonctions de ce qui a été choisi,le probleme c'est que ces variables n'ont pas le meme nom dans chaque select......alors qu'avec ce que j'envoie du fichier php..ils ont tous le meme select.

    Donc mon idée a été de vouloir charger que les options(je ne savais pas si c'étais possible..) et de laisser chaque select propre...mais celà ne marche pas....ou je m'y suis mal pris..

    En fait je pense que la solution se trouve peut-etre dans ce que m'a dit Tsukaniki mais je n'arrive pas à voir exactement comment faire...donc si vous avez des idées..

    Merci bien

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonsoir à tous,
    Probleme résolu!!

    Voilà,la solution que j'ai trouvé s'applique à mon probleme mais c'est bon ca marche,je trouve que c'est un peu du bricolage mais bon...

    Alors tout d'abord voilà ce que j'envoie dans mon fichier PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    echo "<b>";
    for($z=0;$z<$i;$z++){
    	echo "<option value=\"$list[$z]\" label=\"\">$list[$z]</option>";
    }
    echo"</b>";
    vous noterez la présence d'une balise <b>...</b> qui ne sert à rien en soit mais en fait si je n'ai pas de balise qui ouvre et qui ferme mes options,ca ne marche pas..donc j'ai trouvé cette solution...

    Ensuite voilà la fonction AJAX qui recupere tout ca et me créer mes select personalisés:
    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
     
    <script language="javascript">
    var listlang = null;
    var dejavu =0;
    function rec_lang() {
     
    		var xhr_object = null;
     
    	    var listlangs = "" ;
    		var listlangt = "" ;
     
    	   if(window.XMLHttpRequest) // Firefox 
    	      xhr_object = new XMLHttpRequest(); 
    	   else if(window.ActiveXObject) // Internet Explorer 
    	      xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
    	   else { // XMLHttpRequest non supporté par le navigateur 
    	      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	      return; 
    	   }
    	    xhr_object.open("GET", "PHP/rec_lang.php", false); 
    		xhr_object.send(null); 
    		if(xhr_object.readyState == 4) {
    		alert(xhr_object.responseText); 
    		listlang = eval(xhr_object.responseText);
    		alert(listlang);
    		if(dejavu == 0){listlangs ="<form name='langs'>"+"Langue Source  "+"<select name='langsName' id='langs' onchange=\"if (this.selectedIndex > 0){langt.langtName.disabled = false;}\" onClick=\"var ls = document.getElementById('srcLang'); ls.value = document.getElementById('langs').value;\">"+listlang+"</select>"+"</form>";}
    		else {listlangs = listlang};
    		alert("listlangs"+listlangs);
    		if(dejavu == 0){listlangt ="<form name='langt'>"+"Langue de Destination  "+"<select name='langtName' id='langt' disabled     onchange=\"if (this.selectedIndex > 0){langt2.langtName2.disabled = false;}\" onClick=\"var lt = document.getElementById('trgLang'); lt.value = document.getElementById('langt').value;\">"+listlang+"</select>"+"</form>";}
    		else {listlangt = listlang};
    		alert("listlangt"+listlangt);
    		listlangt2 ="<form name='langt2'>"+"Ajouter des langues "+"<select name='langage' disabled>"+listlang+"</select>"+"</form>";
    		listlangt3 ="<form name='langt3'>"+"<select name='langage'>"+listlang+"</select>"+"</form>";
    		listlangt4 ="<form name='langt4'>"+"<select name='langage'>"+listlang+"</select>"+"</form>";
    		listlangt5 ="<form name='langt5'>"+"<select name='langage'>"+listlang+"</select>"+"</form>";
    		document.getElementById('langs').innerHTML =listlangs;dejavu = dejavu+1; 
    		document.getElementById('langt').innerHTML =listlangt;
    		alert("Langue bien générée !");
    	   }
     
     
     
    }
    Et enfin mes balises DIV dans mon fichier HTML:

    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
     
    <html>
    <head>...</head>
    <body>
    <div id='langs' style='display:inline'>
    	<FORM name="langs">
    	Langue source <select name="langsName" id="langs" onchange="if (this.selectedIndex > 0){langt.langtName.disabled = false;}" onClick="var ls = document.getElementById('srcLang'); ls.value = document.getElementById('langs').value;">
    	<div id='langss' style='display:inline'>
    	<option value='-1'>Choisir une langue</option>
    	</div>
    	</select>
    	</form>
       </div>
       <div id='langt'style='display:inline'>
       <form name="langt">
    	Langue de destination 1 <select name="langtName" id="langt" disabled onchange="if (this.selectedIndex > 0){nimp.langtName2.disabled = false;}" onClick="var lt = document.getElementById('trgLang'); lt.value = document.getElementById('langt').value;">
     
    	<option value='-1'>Choisir une langue</option>
    	</select>
    	</form>
    	</div>
    </body>
    </html>
    Vous pourrez noter la présence d'une fonction qui permet de griser la liste 2 tant qu'une option de la liste 1 n'a pas été choisie.

    Voilà donc je peux mettre mon post en résolu,merci à ceux qui m'ont aidé.

    Bye Bye

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/06/2009, 11h57
  2. [MySQL] Remplir une liste déroulante à partir d'une autre liste dynamique
    Par Sekigawa dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 31/12/2008, 08h54
  3. [XSLT] Générer une liste déroulante à partir d'un fichier xml ?
    Par chipster45 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 30/03/2007, 09h59
  4. remplir une table a partir d'un fichier
    Par Poulain dans le forum ASP.NET
    Réponses: 1
    Dernier message: 23/02/2007, 20h12
  5. Remplir une liste déroulante à partir d'un champ dans une pop up
    Par wiam26 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/08/2006, 16h42

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