Probléme de syntaxe SQL avec php

Meon48 -  
doumham Messages postés 130 Statut Membre -
Bonjour,

Voila je suis en train de faire un tableau dynamique avec un tri dynamique mais j'ai un probléme que je ne comprend pas.
(j'utilisa WAMPSERVER 2.0F)
Dés que j'essaye d'afficher ma page MySql me renvoi cette erreur:

Notice: Undefined index: tri in C:\wamp\www\Test et exo\tableau.php on line 13
Requéte invalide: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC' at line 1

et voici mon code

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");

$tri=$_GET['tri'];

$req=mysql_query("SELECT * FROM clients ORDER BY ".$tri." DESC ;");
if (!$req ){
die('Requéte invalide: ' .mysql_error());
}

// quelle est la dimension du résultat ?
$nblignes=mysql_num_rows($req);
$nbchamps=mysql_num_fields($req);

// affichage de l'en-tete du tableau HTML avec les noms des champs
echo "<table border=2 CELLPADDING=\"5\" CELLSPACING=\"5\" WIDTH=\"70%\"><tr>";
for($i=0; $i < $nbchamps; $i++) {
$tabchamps[$i] = mysql_field_name($req,$i);
echo "<th><a href=\"tableau.php?tri=$tabchamps[$i]\">$tabchamps[$i]</a></th>";
}
echo "</tr>";

// affichage des enregistrements du résultat
for($i=0; $i < $nblignes; $i++) {
$ligne = mysql_fetch_row($req);
echo "<tr>";
echo "<td><A HREF=\"modif.php?namedoc=$ligne[0]\" TARGET=\"Action\"> $ligne[0]</A></td>";
for($j=1; $j < $nbchamps; $j++) {
echo "<td>$ligne[$j]</td>";
}
echo "</tr>";
}
echo "</table>";

mysql_close();

?>

Si quelqu'un peut m'aider je lui en serai très reconnaissant merci.

Meon48
A voir également:

12 réponses

ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
$req=mysql_query("SELECT * FROM clients ORDER BY '".$tri."' DESC ;");

rajoute des quotes autour de ton tri
0
doumham Messages postés 130 Statut Membre 1
 
Relever le ";" a l'interieur
$req=mysql_query("SELECT * FROM clients ORDER BY ".$tri." DESC ");
0
Meon48
 
WOA merci de ta réponse rapide

effectivement en faisan ceci mon tableau s'affiche mais la le tri dynamique que j'ai fait en lien sur les entête de tableau ne marche plus.
je m'explique je veut que quand je clic sur l'entête d'un des colonnes sa tri le tableau dans l'ordre décroissant de la colonne sélectionné.

aurai tu une autre solution??
merci d'avance.

Meon48
0
Meon48
 
Désolé mais la solution de Doumham ne marche pas non plus merci quand même
la même erreur revient.

Meon48
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
normal étant donné que dans sa "réponse" il a retiré la solution que je t'avais donné...

d'ailleurs, si on veut être strict avec la syntaxe sql, il faut mettre ce ";", même si la plupart des sgbdr s'en sortent sans.

Dans un premier temps retourne donc à la solution que je t'avais donné et rajoute echo devant la ligne :

echo $req=mysql_query("SELECT * FROM clients ORDER BY '".$tri."' DESC ;");

de cette façon, la requête va apparaître, tu vas donc voir si le problème est dans la requête ou dans ton code.
0
Meon48
 
j'ai placé le "echo" en gardant ta syntax comme tu la suggéré et voila ce qui en resulte:

Notice: Undefined index: tri in C:\wamp\www\Test et exo\tableau.php on line 13
Resource id #3

avec le tableau en dessous sans le tri dynamique actif.


j'avoue que je suis perdu je comprend pas les erreur affichers. :(
Meon48
0
ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
dans ton code tu récupères la valeur de $_GET['tri'], mais la première fois que tu te rends sur cette page, cette valeur existe ?
Je ne pense pas.

Dans ce cas, tu dois soit lui donner une valeur par défaut, soit faire évoluer ta requête suivant que cette valeur existe ou non.

je conseille la valeur par défaut :

remplace

$tri=$_GET['tri']; 


par

$tri = 'ta valeur par défaut';
if ($_GET['tri']) {
  $tri = htmlentities($_GET['tri']);
}
0
doumham Messages postés 130 Statut Membre 1
 
Bonjour,
Pour effectuer le tri il faut ajouter au entete de tableau ce que suit:


<table >
<tr>
<?php
if($_GET['tri']=="ASC" && $_GET['col']=="nom_champ_ds_la_base_de_données"){
?>
<td><a href="tonpagephp.php?col="nom_champ_ds_la_base_de_données"&tri="DESC">Nom_champ</a><td>
<?php
}else{
?>
<tr><td><a href="tonpagephp.php?col="nom_champ_ds_la_base_de_données"&tri="ASC">Nom_champ</a><td>
<?php } ?>
et ainsi de suite
0
Meon48
 
Bonjour,

D'abord merci de m'aider.

Doumham
ton code marche certainement bien et a l'air plus simple mais si j'ai bien compris ce morceau de code si j'ai un tableau avec 15 colonne il va falloir que je répète l'action plusieurs fois et sa finira par faire un code très lourd.
désolé je suis plutot fainéant dsl .


TheBishop
quand tu écris $tri= 'ta valeur par défaut';
qu'elles valeur je peut mettre? j'ai essayer plusieurs valeur et sa na rien donnée alors je n'ai peu etre pas mit de valeur valable


encore merci

Meon48
0
ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
moi je ne sais pas, visiblement les tri que tu donnes vient de la base de données : $tabchamps[$i]
donc prends une de tes valeurs et ça devrait être bon
0
Meon48
 
Bon j'ai essayer tous un tas de valeur quels soit de la base ou d'ailleurs et je commence a baisser les bras sa fait plusieur jour que j'y suis et je commence a avoir envie de me pendre avec un flingue donc je vais essayer de vous donner un max d'info pour que l'on puisse m'aider.

ma base de donné sous MySql:

Nom: test
table: clients
champs: NumCli (int), Nomcli (text), PNomCli (text), Adresse_Cli (text), Etat_Cli (text), Tel_Cli (text).

mon code:
je vous ai deja montrer tous se que javé



merci encore
Meon48
0
doumham Messages postés 130 Statut Membre 1
 
Oui je t'ai donné tous simplement la base que tu dois suivre:
<?php
$tabchamps= array('nomchamp1','nomchamp2','nomchamp3',.....);
?>
<table >
<tr>
<?php
for($i = 0;$i<count($tabchamps);$i++){
if($_GET['col']==$tabchamps[$i]){
if($_GET['tri']=="ASC"){
?>
<td><a href="tonpagephp.php?col=<?php echo $tabchamps[$i];?>&tri="DESC"><?php echo $tabchamps[$i];?></a><td>
<?php
}else{?>
<td><a href="tonpagephp.php?col=<?php echo $tabchamps[$i];?>&tri="DESC"><?php echo $tabchamps[$i];?></a><td>
<?php
}
}
}?>
</tr>
0