Amélioration de code: le tri

Mammouth du PHP | 545 Messages

25 janv. 2006, 11:55

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
Sebe

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

Eléphant du PHP | 440 Messages

25 janv. 2006, 12:18

hello ,

ton champs s appel reelement t4.annee ?
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Mammouth du PHP | 545 Messages

25 janv. 2006, 12:23

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
Sebe

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

Eléphant du PHP | 440 Messages

25 janv. 2006, 12:42

bah normalement il te suffit d ajouter
"ORDER BY annee ASC". 
a ta requete et ça devrait fonctionner !
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Mammouth du PHP | 545 Messages

25 janv. 2006, 12:45

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
Sebe

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

Eléphant du PHP | 440 Messages

25 janv. 2006, 12:49

t'as essayé de taper la requette dans phpmyadmin ?
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Mammouth du PHP | 545 Messages

25 janv. 2006, 13:05

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:
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

25 janv. 2006, 19:26

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)

/!\ 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

26 janv. 2006, 00:36

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

26 janv. 2006, 00:51

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

/!\ 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

26 janv. 2006, 01:05

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

26 janv. 2006, 01:21

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:

/!\ 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

26 janv. 2006, 10:18

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

26 janv. 2006, 12:53

Un post est réservé pour ce genre de trouvailles :wink:

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