Page 1 sur 2

Un message d'erreur inconnu!

Posté : 03 févr. 2006, 00:54
par Sebe
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

Posté : 03 févr. 2006, 00:56
par Cyrano
Ça te fait ça en local ou en ligne ?

Posté : 03 févr. 2006, 01:02
par Sebe
En ligne ... tu peux y aller voir http://www.kain-buyere.be [classement/2004/12 jogging du printemps]

Merci

Posté : 03 févr. 2006, 01:05
par Cyrano
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 ?

Posté : 03 févr. 2006, 01:09
par Sebe
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 ! ! !

Posté : 03 févr. 2006, 01:09
par Cyrano
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.

Posté : 03 févr. 2006, 01:15
par Cyrano
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.

Posté : 03 févr. 2006, 01:23
par Sebe
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+

Posté : 03 févr. 2006, 01:27
par Cyrano
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..."

Posté : 03 févr. 2006, 07:39
par Sebe
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

Posté : 03 févr. 2006, 09:52
par Cyrano
Le "%s" est utilisé quand on crée la requête avec sprintf() : dans ton cas, tu devrais remplacer par une variable PHP normale.

Posté : 03 févr. 2006, 18:35
par Sebe
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

Posté : 03 févr. 2006, 19:03
par Sebe
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

Posté : 03 févr. 2006, 19:13
par Sebe
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

Posté : 03 févr. 2006, 19:28
par Sebe
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