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

PHP & Base de données Discussion :

mauvais resultats affichés sql


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut mauvais resultats affichés sql
    bonjour,
    voila j ai creer une class categories avec cette fonction qui permet de recuperer les elements de la table categories de ma base:
    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
    public function getById()
    	{
     
    		$req="SELECT * FROM achatsenfolie__categorie where id_categorie is NULL";
    		//echo $req
    		$reponse = mysql_query($req)or die ('Erreur : '.mysql_error());
     
    		while($donnees=mysql_fetch_array($reponse))
    		{
     
    return $this->id=$donnees['id'];
    						$this->id=$donnees['id'];
                            $this->titre=$donnees['titre'];
                            $this->description=$donnees['description'];
                            $this->estDansMenu=$donnees['estDansMenu'];
                            $this->estDansContact=$donnees['estDansContact'];
                            $this->estVisible=$donnees['estVisible'];
                            $this->Categorie=$donnees['id_categorie'];
                   }
    	}
    voci l appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $objet = new categorie;
    echo (' <li class="odd">');
    echo $objet->getById();
    echo ('</li>');
    donc je fais un test et ca me retourne bien un numero mais le 1.
    Mais normalement je devrait en avoir bc plus, j ai tester la requete sur la base directement et ai bien apparut plusieurs resultats, alors pourquoi lui n affiche que le 1 resultats je ne comprend pas.
    Merci

    j ai tester en mettant echo a la place de return dans la fonction et ca a fonctionner pourquoi?
    est ce correcte?
    merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    return termine la fonction, il doit être appellé en dernier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($donnees=mysql_fetch_array($reponse)) {	
        return $this->id=$donnees['id'];
        ... etc ...
    }
    Mise à part le problème du return, ici tu ré-affecte (ou écrase) chaque propriété ($this->id par exp.) à chaque tour de boucle, se qui fait que ce les valeurs seront obligatoirement celle de la dernière ligne.

    Si tu veux que ça retourne toutes les lignes (plusieurs lignes et non 1 seul), et bien il faudrait les stocker dans un tableau, et à la fin le retourner.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function getById() {
        $donnees = false;
        ... etc ...
        while($donnee = mysql_fetch_array($reponse)) {	
            $donnees[] = array('id' => $donnees['id'],
                               'titre' => $donnee['titre'],
                               'description' => $donnees['description'],
                               ... etc ...
                               'Categorie' => $donnees['id_categorie']);
        }
        return $donnees;
    }
    Sinon, si tu veux récupérer les valeurs des champs d'1 seule ligne, alors faire une boucle ne sert à rien.
    De plus, si tu compte réellement ré-affecter les valeurs des proprités (id, titre, etc ...), alors un return ne sert à rien aussi.

    Faudrait voir ce que tu souhaite faire, car à l'origine il y a ceci : WHERE id_categorie is NULL
    C'est quand même bizarre de vouloir récupérer des identifiants nulles. Théoriquement un champ de type ID ne peu pas (ou ne doit pas) être nulle, vu que ça devrait être une clé primaire ou clé étrangère.

  4. #4
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut
    bonjour,
    voila comme je disais je debute en php5, en faite je voulais afficher un menu dont les titre serait afficher grace a la table sql.Je ne savais pas trop par ou commencer donc j ai créer cette fonction, merci encore pour le tableau mais je n ai tj rien qui s'affiche:
    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
    	public function getById() {
        $donnees = false;
        $reponse = mysql_query("SELECT * FROM ".self::TB_PREFIX."categorie")or die ('Erreur : '.mysql_error());
        while($donnees = mysql_fetch_array($reponse)) {	
    		$donnees[] = array(
    							'id' => $donnees['id'],
                               'titre' => $donnees['titre'],
                               'description' => $donnees['description'],
                               'estDansMenu' => $donnees['estDansMenu'],
    							'estDansContact'=> $donnees['estDansContact'],
    						'estVisible'=> $donnees['estVisible'],
     
                               'Categorie' => $donnees['id_categorie'],
    						   );
        }
        return $donnees;
    }
    si vous avez d'autre solution a part mes fonction a moi je suis preneuse, car je pense aussi que ma fonction n est pas le meilleur moyen au debut je voulais utiliser le getTitre en recuperant avant l id mais je n'ai pas reussit, de plus je ne sais pas si c est la meilleur solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function getTitre() {
    		return (string) $this->titre;
    	}
    merci de tout l aide que vous pourrez m apporter.

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    En faisant du simple copier/coller j'ai commis quelques erreurs, donc je corrige en changeant les noms des variables/tableaux, comme ça plus de confusions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function getById() {
        $donnees = false;
        ... etc ...
        while($categorie = mysql_fetch_array($reponse)) {	
            $donnees[] = array('id' => $categorie['id'],
                               'titre' => $categorie['titre'],
                               'description' => $categorie['description'],
                               ... etc ...
                               'Categorie' => $categorie['id_categorie']);
        }
        return $donnees;
    }
    Ce n'était pas très visible entre $donnee (sans s) et $donnees.

    Ceci dit, te ton coté faut aussi éviter de faire du copier/coller comme ça, mais adapter un code en respectant la logique.

    Le mysql_fetch_array() renvoie un tableau, les valeurs des champs, mais pour chaque ligne (et non toutes) à chaque tour de boucle, donc ici $categorie (j'avais mis $donnee sans s).
    Ensuite, comme le but ici c'est de stocker toutes les lignes, il faut donc créer un 2ème tableau, $donnes (cette fois avec un s), et c'est celui ci qui doit être retourné.
    Faut pas que ça soit le même tableau quoi

  6. #6
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut
    merci de ton aide, j ai bien appliquer ce que tu a ecrit mais je n obtient que Array en affichage
    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
    public function getById() {
        $donnees = false;
        $reponse = mysql_query("SELECT * FROM ".self::TB_PREFIX."categorie")or die ('Erreur : '.mysql_error());
        while($categorie = mysql_fetch_array($reponse)) {	
            $donnees[] = array('id' => $categorie['id'],
                               'titre' => $categorie['titre'],
                               'description' => $categorie['description'],
                              'estDansMenu' => $categorie['estDansMenu'],
    							'estDansContact'=>$categorie['estDansContact'],
    						'estVisible'=> $categorie['estVisible'],
                               'Categorie' => $categorie['id_categorie']);
        }
        return $donnees;
     
    }
    j ai fait une recherche et de cette erreur:

    Comme php ne savait pas quoi afficher, il a choisi de te prévenir que c'était un tableau en affichant 'Array' ('tableau' en anglais).

    mais il me donne pas de reponse.
    merci.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    getAllCategorie() retourne un tableau.
    un echo d'un tableau donne la chaine "array"
    Si tu veux voir ca que contient le tableau, tu peux utiliser print_r()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut
    merci sabotage, je sais que le print peut afficher mais ce n est pas cela que je veux en faite je veux afficher le titre de categorie pour le mettre en menu.
    Je penser utiliser le getTitre() mais je n ai pas reussi.
    peut tu m aider?
    MERCI

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faudrait alors constuire ton tableau en l'indexant par id.

    Pour obtenir le nom d'une catégorie tu auras juste à utiliser $ton_tableau[$id_que_tu_veux]['titre']
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut
    merci sabotage mais en faite ce n esp pas une catgeorie que je fait afficher c est tous les titres des categories.

    j ai commerncer l indexation mais cela fait super lontemps que je l ai pas fait je sais plut exactement comment on fait l indexation.
    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
    public function getAllCategorie() {
        $donnees = false;
        $reponse = mysql_query("SELECT * FROM ".self::TB_PREFIX."categorie")or die ('Erreur : '.mysql_error());
        while($categorie = mysql_fetch_array($reponse)) 
    	{	
    			//ligne du tableau indexée par un index unique (champ id)
     
            $donnees[] = array('id' => $categorie['id'],
                               'titre' => $categorie['id']['titre'],
                               'description' => $categorie['id']['description'],
                              'estDansMenu' => $categorie['id']['estDansMenu'],
    							'estDansContact'=>$categorie['id']['estDansContact'],
    						'estVisible'=> $categorie['id']['estVisible'],
                     'Categorie' => $categorie['id']['id_categorie']);
     
     
        }
     
      return($donnees);
     
    }
    de plus pense tu que c est le meilleur moyen pour afficher le titre des categorie ce genre de function.
    merci de tes conseils.

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Dans tous les cas, indexer en utilisant l'id est une bonne idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         $donnees[$categorie['id']] = array('titre' => $categorie['id']['titre'], ....
    Pour afficher ce que tu as recolté, tu as juste a parcourir le retour de ton getAllCategorie() avec un foreach()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [Toutes versions] Resultat requete SQL a afficher dans Excel
    Par yoyoz dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/02/2011, 11h45
  2. [MySQL] requete qui affiche mauvais resultat
    Par caro71ol dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/02/2011, 10h07
  3. vba: afficher resultat requete sql
    Par ToTo develop dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/07/2008, 13h08
  4. resultat requete SQL d'un select dans variable vb
    Par seb_06 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 11/10/2004, 16h29
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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