Bonjour,
Je viens de me lancer dans l'ajax aujourd'hui et j'essaye de faire des listes liées. Je suis le tutoriel qui est ici http://siddh.developpez.com/articles/ajax/#LIV-A mais avec ma base de données qui est un fichier .mdb.
Pour l'instant je n'est fait que la première partie(réponse au format texte), c.a.d sans la partie responseXML. Je vais passer à la suite une fois que j'aurais régler mon problème.
Voilà mon problème:
Quand j'adapte le code php du tuto qui traite la requete ajax, sa marche:
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 <?php echo "<select name='livre'>"; //connexion BDD $pdo = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\wamp\www\stage_info\developpement\Crystal.mdb;Uid=", "", "", array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); //requete SQL $sql="SELECT CODE_LIGNE,DESI_LIGNE, count(*) FROM ENTETES_CARTES_PAPIER where CODE_UP='CA' and CODE_ATEL='00' group by CODE_LIGNE,DESI_LIGNE"; $resultats = $pdo->query($sql); $resultats->setFetchMode(PDO::FETCH_OBJ); while($res = $resultats->fetch()){ echo "<option value='".$res->CODE_LIGNE."'>".$res->CODE_LIGNE."</option>"; } $resultats->closeCursor(); echo "</select>"; ?>
Le problème c'est que je travail en php objet, et donc que j'ai des fonctions qui me permettent de faire ma connexion à ma bdd, mes requetes sql, mais qui se trouve dans d'autres fichiers. J'essaye d'adapter mon code, ce qui me donne ceci:
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 <?php require_once 'Saisie.php'; class ajaxLivre extends Saisie { echo "<select name='livre'>"; //execute requete sql pour récupérer mes Lignes par Atelier $resultats = recupLigneParAtelier('00'); $resultats->setFetchMode(PDO::FETCH_OBJ); while( $resultat = $resultats->fetch() ){ echo "<option value='".$resultat->CODE_LIGNE."'>".$resultat->CODE_LIGNE."</option>"; } $resultats->closeCursor(); echo "</select>"; } ?>
et là, j'ai l'erreur suivante:
En faite c'est quand je déclare ma classe que sa me fait l'erreur. Ma fonction recupLigneParAtelier() est dans Saisie.php donc je suis obligé d'utiliser cette classe.Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting function (T_FUNCTION) in C:\wamp\www\stage_info\Modele\ajaxLivre.php on line 6.
Voici son code:
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 <?php require_once 'Modele.php'; class Saisie extends Modele { // Renvoie la liste des atelier public function recupAtelier(){ $UP="CA"; $sql="SELECT CODE_ATEL,DESI_ATEL, count(*) FROM ENTETES_CARTES_PAPIER where CODE_UP='".$UP."' group by CODE_ATEL,DESI_ATEL"; //echo $sql; $reponse = $this->executerRequete($sql); return $reponse; } // Renvoie la liste des lignes par atelier public function recupLigneParAtelier($atelier){ $UP="CA"; $sql="SELECT CODE_LIGNE,DESI_LIGNE, count(*) FROM ENTETES_CARTES_PAPIER where CODE_UP='".$UP."' and CODE_ATEL='".$atelier."' group by CODE_LIGNE,DESI_LIGNE"; //echo $sql; $reponse = $this->executerRequete($sql); return $reponse; } } ?>
et voici mon code javascript( c'est celui du tuto):
et mon code html(j'ai laissé les memes id que dans le tuto) :
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 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; } /** * Méthode qui sera appelée sur le click du bouton */ function go(){ 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){ 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","Modele/ajaxLivre.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); }
Code html : 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="panneau_gauche"> <fieldset class="Choix de localisation"> <legend>Recherche</legend> <br> <select name="auteur" id='auteur' onchange="go();" style="width:230px"> <option>Projet</option> <?php foreach ($contenu as $key): echo '<option value="'.$key['CODE_ATEL'].'"> Atelier: '.$key['CODE_ATEL'].' - '. $key['DESI_ATEL'].'</option>'; endforeach ; ?> </select> <span id="loader" style="display: none;"><img src="UI/img/loader.gif" alt="loading" /></span> <div id='livre' style='display:inline'> <select name="livre"> <option value='-1'>Choisir un auteur</option> </select> </div> </fieldset> </div>
J'ai besoin d'un peu d'aide car je bloque depuis une journée la dessus.
merci d'avance.
Partager