IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Moteur de recherche sur plusieurs pages


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut Moteur de recherche sur plusieurs pages
    Bonjour , j'avais fais un moteur de recherche sur mon site et il marchais tres bien
    seulement les info contenu sur mon site deviennent assez nombreuse et j'aimerai que les résultats de mes recherches soit gérer sur plusieur page si il y en a trop ..
    par exemple autoriser uniquement 50 réponse par page ...

    pour se faire je me suis inspiré du site et notement du passage sur le livre d'or mais je bloque un peu donc si vous pouviez m'éclairer


    voila ce que j'ai fais :

    sur la page index (ou se trouve le moteur de recherche) :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <p>Recherche par mot clé : entrer un (ou plusieurs) mot clé(s)</p>
    <form action="recherche.php" method="post">
        <input type="text" size="20" maxlength="20" name="cherche"/>
        <input class="valider" type="submit" value="Rechercher" />
    </form>

    sur ma page recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
    <p><h1>Résultat de la recherche</h1>
    <?php
            $cherche = htmlentities ($_POST['cherche']);
            $sql = "SELECT * FROM liste where Groupe like '%$cherche%' 
            OR Titre like '%$cherche%' 
            OR Format like '%$cherche%' 
            OR Pays like '%$cherche%' 
            OR Etat like '%$cherche%' 
            OR Prix like '%$cherche%' 
            order by Groupe,Titre";
     
            $reponse = mysql_query ($sql);
     
    // si aucun disques ne correspond à la recherche 
            if (mysql_num_rows($reponse)==0)
            {
                echo "<p><center><strong>Il n'y a aucun disque répondant à votre recherche</center></strong></p>";>
    ?>
               <p><center><a href="index.html">Retour</a></center></p>
    <?php         
            }
     
    //si il y a au moin un disque qui correspond  à la recherche 
            else
            {
     
                    // On met dans une variable le nombre de disques  qu'on veut par page
                    $nombreDeDisquesParPage = 50;     
                    // On récupère le nombre total de messages correspond au criteres choisi        
                    $retour = mysql_query("SELECT COUNT(*) AS nb_disques FROM liste where Groupe like '$cherche%' OR Titre like '%$cherche%' 
            OR Format like '%$cherche%' 
            OR Pays like '%$cherche%' 
            OR Etat like '%$cherche%' 
            OR Prix like '%$cherche%'
            and Stand='N'
            and Genre='M'");
     
                    $donnees = mysql_fetch_array($retour) or die(mysql_error());
                    $totalDesDisques = $donnees['nb_disques'];
                    // On calcule le nombre de pages à créer
                    $nombreDePages  = ceil($totalDesDisques / $nombreDeDisquesParPage);
     
    // Puis on fait une boucle pour écrire les liens vers chacune des pages
    echo 'Page : ';
    for ($i = 1 ; $i <= $nombreDePages ; $i++)
    {
        echo '<a href="recherche.php?cherche='.$cherche.'&amp;page=' . $i . '">' . $i . '</a> ';
    }
            if (isset($_GET['page']))
            {
                    $page = $_GET['page'];  }
            else 
            {
                    $page = 1;
            }
            $premierMessageAafficher = ($page - 1) * $nombreDeDisquesParPage;
            $sql1=$sql. " LIMIT " . $premierMessageAafficher . "," . $nombreDeDisquesParPage;
            $reponse = mysql_query($sql1) or die(mysql_error()); 
            echo'<table BORDER=1>';
            while ($donnees = mysql_fetch_array($reponse))
            {
                    echo'<tr>
                            <td width="30px">'.$donnees['Groupe'].'</td>
                            <td width="100%">'.$donnees['Titre'].'</td>
                            <td width="6px">'.$donnees['Format'].'</td>
                            <td width="3px">'.$donnees['Pays'].'</td>
                            <td width="7px">'.$donnees['Etat'].'</td>
                            <td width="4px">'.$donnees['Prix'].'</td>
                    </tr>';
            }
            echo'</table>';
            }
            mysql_close();
    ?>

    je pense que c'est la partie ou j'affiche les pages qui ne marche pas bien ...

    en fait pour le moment j'ai bien la premiere partie de ma recherche qui est afficher mais si par exemple je clique su le lien 1 (qui devrai amener au meme résultat) j'ai une page bleu comme si il trouvais plus rien ...
    idem si il y a plusieur page lorsque je clique sur les liens correspondants
    Le savoir est une arme alors soyons armés

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Il faut faire passer le nombre de page en get :
    Code Récupération du GET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(isset($_GET['page']) && ereg('^[0-9]*$', $_GET['page'])) {
    	$nb = $_GET['page'] + (9 * $_GET['page']);
    }
    else {
    	$nb = 0;
    }
    Ensuite, il faut faire une requête pour récupérer le nombre de news (ici $nb_news['0'] :
    Code Lien page précédente et suivante : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (($nb + 50) < $nb_news['0']) {
    	$plus = '| <a href="?p='.(($nb/10) + 1).'">Suivant >>></a>';
    }
    if (($nb - 50) >= 0){
    	$moins = '<a href="?p='.(($nb/10) - 1).'"><<< Pr&eacute;c&eacute;dent</a> |';
    }
    Ensuite pour ta requête :
    Code Requête d'affichage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = 'SELECT * FROM liste where Groupe like \'%$cherche%\' 
            OR Titre like \'%$cherche%\' 
            OR Format like \'%$cherche%\' 
            OR Pays like \'%$cherche%\' 
            OR Etat like \'%$cherche%\' 
            OR Prix like \'%$cherche%\' 
            order by Groupe,Titre
            LIMIT '. $nb .',50';

    Je te laisse le soin de remettre de l'ordre dans ce que je te propose, et y voir ce qui pourrait être utile ...

    Bonne chance.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    merci mais malgres ton aide cela ne change pas grand chose

    déjà pour la requete ca done un warning enfin au dela de ca le probleme reste le meme car en cliquant sur les liens des différentes pages j'obtiens une page blanches ...
    Le savoir est une arme alors soyons armés

  4. #4
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, tu peux jeter un oeil sur cet exemple : Pagination d'un résultat de requête

    Bon développement
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    ah merci ; j'ignorais qu'il y avais un exemple la dessus

    je vais voir ca et je vous tiens au courant
    Le savoir est une arme alors soyons armés

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Je me permet de remonter ce topic.

    Je vais procédé comme dans l'exemple du site
    "Pagination d'un résultat de requête".

    J'aurai juste aimé savoir si il y avait d'autre solution possible pour ce genre de problème?

    Est-il possible en php, de recuperer la resultat de toute la requête, de le mettre en session et de l'utiliser dans les autres pages?

    Je pense que non, mais sait on jamais.
    (je faisais comme ça en J2EE)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    A vrai dire je n'ai jamais essayer, mais tu peux bien faire un (je pense) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['query'] = mysql_query(/* requête */);
    Mais bon ... une sélection de 10 Mo ... ça risque de faire mal :').

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    oh je pourrais faire ça et l'utiliser pages après pages?

    le problème c'est clair que c'est le poids des données retournée.

    C'est mesurable ça avec SQUIRREL?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Citation Envoyé par popogendarme
    oh je pourrais faire ça et l'utiliser pages après pages?
    Oui, mais comme dit plus haut, je ne vois pas bien l'intérêt sauf pour les petites requêtes éventuellement.

    Citation Envoyé par popogendarme
    C'est mesurable ça avec SQUIRREL?
    Je ne sais pas car je ne sais pas ce que c'est. C'est quoi ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    ah ouais escuse moi,
    c'est une logiciel de base de donnée, j'utilise ça pour Mysql ( c'est les mecs de mon bureau, qui m'ont installé ça)

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Citation Envoyé par SpiritOfDoc
    A vrai dire je n'ai jamais essayer, mais tu peux bien faire un (je pense) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['query'] = mysql_query(/* requête */);
    Mais bon ... une sélection de 10 Mo ... ça risque de faire mal :').

    mon dieu.....


    C'est très sympathique de ta part que de vouloir aider SpiritOfDoc, mais se serait mieu de te renseigner avant de lancer de telles... erreurs ? idioties ? anneries ? Je te laisses le choix.

    Citation Envoyé par http://fr2.php.net/manual/fr/function.serialize.php
    serialize() acceptent tous les types sauf les ressources.

    Donc popogendarme, pour répondre à ta question. non pas en php :/
    Le plus simple étant sauvegarder en session le début de ta clause LIMIT.
    Ce qui téviteras d'avoir à le trimballer dans toutes les urls.

    bye

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Citation Envoyé par kaymak
    C'est très sympathique de ta part que de vouloir aider SpiritOfDoc, mais se serait mieu de te renseigner avant de lancer de telles... erreurs ? idioties ? anneries ? Je te laisses le choix.
    Le fait est que ça fonctionne ... et qu'il a posé la question ... donc je lui répond...

    La politesse tu ne dois pas connaitre ...

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Tu persistes dans l'idée que cela fonctionne ?? Alolrs oui sa fonctionnera sur la même page, les variables de session sont comme toutes les autres variables.
    Mais lorsque tu changeras de page, et que ta session sera serialiser, ou linéariser, cela ne fonctionnera plus.

    Qd à ta remarque sur la politesse, je me suis permit de juger la qualité de ta réponse, et non tes aptitudes mentales.....
    De plus j'étais particulièrement exaspéré de lire ta réponse après avoir lu celle ci :
    http://www.developpez.net/forums/sho...43&postcount=3

    Encore une fois je te renvoies à la doc.
    http://fr2.php.net/manual/fr/languag...ialization.php

Discussions similaires

  1. [MySQL] moteur de recherche sur plusieur table php mysql
    Par chrisl46 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/04/2014, 18h33
  2. moteur de recherche sur plusieurs table liees
    Par oliv3400 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/02/2012, 12h30
  3. [MySQL] Moteur de recherche sur plusieurs tables
    Par lelectronique.com dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/01/2010, 14h12
  4. [AJAX] Resultats recherche sur plusieurs pages
    Par Borowsky dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/07/2008, 16h58
  5. [MySQL] moteur de recherche sur plusieurs tables
    Par harlock59 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/04/2007, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo