Aller au contenu

$row['table.field']- Undefined index:


Sujets conseillés

Posté

Hello les génies :)

Bon, problème de CE2 :

J'ai une requete basique avec jointure sur 2 tables. Pas de Pb. Par contre, sur les 83 champs des 2 tables, j'en ai 3 qui ont le même nom.

Pour par me taper les 83 champs dans le select, avec 6 alias, je fais un basic 'select * blabla'.

 

Je recupere là aussi basiquement (j'ai un niveau très très basique :) ) avec un mysql_fetch_array.

 

Et là je coince, pour récuperer les données de mes 6 champs :
$row['table.field'] me renvoi une erreur Undefined index...

 

Bref, ma quesiton : ya une methode pour arriver à ne pas devoir se taper la saisie des 83 champs dans la requete ??

Pitié, dites moi que 'oui, t'es une quiche, ya une soluce !' pitié :D

Posté

Salut,

Problème classique...

Tu fais ca :

Select MT1.*, MT2.*, MT1.Champ1 as Champ1_Matable1, MT2.Champ1 as Champ1_Matable2  from Matable1 MT1 INNER JOIN Matable2 MT2 ON BLABLABLA

Apres tu appelle chaque champ via son alias : print $row['Champ1_Matable1'] et print $row['Champ1_Matable2']

C'est un peu brut de décoffrage comme explication mais sur le principe c'est ca^^

Tu devrais t'en sortir facilement, si c'est pas le cas, poste ta requète et je la remanierai.

Bon courage !

Posté

Bonjour,

 

Tout d'abord, je ne peut que te suggérer de laisser tomber mysql_*.  Ces méthodes sont déjà dépréciées en 5.X et totalement désactivées en 7.0, ce qui causera une armée de FATAL ERROR: MYSQL_FETCH_ARRAY IS NOT A FUNCTION et autres joyeusetés si ton projet venait à tourner dans un environnement 7.0.

 

Ensuite, en effet, tu as la possibilité de re-sélectionner une colonne d'une table sous un autre nom grâce au mot clé AS. Comme indiqué par BlackPage, qui te propose une solution.

 

Pour résumer:

* Emploie une requête SQL similaire à ceci:

SELECT test1.*, test2.*, test2.name AS t2name 
	FROM test1 
	INNER JOIN test2 
	ON test2.test1_id = test1.id;

* Le résultat sera semblable à celui-ci (utilisant des dummy-data)

MariaDB [db]> select test1.*, test2.*, test2.name as t2name FROM test1 INNER JOIN test2 ON test2.test1_id = test1.id;
+----+---------+--------+----+---------+----------+----------+---------+
| id | name    | potato | id | name    | pccotato | test1_id | t2name  |
+----+---------+--------+----+---------+----------+----------+---------+
|  3 | Test1-3 | C      |  1 | Test2-1 | D        |        3 | Test2-1 |
|  2 | Test1-2 | B      |  2 | Test2-2 | E        |        2 | Test2-2 |
|  1 | Test1-1 | A      |  3 | Test2-3 | F        |        1 | Test2-3 |
+----+---------+--------+----+---------+----------+----------+---------+
3 rows in set (0.01 sec)

* N'utilise plus mysql_ en PHP. Privilégie la librairie PDO qui elle est supportée, et te permet de faire l'échappement des données bien plus facilement, en orienté objet.

http://php.net/manual/en/ref.pdo-mysql.php

 

* Utilise des préfixes ou suffixes dans tes colonnes, pour chaque table. Par exemple:

MariaDB [db]> describe users;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| usr_id       | int(11)      | YES  |     | NULL    |       |
| usr_name     | varchar(30)  | YES  |     | NULL    |       |
| usr_email    | varchar(240) | YES  |     | NULL    |       |
| usr_password | varchar(150) | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

MariaDB [db]> describe vehicles;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| veh_id    | int(11)     | YES  |     | NULL    |       |
| veh_color | varchar(40) | YES  |     | NULL    |       |
| veh_year  | int(4)      | YES  |     | NULL    |       |
| veh_km    | int(11)     | YES  |     | NULL    |       |
| veh_usr   | int(11)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Cela te permet, non seulement de toujours savoir à quelle table la colonne corresponds, mais cela évite tout doublon entre deux tables, le préfixe (ou suffixe) étant unique à une table.

Dans mon exemple, j'utilise un préfixe, mais les gens ont plutôt tendance à utiliser un suffixe, tel que IDUSR, NAMEUSR, EMAILUSR, PASSWORDUSR, IDVEH, COLORVEH, YEARVEH, etc.

 

Bonne journée!

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...