Affichage page par page et requêtes du type $sql .=
Bonjour,
je cherche à faire un affichage par page page des résultats transmis via un formulaire comprenant 3 champs.
J'ai construit le code avec une requête simple du type SELECT * FROMX WHERE et tout semble ok, les résultats s'affichent page par page.
J'ai développé ensuite le code pour intégrer une requête plus complexe.
A partir de là, les résultats plantent complétement : j'ai bien des résultats, ils s'affichent page par page, mais ils ne correspondent pas aux critères que j'ai demandés.
Je vous passe le code de la barre de navigation, ce n'est pas lui qui pose problème.
Voici le code pour l'affichage des résultats
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
<?php
if
(
(isset($_POST['public'])&&($_POST['public'])=="#")
&&
(isset($_POST['lieu'])&&($_POST['lieu'])=="#")
&&
(isset($_POST['activite'])&&($_POST['activite'])=="#")
)
{
$erreur = 'merci de remplir au moins un des champs' ;
header('Location: guide.php');
exit();
}
else
{
// on se connecte à la base
$base = mysql_connect ('*', '*', '*');
mysql_select_db ('*', $base);
// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = ' SELECT * FROM aide_ac,aide_st WHERE aide_ac.structure = aide_st.s_clef ';
if (isset($_POST['public'])&&($_POST['public'])!="#")
{
$sql .= ' AND public = "'.$_POST['public'].'"';
}
if (isset($_POST['lieu'])&&($_POST['lieu'])!="#")
{
$sql .= ' AND lieu = "'.$_POST['lieu'].'"';
}
if (isset($_POST['activite'])&&($_POST['activite'])!="#")
{
$sql .= ' AND activite = "'.$_POST['activite'].'"';
}
$sql .= ' ORDER BY activite';
// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);
// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0)
{
echo 'Aucune réponse trouvée';
}
else
{
echo '<table><tr><td>Titre de colonne</td><td>Contenu</td></tr>';
// sinon, on regarde si la variable $debut n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$nb_affichage_par_page = 1;
// Préparation de la requête avec LIMIT
$sql = ' SELECT * FROM aide_ac,aide_st WHERE aide_ac.structure = aide_st.s_clef ';
if (isset($_POST['public'])&&($_POST['public'])!="#")
{
$sql .= ' AND public = "'.$_POST['public'].'"';
}
if (isset($_POST['lieu'])&&($_POST['lieu'])!="#")
{
$sql .= ' AND lieu = "'.$_POST['lieu'].'"';
}
if (isset($_POST['activite'])&&($_POST['activite'])!="#")
{
$sql .= ' AND activite = "'.$_POST['activite'].'"';
}
$sql .= ' ORDER BY activite ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on scanne les tuples un par un
while ($data = mysql_fetch_array($req))
{
// on affiches les résultats dans la table
echo '<tr><td>Activité </td><td>' , stripslashes(htmlentities(trim($data['activite']))) , '</td></tr>';
echo '<tr><td>Lieu</td><td>' , stripslashes(htmlentities(trim($data['lieu']))) , '</td></tr>';
echo '<tr><td>Public</td><td>' , stripslashes(htmlentities(trim($data['public']))) , '</td></tr>';
}
}
// on libère l'espace mémoire alloué pour cette requête
echo '</table><br />';
// affichage de la barre de navigation
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
mysql_close ();
?> |
ca a vraiment l'air d'être lié au type de requête, mais je suis coincée.
Merci à ceux qui pourront m'apporter leur aide
Caroline