soucis affichage page/page et moteur de recherche

Eléphanteau du PHP | 15 Messages

07 mars 2014, 10:16

Bonjour je me permet de venir vous embêter en vous demandant s'il était possible de m'aiguiller sur un épineux problème?

voila j'ai mis en place un petit moteur de recherche et un affichage page par page de mes résultats.

Seulement, j'ai deux problèmes
echo mysql_num_rows($requete)
ne m'affiche que les résultats limit et non les vrais nombre de résultats

quand je vais sur la page suivante, je n'ai rien qui s'affiche et ma recherche est annulée
Je pense que c'est une histoire de direction de bouton page suivante et page précédente mais je sèche

Je vous joins le code complet en espérant qu'il ne soit pas trop ragoutant pour les puristes c'est un mix de codes d'un moteur de recherche et de pagination de l'autre.
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
         <!--[if lt IE 9]!-->
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
        <!--[endif]!-->
        <!--[if lte IE 7]!-->
        <link rel="stylesheet" href="style_ie.css" />
        <!--[endif]!-->
        <!--[if lte IE 6]!-->
        <link rel="stylesheet" href="style_ie.css" />
        <!--[endif]!-->
        <style>
        @media print {
        #page *{
        display:none;
        }
        }
        #page .p,
        #page H2,
        #page P{
        display:block;
        }
        }
</style>
         
        <title>Catalogue</title>
         
         
 
     
    </head>
 
    <body>
        <div id="bloc_page">
            <header>
                <div id="titre_principal">
                    <img src="images/logo.png" alt="Logo" id="logo" />
                     
                </div>
                 
                <nav>
                     
                </nav>
            </header>
             
            <section>
                <?php
mysql_connect('localhost','root','');
// $link =mysql_connect;
mysql_select_db('test');
//On determine l'expression a rechercher
if(isset($_GET['recherche']))
{
        $rec = htmlentities($_GET['recherche']);
}
else
{
        $rec = 'Données, carte...';
}
//On determine le type de recherche
if(isset($_GET['type']))
{
        if($_GET['type']=='un')//Un des mots
        {
                $type = 1;
        }
        elseif($_GET['type']=='tout')//Tout les mots
        {
                $type = 2;
        }
        else//L'expression exacte
        {
                $type = 3;
        }
}
else
{
        $type = 1;//type par defaut: L'expression exacte
}
 
 
//On dertermine les identifiants, les noms et les informations des utilisateur
$req = 'SELECT * FROM metadata WHERE ';
if($type==1)
{//ayant un des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' resultats LIKE "%'.$mot.'%" OR';
        }
        $req .= ' 1=0';
}
elseif($type==2)
{//ayant tout des mots dans leurs informations
        $mots = explode(' ',$rec);//En separe lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' resultats LIKE "%'.$mot.'%" AND';
        }
        $req .= ' 1=1';
}
else
{//ayant l'expression exacte dans leurs informations
        $req .= 'resultats LIKE "%'.$rec.'%"';
}
//Les utilisateurs seront ranges par identifiant en ordre croissant
$req .= ' order by titre asc limit 1,1';
$requete = mysql_query($req);
 
 
 
 
//Le formulaire de recherche
?>
<aside id="search"><div id="page">
<form action="" method="get" align="left">
<input type="text" name="recherche"   onfocus="if(this.value == this.defaultValue) this.value = '';"
    onblur="if(this.value == '') this.value = this.defaultValue;"; value= "<?php echo $rec; ?>" /><strong></input>
<input type="image" name="search" src="images/search1.png" title="Rechercher"></input><br>
<?php
//Comptage résultat
?>
<i><font size="5" font color="#303334"><strong> <?php echo mysql_num_rows($requete). "";?></font></strong></strong><font size="5"> résultat(s) pour le mot : </font></strong><font size="5" font color="#303334"><strong><?php echo ($rec) ; ?> </strong></font></i>
 
</strong></br><fieldset>
<legend>Type de recherche: </legend><input type="radio" name="type" value="un"<?php if($type==1){echo 'checked="checked"';} ?> /> Un des mots <br><input type="radio" name="type" value="tout"<?php if($type==2){echo 'checked="checked"';} ?> /> Tous les mots <br><input type="radio" name="type" value="exacte"<?php if($type==3){echo 'checked="checked"';} ?> /> Expression exacte<br /></fieldset>
 
</form>
 
</aside>
</div></div>
<article >
<?php
//On affiche les resultats
 
while($resultats = mysql_fetch_array($requete))
 
 
 
 
 
 
 
 
//fiche métadata
 
{
?>
<div id="message" class="p" >
    <fieldset><legend><font size="4" font color="#303334"><align="center"><strong><?php echo $resultats['titre'] ?></strong><font size="2" font color="#000000">                <br><i><?php echo $resultats['type_catalogue']; ?><br /></i></legend>
     
    <h3>1. INFORMATIONS GENERALES <img src="images/info.png" title="Cette rubrique donne des informations principales sur la donnée"></h3>
    <font size="2" font color="#303334"><strong> Titre : <font size="2" font color="#000000"></strong> <?php echo $resultats['titre']; ?>
    <strong><font size="2" font color="#303334"> Identifiant :</strong><font size="2" font color="#000000"> <?php echo $resultats['identifiant']; ?>
    <br /><font size="2" font color="#303334"><strong> Description : <font size="2" font color="#000000"></strong> <?php echo $resultats['description']; ?>        
    <br /><font size="2" font color="#303334"><strong> Thème ISO :</strong><font size="2" font color="#000000"> <?php echo $resultats['themeiso1']; ?>
    <font size="2" font color="#303334"> ,<font size="2" font color="#000000"> <?php echo $resultats['themeiso2']; ?>
    <font size="2" font color="#303334"> ,<font size="2" font color="#000000"> <?php echo $resultats['themeiso3']; ?>
    <br /><strong><font size="2" font color="#303334"> Langue de la donnée :</strong><font size="2" font color="#000000"> <?php echo $resultats['languedata']; ?>
    <strong><font size="2" font color="#303334"> Langue de la métadonnée :</strong><font size="2" font color="#000000"> <?php echo $resultats['languemetadata']; ?>
    <br /><strong><font size="2" font color="#303334">Lien html de la métadonnée :</strong><font size="2" font color="#000000"> <a href=<?php echo $resultats['URL']; ?> target= "_blank"</a><i><font size="2" font color="#303334">Lien</i></a>
    <br /><strong><font size="2" font color="#303334"> Mots-clés :</strong><font size="2" font color="#000000"> <?php echo $resultats['motscles1']; ?>
    <strong><font size="2" font color="#303334">, </strong><font size="2" font color="#000000"> <?php echo $resultats['motscles3']; ?>
    <strong><font size="2" font color="#303334">, </strong><font size="2" font color="#000000"> <?php echo $resultats['motscles4']; ?>               
 
    </fieldset><br /><br /><br /><br />
              </td>
        </tr><br />
 
<?php
}
 
$nombre = 1;  // on va afficher 1 résultats par page.
if (!isset($limite)) $limite = 0; // si on arrive sur la page pour la première fois
               // on met limite à 0.
     
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];
 
$select = 'SELECT count(id) FROM metadata';
 
$result = mysql_query($select) or die ('Erreur : '.mysql_error() );
 
$row = mysql_fetch_row($result);
 
$total = $row[0];
 
// requête SQL qui ne prend que le nombre d'enregistrements nécessaire à l'affichage.
 
$select = 'select * FROM metadata ORDER BY titre ASC limit '.$limite.','.$nombre;
 
$result = mysql_query($select)  or die ('Erreur : '.mysql_error() );
 
// Calcul des limites précédente et suivante
$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;
 
// Requête de sélection de la deuxième page
 $select = 'SELECT * FROM metadata ORDER BY titre ASC limit 1,1';
 
if($limite != 0) {
    echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a>';
}
 
if($limite != 0) {
    echo '<form action="'.$page.'" method="post">';
    echo '<input type="submit" value="précédents">';
    echo '<input type="hidden" value="'.$limiteprecedente.'" name="limite">';
    echo '</form>';
}
if($limitesuivante < $total) {
    echo '<a href="'.$page.'?limite='.$limitesuivante.'">Page Suivante</a>';
}
 
 
 
 
 
//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 displayNextPreviousButtons($limite,$total,$nb,$page) {
$limiteSuivante = $limite + $nb;
$limitePrecedente = $limite - $nb;
echo  '<table><tr>'."\n";
 
if($limiteSuivante < $total) {
        echo  '<td valign="top">'."\n";
        echo  '<form action="'.$page.'" method="post">'."\n";
        echo  '<input type="submit" value="suivants">'."\n";
        echo  '<input type="hidden" value="'.$limiteSuivante.'" name="limite">'."\n";
        echo  '</form>'."\n";
        echo  '</td>'."\n";
             
}
echo  '</tr></table>'."\n";
}
 
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";
}
 
?>   
                </article>
 
        </div>
            </section>
     
             
    </body>
</html>

ViPHP
xTG
ViPHP | 7331 Messages

07 mars 2014, 10:51

1/ donc il te faut utiliser cette fonction sur la requête qui ne comporte pas de limit. ;)
2/ Tes liens de changement de page ne reprennent pas le paramètre de recherche et donc en changeant de page tu perds la recherche à effectuer.

Eléphanteau du PHP | 15 Messages

07 mars 2014, 11:13

salut xTG merci pour la réponse je cherche tant bien que mal je ne sais pas trop quel paramètre (je penche pour
$req
) mais par contre je ne sais pas où modifier si c'est sur
$limite
ou ailleurs