yaz17 | Bonjour, Je sollicite encore une fois votre aide sur un probléme que j'ai vraiment du mal à résoudre. Sur mon site j'ai une page base de données qui permet de faire une recherche soit par titre, par auteur, editeur... ou une recherche sur tout les critéres dans la table archives. Mon moteur de recherche fonctionnait bien jusqu'au moment où j'ai voulu ajouter un systéme de limitation des résultats à l'affichage, au maximum 20 résultats par pages. Pour ce faire, j'utilise une fonction que j'ai prise sur le web qui permet un affichage page par page.
Voici mon formulaire :
Code :
- <html>
- <head>
- </head>
- <body>
- <form method="post" action="resultat.php">
- <table width="260" align="center">
- <!--DWLayoutTable-->
- <tr>
- <td colspan="2">Titre : </td>
- <td width="145"><input type="text" name="titre"></td>
- </tr>
- <tr>
- <td colspan="2">Auteur : </td>
- <td><input type="text" name="auteur"></td>
- </tr>
- <tr>
- <td colspan="2" valign="middle">Editeur : </td>
- <td><input type="text" name="editeur"></td>
- </tr>
- <tr>
- <td colspan="2" valign="middle">Association : </td>
- <td><input type="text" name="association"></td>
- </tr>
- <tr>
- <td colspan="2" valign="middle">Mot clé : </td>
- <td><input type="text" name="cles"></td>
- </tr>
- <tr align="right" valign="middle">
- <td colspan="3"><br>
- <input type="checkbox" name="allcriteres" value="oui">Tous les critères</td>
- </tr>
- <tr align="right" valign="middle">
- <td colspan="3"><input type="submit" name="recherche" style="background-color:#CCCCCC " value="Chercher"></td>
- </tr>
- <tr align="left" valign="middle">
- <td width="17" height="21" colspan="1" valign="bottom"> <br>
- <img src="images/info.gif" width="19" height="19"> </td>
- <td colspan="2" valign="middle"><br>
- un mot maximum par case</td>
- </tr>
- <tr>
- <td height="5"></td>
- <td width="76"></td>
- <td></td>
- </tr>
- </table>
- </form>
- </body>
- </html>
|
mon fichier de fonctions :
Mon fichier d'action :
Code :
- <html>
- <head>
- </head>
- <body>
- <?php
- include("config.php" );
- require("fonctions.php" );
- // 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 count(*) FROM archives';
- // 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 width="626" border="0">';
- // sinon, on regarde si la variable $debut (le x de notre LIMIT) 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 = 10;
- if ( $allcriteres == "oui" )
- $operateur="AND";
- else
- $operateur="OR";
- if ($titre != "" )
- $finrequete .= " titre_archives LIKE '%$titre%'";
- if ($auteur != "" )
- if ($finrequete != "" )
- $finrequete .= " $operateur (auteur_archives LIKE '%$auteur%')";
- else
- $finrequete .= " (auteur_archives LIKE '%$auteur%')";
- if ($editeur != "" )
- if ($finrequete != "" )
- $finrequete .= " $operateur editeur_archives LIKE '%$editeur%'";
- else
- $finrequete .= " editeur_archives LIKE '%$editeur%'";
- if ($association != "" )
- if ($finrequete != "" )
- $finrequete .= " $operateur reference_archives LIKE '%$association%'";
- else
- $finrequete .= " reference_archives LIKE '%$association%'";
- if ($cles != "" )
- if ($finrequete != "" )
- $finrequete .= " $operateur keywords_archives LIKE '$cles'";
- else
- $finrequete .= " keywords_archives LIKE '$cles'";
- if ($finrequete != "" )
- $sql="SELECT * FROM archives WHERE $finrequete ORDER BY titre_archives LIMIT ".$_GET['debut'].','.$nb_affichage_par_page;
- else
- $sql='SELECT * FROM archives ORDER BY titre_archives LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
- $res = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
- while ($result = mysql_fetch_array($res)) {
- ?>
- <tr>
- <td bgcolor="#CCCCCC" width="251"><div align="left" class="verdananobold"><? echo stripslashes($result['titre_archives']) ?></div></td>
- <td bgcolor="#CCCCCC" width="272"><div align="left" class="verdananobold"><? echo stripslashes($result['auteur_archives']) ?></div></td>
- <td bgcolor="#CCCCCC" width="88"><div align="center"><a href="show.php?id=<? echo stripslashes($result['id_archives']) ?>"><img src="images/lire.gif" name="id" width="16" height="11" border="0" id="id"></a></div></td>
- </tr>
- <?
- }
- // on libère l'espace mémoire alloué pour cette requête
- mysql_free_result ($res);
- echo '<table><br />';
- // on affiche enfin notre barre<br>
- echo 'pages : ';
- echo '<span>'.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 ();
- ?>
- </body>
- </html>
|
En fait j'ai fais beaucoup de tests et apparament ça fonctionne mais seulement lorsque la valeur de [color=red]$nb_affichage_par_page[/color](dans fichier d'action) est supérieur au nombre d'enregistrements contenus dans la table, sinon ça renvoi un résultat complétement incohérent.
Et voici le lien pour comprendre plus précisément mon probleme http://yazworld.free.fr/site/bdd.php
Voilà si vous y comprenez quelque chose, je vous remerci de bien vouloir m'apporter votre aide.
Merci, Yaz. |