Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks
Bibliothèques et frameworks Forum d'entraide sur les frameworks, templates, bibliothèques de code (PDFLib, eZPdf, JpGraph, Artichow, PEAR, etc). Avant de poster : FAQ bibliothèques, toutes les FAQ PHP et cours bibliothèques
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/05/2006, 15h56   #1
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Par défaut [Ajax] Petit problème avec PHP et AJAX

Bonjour, voila je debute en ajax, j'ai deja lut quelque truc notamment sur ce site qui est super.
Mais la j'ai un petit probleme.
Donc voici ma page php principale:
Code :
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<html>
 <head>
  <title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
  <script type='text/javascript'>
   var xhr = null; 
 
   function getXhr(){
    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; 
    } 
   }
   function gox(){
    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){
      leselect = xhr.responseText;
      // On se sert de innerHTML pour rajouter les options a la liste
      document.getElementById('livre').innerHTML = leselect;
     }
    }
    // Ici on va voir comment faire du post
    xhr.open("POST","ajax.php",true);
    // ne pas oublier ça pour le post
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    // ne pas oublier de poster les arguments
    // ici, l'id de l'auteur
    sel = document.getElementById('auteur');
    idauteur = sel.options[sel.selectedIndex].value;
    xhr.send("idAuteur="+idauteur);
   }
   function go(c){
    if(!c.data.replace(/\s/g,''))
     c.parentNode.removeChild(c);
   }
   function clean(d){
    var bal=d.getElementsByTagName('*');
    for(i=0;i<bal.length;i++){
     a=bal[i].previousSibling;
     if(a && a.nodeType==3)
      go(a);
     b=bal[i].nextSibling;
     if(b && b.nodeType==3)
      go(b);
    }
    return d;
   } 
   /**
   * Méthode qui sera appelée sur le click du bouton
   */
   function gophp(){
    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){
      var xmldoc = xhr.responseXML;
      var root_node = xmldoc.getElementsByTagName('reponse').item(1);
      alert(root_node.firstChild.data);
 
      reponse = clean(xhr.responseXML.documentElement);
      document.getElementById('livre').innerHTML = reponse.getElementsByTagName("reponse").item(0);;
      //alert(reponse.getElementsByTagName("message")[0].firstChild.nodeValue);
     }
    }
    xhr.open("POST","ajaxml.php",true);
    // ne pas oublier ça pour le post
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    // ne pas oublier de poster les arguments
    // ici, l'id de l'auteur
    sel = document.getElementById('auteur');
    idauteur = sel.options[sel.selectedIndex].value;
    xhr.send("idAuteur="+idauteur);
 
   }
  </script>
 </head>
 <body>
  <form>
   <fieldset style="width: 500px">
    <legend>Liste liées</legend>
    <label>Auteurs</label>
    <select name='auteur' id='auteur' onchange='gophp()'>
     <option value='-1'>Aucun</option>
     <?
      mysql_connect("localhost","root","");
      mysql_select_db("bbjess");
      $res = mysql_query("SELECT * FROM auteur ORDER BY nom");
      while($row = mysql_fetch_assoc($res)){
       echo "<option value='".$row["id"]."'>".$row["nom"]."</option>";
      }
     ?>
    </select>
    <label>Livres</label>
    <div id='livre' style='display:inline'>
    <select name='livre'>
     <option value='-1'>Choisir un auteur</option>
    </select>
    </div>
   </fieldset>
  </form>
 </body>
</html>
Et ensuite ma page de traitement:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if(isset($_POST["idAuteur"]))
{
 $connect = mysql_connect("localhost", "root", "");
 mysql_select_db("bbjess");
 $result = mysql_query("SELECT id,titre FROM livre WHERE idAuteur=". $_POST["idAuteur"] ." ORDER BY titre");
 $num = mysql_num_rows($result);
 $file= fopen("results.xml", "w");
 $_xml ="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\r\n";
 $_xml .='<reponse>\r\n';
 $_xml .="<select name='livre'>\r\n";
 while($row = mysql_fetch_assoc($result))
 {
  $_xml .="<option value='".$row["id"]."'>".$row["titre"]."</option>\r\n";
 }
 mysql_close($connect);
 $_xml .="</select>\r\n</reponse>";
 fwrite($file, $_xml);
 fclose($file);
 header('Content-Type: text/xml');
 echo $_xml;
}
?>
Et mon probleme c'est que je n'arrive pas a recuperer la liste en xml.
Comment faire?
Merci beaucoup.
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 16h45   #2
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
Je viens de faire un test en remplacant les appels en base par des valeur en dur, et ca me renvoi bien des donnees.

Par contre je remplacerais plus cette ligne

Code :
var root_node = xmldoc.getElementsByTagName('reponse').item(1);
par cette ligne

Code :
var root_node = xmldoc.getElementsByTagName('reponse').item(0);
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 16h48   #3
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Ca te renvoi la liste livre?
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 16h56   #4
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
Je viens de trouver autre chose a modifer aussi :

tu fais un
Code :
document.getElementById('id_livre')
or le select "livre" n'a pas d'id mais un name.
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 17h06   #5
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Ben j'ai corriger tout ca est les seul donnée que je recupere sont dans l'alert:
\r\n autrement dit le retour a la ligne et chariot du xml
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 17h08   #6
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
essaye de faire sans ta fonction clean et fais le clean dans le code PHP
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 17h30   #7
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Bien alors j'ai changer mon code:
Code :
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
<html>
<head>
<script>
function submitForm()
 { 
  var req = null; 
  //document.ajax.dyn.value="Started...";
 
  if (window.XMLHttpRequest)
  {
    req = new XMLHttpRequest();
   if (req.overrideMimeType) 
   {
    req.overrideMimeType('text/xml');
   }
  } 
  else if (window.ActiveXObject) 
  {
   try {
    req = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e)
   {
    try {
     req = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
   }
          }
 
  req.onreadystatechange = function()
  { 
   //document.ajax.dyn.value="Wait server...";
   if(req.readyState == 4)
   {
    if(req.status == 200)
    {
     // process a XML document here
     var doc = req.responseXML;
     var element = doc.getElementsByTagName('root').item(0);
 
     document.ajax.livre.innerHTML = element.firstChild.data;
    } 
    else 
    {
     document.ajax.dyn.value="Error: returned status code " + req.status + " " + req.statusText;
    } 
   } 
  }; 
  req.open("GET", "results.xml", true); 
  req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  req.send(null); 
 }
</script>
</head>
<body>
<FORM method="POST" name="ajax" action=""> 
   <INPUT type="BUTTON" value="Submit" ONCLICK="submitForm();">
   <select name='livre'>
  <option value='-1'>Choisir un auteur</option>
 </select>
</FORM>
</body>
</html>
Et cette fois je ne travail qu'avec un .xml remplis pour le moment et le voici:
Code :
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="iso-8859-1"?>
<root> 
<select name='livre'>
<option value='6'>Disparu à jamais</option>
<option value='5'>Ne le dis a personne</option>
<option value='4'>Une chance de trop</option>
</select>
</root>
Et donc ca ne fonctionne pas si dans:
Code :
1
2
 
document.ajax.livre.innerHTML = element.firstChild.data;
je met
<option value='6'>Disparu à jamais</option><option value='5'>Ne le dis a personne</option><option value='4'>Une chance de trop</option>
Ca marche, mais sinon impossible de le recupere du xml comment ca se fait?
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 17h36   #8
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Je ne pense pas que cela ait une trop grande importance mais sait-on jamais : dans ton XML, utilise les guillemets plutôt que les apostrophes.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 17h40   #9
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Merci deja ca a changer le probleme ca n'affiche plus rien maintenant lol.
Mais j'ai tester la page en faite quand on affiche le $xml, cela affiche une liste comment ca se fait qu'il n'affiche pas le fichier xml??
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 17h58   #10
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Je croit qu'en faite j'ai trouver, je recupere en texte et non pas en xml car sinon je ne peut pas insere le code en html.
Mais je voudrais savoir quand meme si on peut inserer un bout de fichier xml dans une div?
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h49.


 
 
 
 
Partenaires

Hébergement Web