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

witch32 Messages postés 30 Date d'inscription lundi 31 janvier 2005 Statut Membre Dernière intervention 15 juin 2007 - 24 mai 2007 à 20:27
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 25 mai 2007 à 12:37
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

witch32 Messages postés 30 Date d'inscription lundi 31 janvier 2005 Statut Membre Dernière intervention 15 juin 2007
24 mai 2007 à 22:31
Faut pas avoir peur du script....!?
je compte sur quelqu'un...pitié!!!
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 mai 2007 à 07:06
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
0
witch32 Messages postés 30 Date d'inscription lundi 31 janvier 2005 Statut Membre Dernière intervention 15 juin 2007
25 mai 2007 à 08:48
ok merci, je vais tester tout ca et je tiens au courant!
0
witch32 Messages postés 30 Date d'inscription lundi 31 janvier 2005 Statut Membre Dernière intervention 15 juin 2007
25 mai 2007 à 09:08
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 "
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 mai 2007 à 09:14
desole je voulais dire
mysql_num_rows
0
witch32 Messages postés 30 Date d'inscription lundi 31 janvier 2005 Statut Membre Dernière intervention 15 juin 2007
25 mai 2007 à 10:01
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?
0
witch32 Messages postés 30 Date d'inscription lundi 31 janvier 2005 Statut Membre Dernière intervention 15 juin 2007
25 mai 2007 à 11:00
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
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 mai 2007 à 12:37
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..
0
Rejoignez-nous