Comment faire une requête pour des tables en relation?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 janv. 2006, 22:27

Salut,

Le "-1" se met quand j'encode, dans la requête, le lien entre les 2 pages (mes pages sont générés avec Dreamweaver)
$colname_affect = "-1";
if (isset($_GET['part'])) {
  $colname_affect = (get_magic_quotes_gpc()) ? $_GET['part'] : addslashes($_GET['part']);
}
Je suis désolé mais je comprend pas d'où vient ce "-1"... lorsque tu encodes ? :-k

Il y a bien un -1 mais il n'affecte absolument pas le nom de la table !

Tu n'as pas de table qui s'appel "acrho_participant-1" mais une "acrho_participant" donc normal que tu as une erreur.

Si tu fait ceci:
$query_affect = sprintf("SELECT t1.ID_coureur, t1.nom, t1.prenom FROM acrho_participant AS t1 WHERE t1.ID_coureur = %s", $colname_affect); 
rien ne s'affiche sur le coureur ayant pour id $colname_affect ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 545 Messages

12 janv. 2006, 23:20

Ceci fonctionne ... c'est le code qui générait lorsque que je fais ma requête.
<?php
$colname_affect = "-1";
if (isset($_GET['part'])) {
  $colname_affect = (get_magic_quotes_gpc()) ? $_GET['part'] : addslashes($_GET['part']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_affect = sprintf("SELECT * FROM acrho_participant WHERE ID_coureur = %s", $colname_affect);
$affect = mysql_query($query_affect, $kainbuye) or die(mysql_error());
$row_affect = mysql_fetch_assoc($affect);
$totalRows_affect = mysql_num_rows($affect);
?>
Résultat:
Image

Après changement et bizarement ...
<?php
$colname_affect = "-1";
if (isset($_GET['part'])) {
  $colname_affect = (get_magic_quotes_gpc()) ? $_GET['part'] : addslashes($_GET['part']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_affect = sprintf("SELECT t1.ID_coureur, t1.nom, t1.prenom FROM acrho_participant AS t1 WHERE t1.ID_coureur = %s", $colname_affect); 
$affect = mysql_query($query_affect, $kainbuye) or die(mysql_error());
$row_affect = mysql_fetch_assoc($affect);
$totalRows_affect = mysql_num_rows($affect);
?>
maintenant cela fonctionne toujours ! Bon, je vais continuer ma requête afin de voir si je peux récupérer les autres valeurs dans les autres tables!

Merci (si tu sais expliquer ce qui a fondamentalement changé ... ?)
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Mammouth du PHP | 545 Messages

12 janv. 2006, 23:27

Eh bien non dés que je rajoute une table, il n'y a plus rien dans ma page!

Voici le changement:
$query_affect = sprintf("SELECT t1.ID_coureur, t1.nom, t1.prenom, t4.acrho_club_id_club, t4.acrho_participant_ID_participant, t4.annee, t4.dossard, t4.acrho_categorie_ID_categorie  FROM acrho_participant AS t1, acrho_changement AS t4  WHERE t1.ID_coureur = %s", $colname_affect); 
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 janv. 2006, 23:34

si tu sais expliquer ce qui a fondamentalement changé ... ?)
rien, la requete est la meme niveau résultat juste un ajout de préfixe (t1) et une sélection des champs voulu a la place de * précédés de ce meme préfixe.


Pour plusieurs tables il faut faire le lien entre elles:
$query_affect = sprintf("SELECT t1.ID_coureur, t1.nom, t1.prenom, t4.acrho_club_id_club, t4.acrho_participant_ID_participant, t4.annee, t4.dossard, t4.acrho_categorie_ID_categorie  FROM acrho_participant AS t1, acrho_changement AS t4  WHERE t1.ID_coureur = %s AND t4.acrho_participant_ID_participant = t3.ID_coureur", $colname_affect);
si le lien entre les tables se fait avec "acrho_participant_ID_participant" et "ID_coureur"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 545 Messages

13 janv. 2006, 00:07

Il me semble avoir tout refait convenablement ...
<?php
$colname_chang = "-1";
if (isset($_GET['part'])) {
  $colname_chang = (get_magic_quotes_gpc()) ? $_GET['part'] : addslashes($_GET['part']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_affect = sprintf("SELECT t1.ID_coureur, t1.nom, t1.prenom, t2.id_categorie, t2.nom_categorie, t3.id_club, t3.nom_cub, t4.acrho_club_id_club, t4.acrho_participant_ID_participant, t4.annee, t4.dossard, t4.acrho_categorie_ID_categorie FROM acrho_participant AS t1, acrho_categorie AS t2, acrho_club AS t3, acrho_changement AS t4 WHERE t1.ID_coureur = %s AND t4.acrho_participant_ID_participant = t1.ID_coureur AND t4.acrho_categorie_ID_categorie = t2.id_categorie AND t4.acrho_club_id_club = t3.id_club", $colname_affect);

$chang = mysql_query($query_chang, $kainbuye) or die(mysql_error());
$row_chang = mysql_fetch_assoc($chang);
$totalRows_chang = mysql_num_rows($chang);
?>
mais j'ai une autre erreur
Query was empty
Y-a encore de la poussière dans l'engrenage mais où?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 janv. 2006, 00:17

oui encore une poussière.... la requete.

tu exécute "$query_chang" et tu affecte la requete à quelle variable ?!

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 545 Messages

13 janv. 2006, 00:33

Evidement, vu ainsi! Voici la correction:
<?php
$colname_chang = "-1";
if (isset($_GET['part'])) {
  $colname_chang = (get_magic_quotes_gpc()) ? $_GET['part'] : addslashes($_GET['part']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_chang = sprintf("SELECT t1.ID_coureur, t1.nom, t1.prenom, t2.id_categorie, t2.nom_categorie, t3.id_club, t3.nom_cub, t4.acrho_club_id_club, t4.acrho_participant_ID_participant, t4.annee, t4.dossard, t4.acrho_categorie_ID_categorie FROM acrho_participant AS t1, acrho_categorie AS t2, acrho_club AS t3, acrho_changement AS t4 WHERE t1.ID_coureur = %s AND t4.acrho_participant_ID_participant = t1.ID_coureur AND t4.acrho_categorie_ID_categorie = t2.id_categorie AND t4.acrho_club_id_club = t3.id_club", $colname_chang);

$chang = mysql_query($query_chang, $kainbuye) or die(mysql_error());
$row_chang = mysql_fetch_assoc($chang);
$totalRows_chang = mysql_num_rows($chang);
?>
Et pour imprimer, j'utilise ceci
Affectation de <?php echo $row_chang['t1.prenom']; ?> <?php echo $row_chang['t1.nom']; ?>

mais malheureusement une page blanche http://60gp.ovh.net/~kainbuye/index.php ... &Itemid=43 sans nom affecté!

Moi, cela fait un moment que je suis dans le flou et là j'en perd mon latin car je ne comprend rien de ce qui peut arriver!

En tout cas merci pour ce coup de main
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 janv. 2006, 00:42

si le préfixe pour les champs dans la requete est obligatoire (en cas d'ambiguité) il faut l'enlever pour l'affichage:
Affectation de <?php echo $row_chang['prenom']; ?> <?php echo $row_chang['nom']; ?>

HS, peut servir un jour :wink:

si tu as deux champs ayant le meme nom mais sur 2 tables différentes dans la meme requete tu dois faire appel a des alias et afficher en fonction de ceux-ci:
SELECT t1.nom AS nom1, t2.nom AS nom2 FROM table1 AS t1, table2 AS t2 WHERE ...
(...)
t1.nom => $variable['nom1']
t2.nom => $variable['nom2']

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 545 Messages

13 janv. 2006, 00:47

Non, je n'ai pas 2 fois le même nom mais je pensais que ... !

Par contre, cela ne fonctionne toujours pas et je commence à me désespèrer mais comme cela m'obséde, je continue à espèrer (quel paradox ! ! !)
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 janv. 2006, 01:00

Non, je n'ai pas 2 fois le même nom mais je pensais que ... !
je sais bien d'où le HS (hors sujet) :wink:

affiche la requete générée toujours avec un echo puis exécute dans phpmyadmin et dis nous si tu obtiens un retour.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 545 Messages

13 janv. 2006, 10:58

Salut,

MA requête
$colname_chang = "-1";
if (isset($_GET['part'])) {
  $colname_chang = (get_magic_quotes_gpc()) ? $_GET['part'] : addslashes($_GET['part']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_chang = sprintf("SELECT t1.ID_coureur, t1.nom, t1.prenom, t2.id_categorie, t2.nom_categorie, t3.id_club, t3.nom_cub, t4.acrho_club_id_club, t4.acrho_participant_ID_participant, t4.annee, t4.dossard, t4.acrho_categorie_ID_categorie FROM acrho_participant AS t1, acrho_categorie AS t2, acrho_club AS t3, acrho_changement AS t4 WHERE t1.ID_coureur = %s AND t4.acrho_participant_ID_participant = t1.ID_coureur AND t4.acrho_categorie_ID_categorie = t2.id_categorie AND t4.acrho_club_id_club = t3.id_club", $colname_chang);

$chang = mysql_query($query_chang, $kainbuye) or die(mysql_error());
$row_chang = mysql_fetch_assoc($chang);
$totalRows_chang = mysql_num_rows($chang);
Base de données kainbuye sur le serveur sql8
Erreur

requête SQL :

$colname_chang = "-1"

MySQL a répondu:


#1064 - You have an error in your SQL syntax near '$colname_chang = "-1"' at line 1
Evidement pour la viariable entre les 2 pages!

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Mammouth du PHP | 19672 Messages

13 janv. 2006, 11:11

D'abord, je vais te suggérer une ré-écriture de ta requête de manière lisible:
$query_chang = sprintf("SELECT t1.ID_coureur, 
                               t1.nom, 
                               t1.prenom, 
                               t2.id_categorie, 
                               t2.nom_categorie, 
                               t3.id_club, 
                               t3.nom_cub, 
                               t4.acrho_club_id_club, 
                               t4.acrho_participant_ID_participant, 
                               t4.annee, 
                               t4.dossard, 
                               t4.acrho_categorie_ID_categorie ".
                       "FROM acrho_participant AS t1, 
                             acrho_categorie AS t2, 
                             acrho_club AS t3, 
                             acrho_changement AS t4 ".
                       "WHERE t1.ID_coureur = %s ".
                       "AND t4.acrho_participant_ID_participant = t1.ID_coureur ".
                       "AND t4.acrho_categorie_ID_categorie = t2.id_categorie ".
                       "AND t4.acrho_club_id_club = t3.id_club", $colname_chang);
Il me semble que là au moins, on peut s'y retrouver très rapidement sans devoir s'arracher les yeux;

Ensuite, le champ t1.ID_coureur est une clé primaire, je serais fort surpris que tu puisses y mettre une valeur négative :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 545 Messages

13 janv. 2006, 11:20

Ok, je change plus tard car ici je vais avec madame faire des petites courses!

Pour la clef, ce n'est pas moi qui lui est donné cette valeur mais le générateur de page (et depuis, je me contente de recopier sans savoir pourquoi) mais une requête avec une seule table cette valeur de clef fonctionne! D'ailleurs, je me suis posais la question de faire plusieurs requêtes pour chacune de mes tables plutôt qu'une seule avec toutes mes tables?

Bon, madame m'attend à la porte et tape du pied ... !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 janv. 2006, 12:41

dans la requete
t1.ID_coureur = %s
$colname_chang est considéré comme un string il faut donc soit ajouter des quotes soit ne pas affecter un string a cette meme variable plus logique (en principe) puisque ID_coureur est un autoincrément donc de type entier, de ce faite aussi changer le "%s" en "%d"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 545 Messages

13 janv. 2006, 15:12

De retour après la sotie de madme!

Ok j'ai fait le changement ("string" - j'ai un esprit un peu décalé)
Le message de phpmyadmin quand je génére la requete est le même que plus haut!

Quand j'active mes pages page, cela ne fonctionne pas non plus ... page blanche!

Cyrano,
Je n'ai pas oubliè ton conseil pour ne pas s'arracher les yeux, je m'en occupe pour mon prochain post ... mais ensuite qu'est-ce qu'il restera à faire?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!