Amélioration de code: le tri

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 : Amélioration de code: le tri

par Truc » 26 janv. 2006, 12:53

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

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

par Truc » 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:

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

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

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

par Truc » 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)

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

par DarkBlue » 25 janv. 2006, 12:49

t'as essayé de taper la requette dans phpmyadmin ?

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

par DarkBlue » 25 janv. 2006, 12:42

bah normalement il te suffit d ajouter
"ORDER BY annee ASC". 
a ta requete et ça devrait fonctionner !

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

par DarkBlue » 25 janv. 2006, 12:18

hello ,

ton champs s appel reelement t4.annee ?

Amélioration de code: le tri

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