Un message d'erreur inconnu!

Mammouth du PHP | 545 Messages

03 févr. 2006, 00:54

Salut,

J'ai déjà un post en cour mais j'essaye de m'en tirer alors je tripote!

Voici ma requête initiale qui fonctionne sans problème!
<?php require_once('../Connections/kainbuye.php'); 
$colname_course = "-1"; 
if (isset($_GET['class'])) { 
  $colname_course = (get_magic_quotes_gpc()) ? $_GET['class'] : addslashes($_GET['class']); 
} 
mysql_select_db($database_kainbuye, $kainbuye); 
$query_course = "SELECT t5.id_course, 
                          t5.nom_course, 
                        t5.date, 
                        t5.lieu, 
                        t5.kilometrage, 
                        t5.nbre_part, 
                        t6.ID_classement, 
                        t6.acrho_course_id_course, 
                        t6.dossard, 
                        t6.temps, 
                        t6.moyenne, 
                        t6.place ". 
                "FROM acrho_course AS t5, 
                      acrho_classement AS t6 ". 
                "WHERE t5.id_course = ".$colname_course." ". 
                        "AND t6.acrho_course_id_course = t5.id_course ". 
                        " ". 
                "ORDER BY t6.temps ASC"; 
$course = mysql_query($query_course, $kainbuye) or die(mysql_error()); 
$row_course = mysql_fetch_assoc($course); 
$totalRows_course = mysql_num_rows($course); 
?> 
Mais lorsque que je rajoute des tables dans cette requête il y a une explosion sans réponse!
<?php require_once('../Connections/kainbuye.php');
$colname_course = "-1";
if (isset($_GET['class'])) {
  $colname_course = (get_magic_quotes_gpc()) ? $_GET['class'] : addslashes($_GET['class']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_course = "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,
						t5.id_course, 
                  		t5.nom_course,
						t5.date,
						t5.lieu,
						t5.kilometrage,
						t5.nbre_part,
						t6.ID_classement,
						t6.acrho_course_id_course,
						t6.dossard,
						t6.temps,
						t6.moyenne,
						t6.place ".
				"FROM acrho_participant AS t1, 
                      acrho_categorie AS t2, 
                      acrho_club AS t3, 
                      acrho_changement AS t4,
					  acrho_course AS t5,
				      acrho_classement AS t6 ". 
				"WHERE t5.id_course = ".$colname_course." ".
					    "AND t6.acrho_course_id_course = t5.id_course ".
						" ".
				"ORDER BY t6.temps ASC";
$course = mysql_query($query_course, $kainbuye) or die(mysql_error());
$row_course = mysql_fetch_assoc($course);
$totalRows_course = mysql_num_rows($course);
?>
Server shutdown in progress
Est-ce grave docteur?

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

03 févr. 2006, 00:56

Ça te fait ça en local ou en ligne ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 545 Messages

03 févr. 2006, 01:02

En ligne ... tu peux y aller voir http://www.kain-buyere.be [classement/2004/12 jogging du printemps]

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

03 févr. 2006, 01:05

Le délai d'attente est anormal, ça sent la boucle et un time-out. Quant au message, il n'est pas plus normal, mais ce n'est pas Apache qui semble planter mais MySQL, faut regarder du cté de la requête:

En local, est-ce que ça fonctionne normalement ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 545 Messages

03 févr. 2006, 01:09

En local, est-ce que ça fonctionne normalement ?
Ca c'est un truc à ce faire taper sur les doigts ... je fais pas de 'local' que du 'en ligne'!
Oui, je teste mes pages directements en ligne et comme j'ai toujours une copie, s'il y a un bug ... ! C'est pas la bonne méthode, on me l'a déjà dit ! ! !
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

03 févr. 2006, 01:09

Non, j'ai compris, c'est bien la requête, je suis certain que c'est un produit cartésien, ta jointure est incomplète, je regarde de plus près et je reviens avec ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

03 févr. 2006, 01:15

Bon, c'est bien ça : le problème de la requête suivante:

Code : Tout sélectionner

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, t5.id_course, t5.nom_course, t5.date, t5.lieu, t5.kilometrage, t5.nbre_part, t6.ID_classement, t6.acrho_course_id_course, t6.dossard, t6.temps, t6.moyenne, t6.place FROM acrho_participant AS t1, acrho_categorie AS t2, acrho_club AS t3, acrho_changement AS t4, acrho_course AS t5, acrho_classement AS t6 WHERE t5.id_course = -1 AND t6.acrho_course_id_course = t5.id_course ORDER BY t6.temps ASC;
Tu fais une requête sur 6 tables, mais tu ne fais une jointure que sur les tables t6/t5 : tu as donc un produit cartésien qui se produit sur toutes les autres: Il manque des conditions de jointure dans ta clause WHERE. Le nombre de résultat doit être assez considérable pour arriver à planter MySQL : ce qui est moins bien, c'est que tu n'aies pas testé ta requête en local avant de mettre en ligne, l'administrateur de BDD de ovh risque fort de te taper soigneusement sur les doigts quand il verra le logs. Tu as intérêt à désactiver cette page en urgence, corriger avant remise en ligne d'un code correct.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 545 Messages

03 févr. 2006, 01:23

Pour l'instant, il n'y a que moi qui l'utilise donc cela ne fait pas beaucoup d'erreur ! ? !
Bon, j'ai fais le changement mais j'ai un autre problème que je devrais résoudre demain
<?php require_once('../Connections/kainbuye.php');
$colname_course = "-1";
if (isset($_GET['class'])) {
  $colname_course = (get_magic_quotes_gpc()) ? $_GET['class'] : addslashes($_GET['class']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_course = "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,
						t5.id_course, 
                  		t5.nom_course,
						t5.date,
						t5.lieu,
						t5.kilometrage,
						t5.nbre_part,
						t6.ID_classement,
						t6.acrho_course_id_course,
						t6.dossard,
						t6.temps,
						t6.moyenne,
						t6.place ".
				"FROM acrho_participant AS t1, 
                      acrho_categorie AS t2, 
                      acrho_club AS t3, 
                      acrho_changement AS t4,
					  acrho_course AS t5,
				      acrho_classement AS t6 ". 
				"WHERE t5.id_course = ".$colname_course." ".
					    "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".
						"AND t6.acrho_course_id_course = t5.id_course ".
						" ";
Voici le message
You have an error in your SQL syntax near 't6.acrho_course_id_course = t5.id_course ' at line 29
A+
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

03 févr. 2006, 01:27

Il manque un espace en fin de ligne:
"AND t4.acrho_club_id_club = t3.id_club ".
ça produit "id_clubAND..." au lieu de "id_club AND..."
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 545 Messages

03 févr. 2006, 07:39

Un petit coucou avant le boulot,

Evidement, cela va beaucoup mieux sauf qu'il y a malgré tout encore une erreur dans ma requête car maintenant, toutes mes entrées sont affichées sans que le filtre ['class'] soit pris en compte. Ce filtre doit prendre l'une des courses et pas toutes!
<?php require_once('../Connections/kainbuye.php');
$colname_course = "-1";
if (isset($_GET['class'])) {
  $colname_course = (get_magic_quotes_gpc()) ? $_GET['class'] : addslashes($_GET['class']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_course = "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,
						t5.id_course, 
                  		t5.nom_course,
						t5.date,
						t5.lieu,
						t5.kilometrage,
						t5.nbre_part,
						t6.ID_classement,
						t6.acrho_course_id_course,
						t6.dossard,
						t6.temps,
						t6.moyenne,
						t6.place ".
				"FROM acrho_participant AS t1, 
                      acrho_categorie AS t2, 
                      acrho_club AS t3, 
                      acrho_changement AS t4,
					  acrho_course AS t5,
				      acrho_classement AS t6 ". 
				"WHERE t5.id_course = ".$colname_course." ".
						"AND t6.acrho_course_id_course = %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 ".
						"AND t6.acrho_course_id_course = t5.id_course ".
						" ".
				"ORDER BY temps ASC";
$course = mysql_query($query_course, $kainbuye) or die(mysql_error());
$row_course = mysql_fetch_assoc($course);
$totalRows_course = mysql_num_rows($course);
?>
Je suis capable d'imaginer d'où vient l'erreur
"WHERE t5.id_course = ".$colname_course." ". 
                        "AND t6.acrho_course_id_course = %s ".
mais incapable de déterminer avec exactitude puisque dans ces brides de codes utilisés précédement pour construire cette page, cela fonctionnait comme une orloge!

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

03 févr. 2006, 09:52

Le "%s" est utilisé quand on crée la requête avec sprintf() : dans ton cas, tu devrais remplacer par une variable PHP normale.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 545 Messages

03 févr. 2006, 18:35

Salut Cyrano,

Qu'est-ce que tu entends par 'variable normale'? Pour l'instant, je n'ai pas encore tout saisis ... les variables non plus!

J'ai quand même essayé un truc qui fonctionne mais qui met beaucoup trop de temps pour s'afficher
"WHERE t5.id_course = ".$colname_course." ".
						"AND t6.acrho_course_id_course = ".$colname_course." ".
					    "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 ".
						"AND t6.acrho_course_id_course = t5.id_course ".
						" ".
Est-ce que 2 fois [.$colname_course." " ] n'est pas responsable? Est-ce utile? Ne puis-je pas faire un truc du genre [t5.id_course = t6.acrho_course_id_course = ".$colname_course." "]?

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 | 545 Messages

03 févr. 2006, 19:03

Je viens de m'appercevoir que ma requête "fonctionnait" sans
"AND t6.acrho_course_id_course = ".$colname_course." ".
Enfin c'est vite dit car dans les 2 cas, il n'y a pas de tris sur la viariable ['class'] où j'attend qu'une course soit sélectionnée pas toute comme c'est le cas!

D'où pourrrait venir le problème?

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 | 545 Messages

03 févr. 2006, 19:13

Oups, je viens de m'appercevoir que c'était à chaque fois la même entrée qui apparaîssait!

Si j'enlève
"ORDER BY t6.temps ASC"
le problème est résolu en ce qui concerne la répétition mais:
  • 1 Il m'imprime toujours toutes les entrées au lieu de me faire un tris sur ['class']
    2 Comment vais-je faire mon ordre?
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 | 545 Messages

03 févr. 2006, 19:28

Petit Xème rectificatif
Ce n'est pas toutes les entrées de toutes les courses que ma page indique mais les bonnes entrées plusieurs fois ! ! !

Note: comme j'avais 2 fois le champs 'dossard', j'ai fais un changement à la table t6 (acrho_classement), le champs s'appele désormais 'ref_dossard'

En gros, j'ai toujours un problème mais je continus mes expériences et si vous rouvez le problème ... !

Merci
Sebe

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