Un message d'erreur inconnu!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Un message d'erreur inconnu!

par Sebe » 03 févr. 2006, 19:41

J'ai trouvé d'où venait la répétition
"AND t6.acrho_course_id_course = ".$colname_course." ".
Complètement inutile!
Il ne me reste plus de problème puisque j'ai pû remettre la ligne
"ORDER BY t6.temps ASC"
Donc j'arrive à une requête sans problème qui ressemble à ceci:
<?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.ref_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 ".
						"AND t6.ref_dossard = t4.dossard ".
						" ".
				"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);
?>
Je n'ai plus de soucis mais si vous voyez quelque chose à changer ... !
Merci

par Sebe » 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

par Sebe » 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

par Sebe » 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

par Sebe » 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

par Cyrano » 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.

par Sebe » 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

par Cyrano » 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..."

par Sebe » 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+

par Cyrano » 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.

par Cyrano » 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.

par Sebe » 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 ! ! !

par Cyrano » 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 ?

par Sebe » 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

par Cyrano » 03 févr. 2006, 00:56

Ça te fait ça en local ou en ligne ?