Page 1 sur 1

Amélioration de code: le tri

Posté : 25 janv. 2006, 11:55
par Sebe
Salutation à tous,

J'ai un jolie petit code mais j'aimerai y apporter une amélioration pour qu'un tri par année se fasse ... je suppose que c'est dans la requête que je dois faire le tri ! ? !
<?php require_once('../Connections/kainbuye.php');
$colname_participant = "-1";
if (isset($_GET['part'])) {
  $colname_participant = (get_magic_quotes_gpc()) ? $_GET['part'] : addslashes($_GET['part']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_participant = sprintf("SELECT ID_coureur, nom, prenom FROM acrho_participant WHERE ID_coureur = %s", $colname_participant);
$participant = mysql_query($query_participant, $kainbuye) or die(mysql_error());
$row_participant = mysql_fetch_assoc($participant);
$totalRows_participant = mysql_num_rows($participant);

$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 = "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 ".
	"ORDER BY t4.annee ASC". 
                "WHERE t1.ID_coureur = ".$colname_chang." ". 
                        "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"; 

$chang = mysql_query($query_chang, $kainbuye) or die(mysql_error()); 
$row_chang = mysql_fetch_assoc($chang); 
$totalRows_chang = mysql_num_rows($chang); 
?>
Comme vous pouvez le voir j'ai ajouter ceci
"ORDER BY t4.annee ASC". 
Mais j'ai ce message d'erreur

Code : Tout sélectionner

You have an error in your SQL syntax near 'ASCWHERE t1.ID_coureur = 900 AND t4.acrho_participant_ID_participant = t1.ID_cou' at line 15
C'est une erreur que je n'avais pas avant ... y-a-t-il queque chose que je n'ai pas saisis?

Merci

Posté : 25 janv. 2006, 12:18
par DarkBlue
hello ,

ton champs s appel reelement t4.annee ?

Posté : 25 janv. 2006, 12:23
par Sebe
Pas vraiment! Mais lors de l'écriture du script, on m'a dit que cela fonctionnerait ainsi ... voici comment j'affiche les données:
<?php do { ?>
        <tr>
          <td><div align="center"><?php echo $row_chang['annee']; ?></div></td>
          <td><div align="center"><?php echo $row_chang['dossard']; ?></div></td>
          <td><div align="center"><?php echo $row_chang['nom_categorie']; ?></div></td>
          <td><div align="center"><?php echo $row_chang['nom_cub']; ?></div></td>
          <td><div align="center">Modifier</div></td>
          <td><div align="center"><a href="affect_supp.php?supp=<?php echo $row_chang['annee']; ?>"><strong>Supprimer</strong></a></td>
        </tr>
        <?php } while ($row_chang = mysql_fetch_assoc($chang)); ?>
Merci

Posté : 25 janv. 2006, 12:42
par DarkBlue
bah normalement il te suffit d ajouter
"ORDER BY annee ASC". 
a ta requete et ça devrait fonctionner !

Posté : 25 janv. 2006, 12:45
par Sebe
Merci pour ta colaboration mais j'ai dans le regret de te dire que ...
You have an error in your SQL syntax near 'ASCWHERE t1.ID_coureur = 900 AND t4.acrho_participant_ID_participant = t1.ID_cou' at line 15
Merci

Posté : 25 janv. 2006, 12:49
par DarkBlue
t'as essayé de taper la requette dans phpmyadmin ?

Posté : 25 janv. 2006, 13:05
par Sebe
La requête fonctionne puisque j'ai déjà commencé un encodage ... le seul hic c'est dans le tri!

La page, tu peux la trouver à www.kain-buyere.be [liste des affectations] choisir une personne [ABIDAT], il a plusieurs affectations déjà encodées!

Merci

NB: je sais le compte des courreurs dans la page affectation n'est pas vraiment bon ... ce sera dans les prochaines améliorations :roll:

Posté : 25 janv. 2006, 19:26
par Truc
L'erreur:
You have an error in your SQL syntax near 'ASCWHERE
ce qui est en rouge doit te mettre la puce à l'oreille :wink:
...
...
...
Je te laisse chercher...
...
...
temps de réflexion imparti terminé :lol:

tu as collé ASC et WHERE dans ce sens ce qui est encore plus faux !!

un ORDER BY se met toujours après la clause WHERE (donc à la fin)

Posté : 26 janv. 2006, 00:36
par Sebe
Salut Truc,

Moi et les langues ne sommes malheureusement pas de bons amis!
Mais après changement ...
You have an error in your SQL syntax near 'BY annee ASC' at line 15
Vois pas ce que ma ligne 15 a de plus ou de moins qu'avant ... lorsque j'enléve le tri tout va!
Voici ma ligne 15:
$colname_chang = (get_magic_quotes_gpc()) ? $_GET['part'] : addslashes($_GET['part']); 
Merci

Posté : 26 janv. 2006, 00:51
par Truc
Moi et les langues ne sommes malheureusement pas de bons amis!
Bon, je vais traduire :wink:
You have an error in your SQL syntax near 'BY annee ASC' at line 15
Vous (tu) avez (as) une erreur dans votre (ta) syntaxe SQL près de 'BY annee ASC' à la ligne 15 8)



il s'agit de la ligne 15 de la requete et non du code, c'est un message qui est renvoyé par mysql_error() et donc compte les lignes de la requete.

tu as certainement oublié le "ORDER" avant le "BY". Et le tri doit se faire sur "t4.annee" d'après le 1er post

Posté : 26 janv. 2006, 01:05
par Sebe
Ben non ... j'avais bien mis le ORDER devant le BY:
$query_chang = "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 = ".$colname_chang." ". 
                        "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".
				"ORDER BY t4.annee ASC";
C'est normalement la ligne
acrho_changement AS t4 ".
mais je n'ai rien changé à cette ligne ! ! !

Merci

Posté : 26 janv. 2006, 01:21
par Truc
enfaite le problème est bien le ORDER qui manque, en tout cas pour mysql c'est le cas.

Attention à ce qui suit, règle à appliquer à chaque message d'erreur d'une requete:

Afficher la requête générée avec un simple echo
echo $query_chang;
me semble que je l'avais déjà dis, mais bon plust^t 2 fois qu'une :lol:
C'est une bonne habitude à prendre et qui aide énormément à débugger.
J'insiste beaucoup sur ce faite pour que tu n'oublis plus d'AFFICHER les requetes pour vérifier la construction et espacement entre les mots clés, tables et champs.

Bon voila je crois avoir assez insisté sur le faite d'afficher les requêtes générées. :lol:

Regarde ces 2 lignes:
 "AND t4.acrho_club_id_club = t3.id_club".
 "ORDER BY t4.annee ASC";
que voint-elles donner dans la requete générée ?
ceci:
"AND t4.acrho_club_id_club = t3.id_clubORDER BY t4.annee ASC"
il manque donc un espace :wink:

Posté : 26 janv. 2006, 10:18
par Sebe
Salut

Merci pour ce Xième coup de main! Je vois qu'en fait je n'ai pas su faire la transition entre le HTML et le PHP.
Si vous avez un court sur les requêtes, je pense que cela m'aidera plus tard ! ! !

Merci

Posté : 26 janv. 2006, 12:53
par Truc
Un post est réservé pour ce genre de trouvailles :wink: