LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 2013
-
16 mars 2006 à 09:31
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 2013
-
16 mars 2006 à 13:16
Bonjour a tous,
Voila je ne suis pas un expert en programmation PHP
et je rencontre actuellement un soucis avec un script
que j'ai écrit
ce script a pour fonction de faire un affichage page par page dans un tableau HTML d'une requete SQL
et il affiche des liens de 1 à10 avec << et>> pr accéder aux 10 suivants et précédents
jusque la je m'en suis sorti
mais j'ai essayer de rajouter une fonction de tri pr l'utilisateur
afin qu'il puisse chercher dans ma table MySQL ce qu'il cherche suivant la valeur d'un champ
ce tri s'effectue bien et les liens s'affichent correctement mais lorsque je clique sur ces liens
par exemple pr avoir la page 2(triée) il m'affcihe la page2(non triée) celle avec une requete de base sans tri...
je crois que le probleme est de passer dans l'url le tri mais je ne sais pas exactement quoi faire passer:
voici mon code pour la barre de navigation :
$res = mysql_query($requete, $dbconnect) or die(mysql_error());
mysql_close($dbconnect);
$nb_enreg = mysql_num_rows($res);
//on calcule le nb de pages
$nb_pg_rounded = ceil( $nb_enreg / $enreg_par_pg );//arrondi au nb supérieur
//definition du minimum et du maximum
$min= $pg-(($pg-1)%10);
if($nb_pg_rounded<$min+9) {
$max= $nb_pg_rounded;
} else {
$max= $min+9;
}
// si on est pas au début, on est au moins en 11, on peut donc reculer de 10
if($min!=1) {
echo " <<\n";
}
$i= $min;
do{
//si $i n'est pas egal au numero de la page sur laquelle se trouve l'utilisateur...
if($i != $pg){
//...on affiche un lien vers cette page
echo " $i\n";
}else{
//...sinon on affiche simplement le n° de la page actuelle
echo " $i ";
}
$i++;
//on recommence tant que $i n'atteint pas le numero de la derniere page
}while($i <= $max);
// si le maximum affiché n'est pas la fin
if($max<$nb_pg_rounded) {
// si la page+10 existe on avance de 10
// sinon, on se positionne sur la fin
if($pg+9<$nb_pg_rounded) {
echo
" >>\n";
} else {
echo
" >>\n";
}
}
et voici la partie du code que je modifie suivant les choix de l'utilisateur:(modif de la requete):
$requete2 = sprintf("SELECT *
FROM shalmlis WHERE SEV=".$_POST['sev']." AND NBT=".$_POST['nbt']." AND
TIM >='$sdate' AND TIM <'$edate' ORDER BY TIM DESC LIMIT $limit,
$enreg_par_pg ");
$requete2 = sprintf("SELECT *
FROM shalmlis WHERE SEV=".$_POST['sev']." AND NBT=".$_POST['nbt']." AND
TIM >='$sdate' AND TIM <='$edate' ORDER BY TIM DESC LIMIT $limit,
$enreg_par_pg ");
$requete2 = sprintf("SELECT *
FROM shalmlis WHERE SEV=".$_POST['sev']." AND NBT=".$_POST['nbt']." AND
TIM>='$sdate' AND TIM<='$edate' ORDER BY TIM DESC LIMIT $limit,
$enreg_par_pg ");
}
else {?><script type="text/javascript">
alert("PB: Veuillez au moins remplir un champ ou remplir la date de depart ET la date de fin !");
</script>
<?php
$requete2 = sprintf("SELECT * FROM shalmlis ORDER BY TIM DESC LIMIT $limit, $enreg_par_pg ");
}
}else//affichage normal : pas de tri
{
$requete2 = sprintf("SELECT * FROM shalmlis ORDER BY TIM DESC LIMIT $limit, $enreg_par_pg ");
}
$reponse = mysql_query($requete2, $dbconnect) or die(mysql_error());
je pense donc que le probleme se situe sur les liens , mais étant un
peu perdu je ne sais pas quoi passer par l'url exactement pr que chaque
page garde l'ordre de tri....
est ce que quelqu'un pourrait m'aider sur ce sujet?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 16 mars 2006 à 11:07
Si, mais ton script est bordélique, c'est chiant à lire ;-)
Un conseil : utilise les sessions, et garde les critères de tri/filtre en session. Tu te feras moins chier...
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 16 mars 2006 à 11:51
malalam toi tu me dis de faire ca en gros:
if (!isset($_ENV['ordre_tri'])) { // Si la variable $_ENV['ordre_tri'] n'est pas définie
$_ENV['ordre_tri'] = "TIM"; // Valeur par défaut
} else {
if (isset($_GET['modif_ordre_tri'])) { // Si on a
passé par la méthode GET une variable appelée modif_ordre_tri
(l'utilisateur a demandé à modifier l'ordre de tri)
$_ENV['ordre_tri'] =
$_GET['modif_ordre_tri']; // on affecte cette
valeur à notre variable d'environnement
}
}
$requete2 = sprintf("SELECT * FROM shalmlis ORDER BY ".$_ENV['ordre_tri']." DESC LIMIT $limit, $enreg_par_pg ");
et en fait $_ENV serait l'équivalent du bout de code qui est modifié par le choix de l'utilisateur?c'est ca?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 16 mars 2006 à 12:02
Non, je pensais déjà à $_SESSION... ;-)
Ensuite, je pensais simplement passer le critère de tri codifié en fonction de tes champs.
Par exemple : sort=date et stocker : $_SESSION['sort'] = $_GET['sort'];
ensuite, quand tu affiches, tu affiches en fontion du crière de tri :
ORDER BY $_SESSION['sort']