Besoin d'aide pour pagination d'un moteur de recherche...

Signaler
Messages postés
30
Date d'inscription
lundi 31 janvier 2005
Statut
Membre
Dernière intervention
15 juin 2007
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
alors voila,

j'ai créé un moteur de recherche pour partitions.
aujourd'hui
la base contient 35000 références;pour une recherche si je tombe
sur1200 résultats...tout afficher sur une meme page, c'est pas super!

 du coup j'aimerai faire un affichage 50, 100, 250 ou 500 résultats pas page.

j'ai regardé pas mal de source et de tutoriaux, mais je n'ai pas réussi à les mettre en place...

quelqu'un peut m'aider? c'est vraiment important et je ne m'en sors pas!


merci d'avance!!!

 ps: c'est un probleme si je n'ai pas un ID défini dans ma table?


ma page index.php :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns= "http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>moteur recherches</title>


</head>



<link href="aam_styles.css" rel="stylesheet" type="text/css" />

<style type="text/css">

.Menutext {

    FONT-SIZE: 8pt; COLOR: #ffffff; FONT-FAMILY: Verdana,Helvetica,sans-serif

}

.Menutext:link {

    COLOR: #ffffff

}


.Menutext:visited {

    COLOR: #ffffff

}

.Style1 {color: #DA4A19}


</style>

                              <form  method="post">

                                                                           ----

                                             Auteur / Compositeur ,

                                             Titre,

                                             Editeur,

                                             Instrument /
Genre,

                                                                                              

                                            ,

                                       

                                        ----

                                                                                              

                                            ,

                                                                                              

                                            ,

                                                                                              

                                            ,

                                                                                              

                                            ,

                                       

                                  


                              </form>

<?php


//on charge le fichier de connexion à la table

include('connexion.php');


//calcule le nbre d'élément de la table

$total_table = mysql_num_rows(mysql_query("SELECT AR_Ref FROM am_parts"));


// si c'est le premier appel de la variable auteur

if(!isset($_POST['auteur']))

         {

         echo "

<center>Bienvenue sur le module de partitions ARPEGES.

         

A ce jour, vous avez accès à

          $total_table références de partitions.

         

La recherche peut s'effectuer sur 1 à 4 critères.</center>";

return;

     }


//on relie les variables

$auteur = $_POST['auteur'];

$titre= $_POST['titre'];

$editeur= $_POST['editeur'];

$instrument= $_POST['instrument'];


include('selection.php');


switch($selection){


case 1 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven FROM am_parts WHERE (auteur LIKE '%$auteur%' or AR_design like
'%$auteur%') ORDER BY auteur , lien ";

$result = mysql_query ($query);

break;


case 2 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven
FROM am_parts WHERE (auteur LIKE '%$auteur%' or AR_design like
'%$auteur%') AND ((titre_francais LIKE '%$titre%' OR
titre_version_originale LIKE '%$titre%' )OR AR_design LIKE '%$titre%')
ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 3 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven 
FROM am_parts WHERE (auteur LIKE '%$auteur%' or AR_design like
'%$auteur%') AND editeur LIKE '%$editeur%' ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 4 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven,AR_Ref,AR_Ref 
FROM am_parts WHERE (auteur LIKE '%$auteur%' or AR_design like
'%$auteur%') AND(instr LIKE '$instrument' OR instr LIKE '$instrument%')
ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 5 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven,AR_Ref,AR_Ref 
FROM am_parts WHERE (auteur LIKE '%$auteur%' or AR_design like
'%$auteur%')  AND ((titre_francais LIKE '%$titre%' OR
titre_version_originale LIKE '%$titre%' )OR AR_design LIKE '%$titre%')
AND editeur LIKE '%$editeur%' ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 6 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven
FROM am_parts WHERE (auteur LIKE '%$auteur%' or AR_design like
'%$auteur%')  AND titre_francais LIKE '%$titre%' AND
titre_version_originale LIKE '%$titre%' AND(instr LIKE '$instrument' OR
instr LIKE '$instrument%') ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 7 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven 
FROM am_parts WHERE (auteur LIKE '%$auteur%' or AR_design like
'%$auteur%') AND editeur LIKE '%$editeur%' AND(instr LIKE '$instrument'
OR instr LIKE '$instrument%') AND ((titre_francais LIKE '%$titre%' OR
titre_version_originale LIKE '%$titre%' )OR AR_design LIKE '%$titre%')
ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 8 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven
FROM am_parts WHERE (titre_francais LIKE '%$titre%' OR
titre_version_originale LIKE '%$titre%' )OR AR_design LIKE '%$titre%'
ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 9 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven 
FROM am_parts WHERE ((titre_francais LIKE '%$titre%' OR
titre_version_originale LIKE '%$titre%' )OR AR_design LIKE '%$titre%')
AND editeur LIKE '%$editeur%' ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 10 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven 
FROM am_parts WHERE ((titre_francais LIKE '%$titre%' OR
titre_version_originale LIKE '%$titre%' )OR AR_design LIKE '%$titre%')
AND(instr LIKE '$instrument' OR instr LIKE '$instrument%') ORDER BY
auteur, AR_design";

$result = mysql_query ($query);

break;


case 11 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven 
FROM am_parts WHERE ((titre_francais LIKE '%$titre%' OR
titre_version_originale LIKE '%$titre%' )OR AR_design LIKE '%$titre%')
AND editeur LIKE '%$editeur%' AND(instr LIKE '$instrument' OR instr
LIKE '$instrument%') ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 12 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven FROM am_parts WHERE editeur LIKE '%$editeur%' ORDER BY auteur,
AR_design";

$result = mysql_query ($query);

break;


case 13 :

$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven
FROM am_parts WHERE editeur LIKE '%$editeur%' AND(instr LIKE
'$instrument' OR instr LIKE '$instrument%') ORDER BY auteur, AR_design";

$result = mysql_query ($query);

break;


case 14 :


$query = "SELECT
Auteur,titre_francais,titre_version_originale,lien,instruments,editeur,dispo,AR_prixven
FROM am_parts WHERE (instr LIKE '$instrument' OR instr LIKE
'$instrument%') ORDER BY auteur, AR_design";

$result = mysql_query ($query);


break;


// si aucun champ n'est rempli

case 15 :

echo "
<center>aucun champ n'est renseigné
!</center>";return;

break;

}


//on teste le nombre de ligne que contient le résultat, s'il est vide c'est que la recherche a été infructueuse

if(!mysql_fetch_row($result)){

echo "aucun résultat";

exit();

}


// affichera le nombre d'enregistrements retournés"

echo "Votre recherche porte sur le(s)
mot(s) clé(s) suivant(s) : $auteur $titre $editeur
$instrument    ";

//echo "
";

echo "   Nombre de résultats pour votre
requête : " . (mysql_num_rows($result)-1) ;

echo "   ";


//variables pour le tableau

$nblignes = mysql_num_rows($result);

$nbchamps = mysql_num_fields($result);


function affiche_titre ($t1,$t2,$t3,$t4,$t5,$t6,$t7,$t8){

echo "<tr bgcolor='#DA4A19' align='center'>";

echo " <td width = '13%'>" .$t1.'</td>';

echo " <td width = '23%'>" .$t2.'</td>';

echo " <td width = '15%'>" .$t3.'</td>';

echo " <td width = '25%'>" .$t4.'</td>';

echo " <td width = '10%'>" .$t5.'</td>';

echo " <td width = '8%' >" .$t6.'</td>';

echo " <td align='center' width = '2%'>" .$t7.'</td>';

echo " <td align='center' width = '4%'>"
.$t8.'</td>';


echo "</tr>";

}

//on crée la table

echo "\";

affiche_titre(\"Auteur\",\"Titre français\",\"Titre original\",\"Désignation\",\"Instrument\",\"Editeur\",\" Dispo\",\" ? \");

//alterner les couleurs du tableau

function alterneCouleur ($couleur1, $couleur2){

static $couleur;
$couleur ($couleur $couleur1)? $couleur2 : $couleur1;

return $couleur;

}

$couleur1 = '#FFFCCB';

$couleur2 = '#FEEBBA';

//on teste pour connaitre le nombre de lignes

for($i=0; $i<$nblignes; $i++){

    $ligne = mysql_fetch_row($result);

    echo ?>

----
\" >

     <?php ;

   

    for($j=0;$j< $nbchamps-2;$j++)

        {

        echo \"$ligne[$j], \";

        }

    if ($j=6){

            //echo \"$ligne[$j]";

            echo ", \";

            if($ligne[$j] == 0){

            echo \"</td>\";

            }

            elseif($ligne[$j] ==1){

            echo \"</td>\";

            }

            else{

            echo \"</td>\";

            }

        }

        if ($j=7){echo \"$ligne[$j], \";}

          

echo \"\";

}

echo "
";


//on se déconnecte de la table

mysql_close();

?>



</html>

8 réponses

Messages postés
30
Date d'inscription
lundi 31 janvier 2005
Statut
Membre
Dernière intervention
15 juin 2007

Faut pas avoir peur du script....!?
je compte sur quelqu'un...pitié!!!
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
Salut,
$result = mysql_query ($query);

ca faut le sortir de ton switch, a te permet de faire ceci plus facilement :

$result = mysql_query ($query);
$nbr=mysl_fetch_result($result);
$result = mysql_query ($query.' LIMIT '.$lim1.', 10;');

et pour afficher ta pagination
for ($i=1; $i<$nbr;$i+=10)
    echo '[...?...&lim='.$i.' ...'.$i.']';

et tout en haut :

$lim1=(isset($_GET['lim1'])?intval($_GET['lim1'])-1:0);

Une recherche sur exalead vous aurait peut-etre evit
Messages postés
30
Date d'inscription
lundi 31 janvier 2005
Statut
Membre
Dernière intervention
15 juin 2007

ok merci, je vais tester tout ca et je tiens au courant!
Messages postés
30
Date d'inscription
lundi 31 janvier 2005
Statut
Membre
Dernière intervention
15 juin 2007

for ($i=1; $i<$nbr;$i+=10)
    echo '[...?...&lim='.$i.' ...'.$i.']';




 tu entends quoi pas les points de suspension?

mais de toute façon, j'ai déjà un probleme...

"   FATAL ERROR : call to undefined function : mysql_fetch_result() in index.php on line 200 "
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
desole je voulais dire
mysql_num_rows
Messages postés
30
Date d'inscription
lundi 31 janvier 2005
Statut
Membre
Dernière intervention
15 juin 2007

il n'y a plus d'erreur qui s'affiche, mais par contre la pagination....

j'ai fait ce que tu m'as dit:
for ($i=1; $i<$nbr;$i+=10)
    echo '[...?...&lim='.$i.' ...'.$i.']';

mais ca m'affiche
...1...1...1...1...1...1...1...1...1... indéfiniment, jusqu'a ce que ca plante
"fatal error maximum execution time of 30seconds exceeded in index.php on line 226.
(c'est la boucle...)

et ca meme pour une requete ou j'ai 3résultats

il faut la placer à un endroit précis?
Messages postés
30
Date d'inscription
lundi 31 janvier 2005
Statut
Membre
Dernière intervention
15 juin 2007

je peux abuser d'un dernier conseil?



echo '[...?...&lim='.$i.' ...'.$i.']';







c'est quoi la ligne exact (avec toute les infos) que je dois faire pour cette ligne?
parceque j'ai tout essayer mais je ne vois pas ...
et je crois que c'est le truc qui fait que rien ne marche...

merci
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
bon normalement, ca doit afficher un truc genre 1 - 2 - 3 .....



for ($i=1; $i<$nbr;$i+=10)
    echo '[page.php?lim='.$i.' '.$i.' - ]';




ca t'affiches toutes les pages
affiche juste $nbr pour voir... cette variable est peut-etre mal deffinie ou a 0.... faut traiter le cas 0 aussi..