Problème de class

Fermé
salyks - Modifié par salyks le 8/01/2013 à 19:57
 salyks - 10 janv. 2013 à 15:12
Bonjour,

Voilà mon code :

contrôleur :

$choix = Choix::getChoixById($_GET['id']);


modèle :

public static function getChoixById($id)
{
require_once('modeles/SQL.class.php');
$requete = SQL::requete('(SELECT "cours" AS type, e.nom, e.prenom, e.numeroHarpege, ec.idChoix, 0 AS nbGroupes, ec.duree, ec.etat, m.libelle_module, m.code_module, p.annee
FROM module m, enseignant e, enseignercours ec, promotion p
WHERE ec.numeroHarpege = e.numeroHarpege AND m.code_module = ec.code_module AND ec.idChoix = ? AND m.promotion = p.id AND p.annee = ?)
UNION
(SELECT "td" AS type, e.nom, e.prenom, e.numeroHarpege, et.idChoix, et.duree, et.nbGroupes, et.etat, m.code_module, m.libelle_module, p.annee FROM module m, enseignant e, enseignertd et, promotion p WHERE et.numeroHarpege = e.numeroHarpege AND m.code_module = et.code_module AND et.idChoix= ? AND m.promotion = p.id AND p.annee = ?)', array($id, $_SESSION['annee'], $id, $_SESSION['annee']), SQL::connexion());
while ($donnees = $requete->fetch(PDO::FETCH_OBJ)){
}
return (new Choix($donnees, ''));
}

Mon problème :
En bref, je veux récupérer un objet Choix mais il est vide. Je tiens a préciser que $_SESSION['annee'] et $_GET['id'] sont bien affectés. D'ailleurs si dans le constructeur je demande un affichage d'un des attribut, ça marche. D'où peut venir le problème ?
Merci

1 réponse

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
9 janv. 2013 à 14:38
Bonjour,

Le problème vient de ces dernières lignes :
while ($donnees = $requete->fetch(PDO::FETCH_OBJ)){
}
return (new Choix($donnees, '')); 


À chaque itération de ta boucle, $donnees est écrasé par la nouvelle ligne de résultat : $requete->fetch(PDO::FETCH_OBJ).
À la dernière itération, il n'y a plus de résultat, et $donnees est écrasé par ce que renvoie fetch dans ce cas, à savoir : FALSE.

Résultat, la ligne suivante devient :
return (new Choix(FALSE, ''));

Vu le nom de ta fonction, j'imagine que tu n'attends qu'un seul résultat à ta requête.

Dans ce cas, je te suggère tout simplement de supprimer la boucle while :
return (new Choix($requete->fetch(PDO::FETCH_OBJ), ''));


Xavier
0
Merci tu m'a sauvé, en plus c'était tout bête...
0