[AJAX] Listes liées et instance de classe
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:
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:
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:
Citation:
Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting function (T_FUNCTION) in C:\wamp\www\stage_info\Modele\ajaxLivre.php on line 6.
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.
Voici son code:
Code:
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):
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
| 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);
} |
et mon code html(j'ai laissé les memes id que dans le tuto) :
Code:
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.