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 :

PHPLib Undefined index [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut PHPLib Undefined index
    Bonsoir tout le monde
    Pour fixer le décor, je suis un pur débutant en PHP et SQL, et j'ai besoin d'un script pour gérer un stock pour mon taf (doit être accessible depuis un navigateur mobile)
    Je me suis donc lancé avec PhpLib/phpBB2 et j'apprend au fur et à mesure. Il se peut donc que j'écrive ou dise une bêtise et je suis là pour qu'on me corrige

    J'effectue une requête avec jointure sur trois tables dans ma base (MySQL), voilà la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT M.nom_modele, COUNT(S.id_modele), E.nom_etat 
    	FROM stock S
    	LEFT JOIN modeles M
    		ON S.id_modele = M.id 
            LEFT JOIN etat E
            	ON S.id_etat = E.id
    	WHERE S.id_societe = 1
    	GROUP BY S.id_modele, S.id_etat ;
    Cette requête passe très bien dans phpMyAdmin.
    J'essaie donc d'assigner ce que je récupère à mon tableau et l'afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $template->assign_block_vars('liste_stock',array());
    while ($resultat = mysql_fetch_assoc($statement))
    	{
    		print_r($resultat); //debug
    		$quantite = $resultat['COUNT(S.id_modele)'];
     
    		$template->assign_block_vars('liste_stock',array(
    			'MODELE'=>$resultat['M.nom_modele'],
    			'QUANTITE'=>$quantite,
    			'ETAT'=>$resultat['E.nom_etat']
    		));
    	}
    Le print_r() m'affiche bien ce à quoi je m'attend, des valeurs tirées de la base de données et jointes sur plusieurs tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [nom_modele] => 930 G [COUNT(S.id_modele)] => 1 [nom_etat] => En panne )
    en revanche je me retrouve quand même avec l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Notice: Undefined index: M.nom_modele in /home/epy/Web/stocks/afficher.php on line 32
    Notice: Undefined index: E.nom_etat in /home/epy/Web/stocks/afficher.php on line 34
    (ces deux lignes pour chaque boucle effectuée)
    Bon c'est une notification mais ça m'arrange bien puisqu'effectivement mon tableau affiché sur la page web est vide alors qu'il ne devrait pas l'être.
    (Tout cela fonctionnait avec la requête simple sur une seule table sans faire de jointure)
    Cela fait un bon moment que je cherche et je ne trouve rien d'intéressant, auriez vous des pistes ?
    Est-ce qu'il y a mieux/plus simple ?
    J'ai pensé à créer une vue, mais ça fait faire deux opérations alors qu'une seule devrait suffire je crois.
    Merci !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    C'est assez clair ce que te dit l'avertissement, tu n'as pas de clé qui s'appelle "M.nom_modele" dans ton tableau. Par contre, tu as nom_modele. Pareil pour nom_etat...

  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
    +1

    En résumé, MySQL ne retourne pas l'alias des tables, mais juste le nom des champs.

    Aussi, concernant ceci : ..., COUNT(S.id_modele), ...
    Ici il est pratique de mettre un alias pour obtenir le résultat de la fonction COUNT() :
    -> ..., COUNT(S.id_modele) AS tot_modele, ...

    Au bout, tu récupère sa valeur grâce à l'alias :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $quantite = $resultat['tot_modele'];

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ah d'accord, donc il ne comprend pas le surnommage si je suis bien ?

    J'avais tenté d'utiliser les AS, mais pas de la bonne façon, j'avais modifié la requête sans utiliser ces modifs dans le PHP
    Merci ! Je teste très vite et je viendrais valider le post
    Dernière modification par Invité ; 06/04/2010 à 15h10.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci, c'était effectivement ça, je n'ai plus l'avertissement.
    En revanche, je n'ai plus l'erreur, mais je n'ai toujours pas de résultat affiché

    J'ai fait afficher les valeurs avec l'aide des clés modele, tot_modele et etat, elles sont bonnes, mais le tableau reste vide malgré la boucle et l'assignation des valeurs à un array du template

    [le code est le même en remplaçant mes clés par celles définies par les AS]

    étrange ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHPLIB] Obtention d'une erreur undefined index
    Par duplo dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 16/02/2006, 15h48
  2. [Librairies] PHPMVC : Undefined index
    Par Benat64 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/12/2005, 09h27
  3. [Noob] Undefined index: id
    Par Devil666 dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2005, 13h00
  4. Undefined index
    Par sebduduf dans le forum Langage
    Réponses: 5
    Dernier message: 02/11/2005, 12h13
  5. Erreur de "Undefined index" sur HTTP_REFERER
    Par guy2004 dans le forum Langage
    Réponses: 4
    Dernier message: 12/10/2005, 12h21

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