Probléme de syntaxe SQL avec php

Fermé
Meon48 - 15 janv. 2009 à 11:01
doumham Messages postés 116 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 13 mars 2013 - 15 janv. 2009 à 15:05
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
15 janv. 2009 à 11:06
$req=mysql_query("SELECT * FROM clients ORDER BY '".$tri."' DESC ;");

rajoute des quotes autour de ton tri
0
doumham Messages postés 116 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 13 mars 2013 1
15 janv. 2009 à 11:13
Relever le ";" a l'interieur
$req=mysql_query("SELECT * FROM clients ORDER BY ".$tri." DESC ");
0
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
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
15 janv. 2009 à 11:46
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
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
15 janv. 2009 à 12:03
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 116 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 13 mars 2013 1
15 janv. 2009 à 12:08
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
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
15 janv. 2009 à 14:11
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
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 116 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 13 mars 2013 1
15 janv. 2009 à 15:05
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