Problème affichage resultat requete PHP/mySQL

Fermé
remoh Messages postés 6 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 14 décembre 2007 - 19 oct. 2007 à 14:41
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 - 19 oct. 2007 à 17:02
Bonjour,

Je suis en train de créér un site qui repertorie des soties culturelles. le principe est simple, c'est un moteur de recherche avec plusieurs entrées. L'utilisateur choisi d'effectuer une recherche par date et type de sortie.

J'ai donc crée une base de donnée mySQL, puis un formulaire de recherche en html. Jusque là pas de pb...

Pour la page PHP qui affiche les résultats, c'est plus compliqué ! Je me suis bien inspiré des cours de phpdebutant.org, j'arrive à afficher les résultats classés par date dans un tableau. J'ai également réussi à limiter le nombre de resultats par page. Le problème, c'est que je n'arrive toujours pas à afficher les liens pour passer d'une page de résultat à une autre en bas de mon tableau...!!!

Je done mon code pour ceux qui pourraient m'aider.
Merci d'avance pour vos réponses.

le fichier fonctions.php est à la suite...

<?php
//=========================================
// includes du fichier fonctions
//=========================================
require 'fonctions.php';
//=========================================
// information pour la connection à le DB
//=========================================
$host = '';
$user = ''';
$pass = '';
$db = '';

//=========================================
// initialisation des variables
//=========================================
$nombre = 5;
// si limite n'existe pas on l'initialise à zéro
if (!$limite) $limite = 0;
// on cherche le nom de la page.
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];

//=========================================
// connection à la DB
//=========================================
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

//=========================================
// requête SQL qui compte le nombre total
// d'enregistrements dans la table.
//=========================================
$select = 'SELECT count(id) FROM Sorties';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];

//=========================================
// vérifier la validité de notre variable
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite) {
$limite = 0;
}

//=========================================
// requête SQL qui ne prend que le nombre
// d'enregistrement necessaire à l'affichage
// selon les demandes de l'utilisateur
//=========================================

// Si le champ Date est vide et le champ Type correspond à tous
if ($_POST['mois'] == '' AND $_POST['jour'] == '' AND $_POST['Type'] == 'Tous')
{
// requête SQL qui récupère les enregistrements
$select = "SELECT DATE_FORMAT(Date,'%d-%m-%Y') AS Datefr,Type,Désignation,Lieu FROM Sorties ORDER BY Date ASC limit ".$limite.",".$nombre;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);

// si on a récupéré un resultat on l'affiche.
if($total) {
// debut du tableau
echo '<table bgcolor="#FFFFFF" align="center">'."\n";
// première ligne on affiche les titres dans 4 colonnes
echo '<tr>';
echo '<td width="80" bgcolor="#9f9f9f"><b><u>Date</u></b></td>';
echo '<td bgcolor="#9f9f9f"><b><u>Type</u></b></td>';
echo '<td bgcolor="#9f9f9f"><b><u>Désignation</u></b></td>';
echo '<td bgcolor="#9f9f9f"><b><u>Lieu</u></b></td>';
echo '</tr>'."\n";
// lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td width="80" bgcolor="#d4d4d4">'.$row['Datefr'].'</td>';
echo '<td bgcolor="#d4d4d4">'.$row['Type'].'</td>';
echo '<td bgcolor="#d4d4d4">'.'<b>'.$row['Désignation'].'</b>'.'</td>';
echo '<td bgcolor="#d4d4d4">'.$row['Lieu'].'</td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";
// fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';

// on libère le résultat
mysql_free_result($result);
}

// Si le champ Date est vide ou le champ Type correspond à tous
elseif ($_POST['mois'] == '' AND $_POST['jour'] == '' OR $_POST['Type'] == 'Tous')
{
// requête SQL récupère les enregistrements
$select = "SELECT DATE_FORMAT(Date,'%d-%m-%Y') AS Datefr,Type,Désignation,Lieu FROM Sorties WHERE Date='".$_POST['annee']."-".$_POST['mois']."-".$_POST['jour']."' OR Type='".$_POST['Type']."' ORDER BY Date ASC limit ".$limite.",".$nombre;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);

// si on a récupéré un résultat on l'affiche.
if($total) {
// debut du tableau
echo '<table bgcolor="#FFFFFF" align="center">'."\n";
// première ligne on affiche les titres dans 4 colonnes
echo '<tr>';
echo '<td width="80" bgcolor="#9f9f9f"><b><u>Date</u></b></td>';
echo '<td bgcolor="#9f9f9f"><b><u>Type</u></b></td>';
echo '<td bgcolor="#9f9f9f"><b><u>Désignation</u></b></td>';
echo '<td bgcolor="#9f9f9f"><b><u>Lieu</u></b></td>';
echo '</tr>'."\n";
// lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td width="80" bgcolor="#d4d4d4">'.$row['Datefr'].'</td>';
echo '<td bgcolor="#d4d4d4">'.$row['Type'].'</td>';
echo '<td bgcolor="#d4d4d4">'.'<b>'.$row['Désignation'].'</b>'.'</td>';
echo '<td bgcolor="#d4d4d4">'.$row['Lieu'].'</td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";
// fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';

// on libère le résultat
mysql_free_result($result);
}

// Si les deux champs sont renseignés
else
{
// requête SQL qui récupère les enregistrements
$select = "SELECT DATE_FORMAT(Date,'%d-%m-%Y') AS Datefr,Type,Désignation,Lieu FROM Sorties WHERE Date='".$_POST['annee']."-".$_POST['mois']."-".$_POST['jour']."' AND Type='".$_POST['Type']."' ORDER BY Date ASC limit ".$limite.",".$nombre;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);

// si on a récupéré un résultat on l'affiche.
if($total) {
// debut du tableau
echo '<table bgcolor="#FFFFFF" align="center">'."\n";
// première ligne on affiche les titres dans 4 colonnes
echo '<tr>';
echo '<td width="80" bgcolor="#9f9f9f"><b><u>Date</u></b></td>';
echo '<td bgcolor="#9f9f9f"><b><u>Type</u></b></td>';
echo '<td bgcolor="#9f9f9f"><b><u>Désignation</u></b></td>';
echo '<td bgcolor="#9f9f9f"><b><u>Lieu</u></b></td>';
echo '</tr>'."\n";
// lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td width="80" bgcolor="#d4d4d4">'.$row['Datefr'].'</td>';
echo '<td bgcolor="#d4d4d4">'.$row['Type'].'</td>';
echo '<td bgcolor="#d4d4d4">'.'<b>'.$row['Désignation'].'</b>'.'</td>';
echo '<td bgcolor="#d4d4d4">'.$row['Lieu'].'</td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";
// fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';

// on libère le résultat
mysql_free_result($result);
}
if($total > $nombre) {
// affichage des liens vers les pages
affichePages($nombre,$page,$total);
}
?>





fichier fonctions.php

<?php
//récupération de $limite
if(isset($_GET['limite']))
$limite=$_GET['limite']; else $limite=0;

function verifLimite($limite,$total,$nombre) {
// je verifie si limite est un nombre.
if(is_numeric($limite)) {

// si $limite est entre 0 et $total, $limite est ok
// sinon $limite n'est pas valide.
if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
// j'assigne 1 à $valide si $limite est entre 0 et $max
$valide = 1;
}
else {
// sinon j'assigne 0 à $valide
$valide = 0;
}
}
else {
// si $limite n'est pas numérique j'assigne 0 à $valide
$valide = 0;
}
// je renvois $valide
return $valide;
}
?>

<?php
function affichePages($nb,$page,$total) {
$nbpages=ceil($total/$nb);
$numeroPages = 1;
$compteurPages = 1;
$limite = 0;
echo '<table border = "0" ><tr>'."\n";
while($numeroPages <= $nbpages) {
echo '<td ><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
$limite = $limite + $nb;
$numeroPages = $numeroPages + 1;
$compteurPages = $compteurPages + 1;
if($compteurPages == 10) {
$compteurPages = 1;
echo '<br>'."\n";
}
}
echo '</tr></table>'."\n";
}
?>
A voir également:

1 réponse

ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
19 oct. 2007 à 17:02
Bonjour,
moi je te propose un algorithme plus simple pour les pages:
$nbmessparpage=15 //par exemple
$req=mysql_query("SELECT COUNT(*) as nbmess FROM latable") or die(mysql_error()); //On compte le nb de messages
$don=mysql_fetch_array($req);
$nbtotalmess=$don['nbmess']; //On le stock dans une variable. Ensuite, les messages s'afficheront entre 2 limites, fixées par rapport au
//numéro de la page demandée.Ex: on demande la 2? On affiche les messages du numéro 2*15-15 , et on en affiche 15. La fonction
//générale est:
if(isset($_POST['page'])){ //si on a demandé une page, donc dans les liens il y aura cette variable. On parcourt les possibilités:
for($i=1; $i<=$nombredepages; $i++){
if($_GET['page']==$i){
//On a demandé cette page i

$requet=mysql_query("SELECT * FROM latable ORDER BY id DESC LIMIT ". ($nbmessparpage*$i-$nbmessparpage) . "," . $nbmessparpage . "") or die(mysql_error());;
while ($donnees=mysql_fetch_array($requet)) { //Tu affiches les données
}
}
}else{
//Tu affiche la page 1 avec cette methode
}

Les liens:

for($j=1; $j<=$nombredepages; $j++){
echo "<a href=\"mapage.php?page=" . $j . "\">" . $j . "</a>";
}

Voila!
Pour plus, vas ici: plusieurs pages dans un forum#0
0