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 avec page par page [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Moteur de recherche avec page par page
    Bonjour.

    Le moteur de recherche fonctionne ainsi que le page par page.
    Mais, quand arrive le temps de faire suivant en cliquant sur la
    2e page, je perd mon critère de recherche.

    Quelque chose ne va pas dans mon code. Quelqu'un peu m'aider?

    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
    <?php 
     
    	include_once('conf.inc.php');
    	include_once('fonc.inc.php');
     
      if(isset($_POST['rech'])){
      $rech = $_POST['rech'];
      $resultat=$connexion->query("SELECT count(*) FROM ori_images WHERE `desc` REGEXP '$rech'");
      }
      else{
      $resultat=$connexion->query("SELECT count(*) FROM ori_images");
      }
     
      $nb_total = $resultat->fetch_array();
      if (($nb_total = $nb_total[0]) == 0) {
      echo 'Aucun<br>';
      }
      else {
     
        if (!isset($_GET['debut'])) $_GET['debut'] = 0;
        $nb_affichage_par_page = 4;
        $ledebut=intval($_GET['debut']);
     
    		if(isset($_POST['rech'])){
    		$rech = $_POST['rech'];
    		$resultat = "SELECT * FROM ori_images WHERE `desc` REGEXP '$rech' ORDER BY id DESC LIMIT $ledebut,$nb_affichage_par_page";
    		}
    		else{
    		$resultat = "SELECT * FROM ori_images ORDER BY id DESC LIMIT $ledebut,$nb_affichage_par_page";
    		}
     
        $result = mysqli_query($connexion,$resultat);
     
        while ($ligne = mysqli_fetch_assoc($result)){
            //contenu 
        }
        echo barre_navigation($nb_total,$nb_affichage_par_page,$_GET['debut'],15);
        }
    ?>
     
    <form method="POST" action="">
    <input type="text" name="rech" value="<?php echo $_POST['rech']; ?>">
    <input type="submit" value="rechercher">
    </form>

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    C'est normal car dès la deuxième page, c'est à dire quand tu clique sur le bouton de la barre de navigation, cela n'envoie pas de valeur $_POST.

    Or tu fais une recherche dans ta requête avec la variable $rech = $_POST['rech']
    et de plus plus loin tu conditionne ta requête avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_POST['rech'])){
    		$rech = $_POST['rech'];
    		$resultat = "SELECT * FROM ori_images WHERE `desc` REGEXP '$rech' ORDER BY id DESC LIMIT $ledebut,$nb_affichage_par_page";
    Il faut refaire ton code pour que tes requête soient indépendantes de $_POST['rech'], et enregistrer $_POST['rech'] dans une variable de session par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    session_start();
    $_SESSION['rech'] = $_POST['rech'];
    Les variables de sessions persistent de pages en page (tant que tu ne les efface pas) alors que les variables $_POST ne sont définies que par l'intermédiaire d'un formulaire uniquement lorsque tu soumet le formulaire (pas après) et dans la seule page de destination que tu indique dans l'attribut "action = "

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut re
    Merci pour l'aide!

    - ça ne sauvegarde pas la session
    - si je mets un critère, oui ça affiche bien si j'étais à la page 1
    - si je suis à la page 3 et que je fais une recherche, ça affiche rien.
    - si le résultat est de 4 page, si je clique sur 2,3 ou 4, ça réinitialise à zero

    J'ai changé des choses, mais le résultat reste le meme.

    Toutes la page pour l'affichage :

    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
     
    session_start();
     
      $_SESSION['rech'] = $_POST['rech'];
      $rech = $_SESSION['rech'];
     
      $resultat=$connexion->query("SELECT count(*) FROM ori_images WHERE `desc` LIKE '%$rech%'");
      $nb_total = $resultat->fetch_array();
     
      if (($nb_total = $nb_total[0]) == 0) {
      echo 'Aucun<br>';
      }
      else {
     
        if (!isset($_GET['debut'])) $_GET['debut'] = 0;
        $nb_affichage_par_page = 2;
        $ledebut=intval($_GET['debut']);
     
    		$resultat = "SELECT * FROM ori_images WHERE `desc` LIKE '%$rech%' ORDER BY id DESC LIMIT $ledebut,$nb_affichage_par_page";
     
        $result = mysqli_query($connexion,$resultat);
     
        while ($ligne = mysqli_fetch_assoc($result)){
     
          $size = getimagesize('imges/'.$ligne['images']);
     
          $letitre=stripslashes(Coupure($ligne['titre'],50));
          $ladesc=stripslashes(Coupure($ligne['desc'],280));
     
          echo '
          <table cellpadding="0" cellspacing="1" width="100%" height="90" bgcolor="#F7FAF3">
            <tr>
              <td width="90" height="90" rowspan="3" valign="top" align="left" style="border:1px inset #000000;">
                  <A HREF="#" title="Cliquez pour ouvrir" onClick="window.open(\'imges/'.$ligne['images'].'\',\''.$ligne['id'].'\',\'toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width='.$size[0].', height='.$size[1].', left=11, top=11\'); return(false)"><img alt="" src="imges/thumb_'.$ligne['images'].'"border="0" width="90" height="90"></a>
              </td>
              <td width="*" height="16" colspan="2" valign="middle" align="center" bgcolor="#5F7939">
                <div style="color:white;font-size:12px;font-family:Verdana;">'.$letitre.'</div>
              </td>
            </tr>
            <tr>
              <td width="*" height="61" valign="top" align="left">
                <div style="color:green;font-size:11px;font-family:Arial;padding:5px;">'.$ladesc.'</div>
              </td>
            </tr>
            <tr>
              <td width="*" height="10" valign="bottom" align="right" style="font-size:10px">
                Image NO '.$ligne['id'].' ajouté/modifié le '.$ligne['date'].' &nbsp; [ <A class="idimg" HREF="#" onClick="window.open(\'coment.php?id='.$ligne['id'].'\',\'_blank\',\'toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=830, height=460\');return(false)">'.$ligne['img_id'].' COMMENTAIRES</A> ]&nbsp;
              </td>
            </tr>
          </table>
          ';
     
        }
     
        echo '<div class="base" style="color:#889E68;">'.barre_navigation($nb_total,$nb_affichage_par_page,$_GET['debut'],15).'</div>';
     
        $comptei=$connexion->query("SELECT * FROM ".constant('BDD').".`ori_images`");
        echo $comptei->num_rows.' Images enregistrées';
     
        $comptec=$connexion->query("SELECT * FROM ".constant('BDD').".`ori_comen`");
        echo ' avec un total de '.$comptec->num_rows.' commentaires des visiteurs!<br>';
        }
    }
     
    var_dump($rech);
     
    ?>
     
    <form method="POST" action="">
    <input type="text" name="rech" value="<?php echo $_SESSION['rech']; ?>">
    <input type="submit" value="rechercher">
    </form>

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Faut revoir les choses calmement et comprendre ce que tu fais. Il y a un tuto ici ce serait bien d'aller y faire un tour avant de te lancer dans le code.

    J'ai pas tout regardé, mais simplement les premières lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      $_SESSION['rech'] = $_POST['rech'];
      $rech = $_SESSION['rech'];
    dans ce cas $rech est toujours égal à $_POST['rech']. Or je viens de dire plus haut :
    quand tu clique sur le bouton de la barre de navigation, cela n'envoie pas de valeur $_POST
    Il faut que $rech soit égal à $_POST['rech'] quand on envoi une valeur de recherche par l'intermédiaire du formulaire, et sinon quand on clique sur la barre de navigation il faut que $rech soit égal à $_SESSION['rech'] qui mémorise la valeur de page en page (contrairement à la variable $_POST['rech'] qui n'est définie que lorsque l'on clique sur le bouton "rechercher" du formulaire). Et bien entendu que $_SESSION['rech'] soit égal à la dernière valeur de $_POST['rech'].

    Donc ça fait un truc comme ça :
    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
     
    session_start();
     
    $rech = '';// on défini une valeur par défaut  
    if(isset($_POST['rech'])) 
        {
            $rech = $_POST['rech'];
            $_SESSION['rech'] = $_POST['rech'];
        }
     
        else if (isset($_SESSION['rech']))
     
        {
            $rech = $_SESSION['rech'];
        }
    on peut faire un peu plus court avec les opérateurs ternaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    session_start();
     
    $rech = isset($_SESSION['rech']) ? $_SESSION['rech'] : '';
    $rech = isset($_POST['rech']) ? $_POST['rech'] : $rech;
    (plus rapide à écrire mais un peu plus difficile à comprendre au début)

  5. #5
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Heureux d'avoir été aidé par toi, ABCIWEB.


    Je vais inclure le titre dans la recherche.

    Je regarde pour ajouter une option pour
    inclure le titre dans la recherche. Mais,
    déjà la recherche dans la description
    est très bien.

  6. #6
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut message révisé.
    A la base de ce que je demandais, ça fonctionne bien et résolu. Mais, sur le même sujet, j'ai un souci et aussi une modification.

    Dans le petit engin de recherche, si j'obtiens 9 pages, mais que la page active est la 9. Quand je fais une autre recherche, qui a moins de page, le résultat est vide vu que j'étais à la page 9.

    Exemple : ma précédente recherche me donne 9 pages, je vais à la page 9. Et je décide de faire une autre recherche qui me donne 3 pages, le résultat ¸va être présent dans les 3 pages mais je ne le verrai pas tant que je n'aurai pas cliqué sur l'une des 3 pages.

    Comment, je peux faire pour réinitialiser quand je fais submit ?

    sans toutefois, réinitialiser quand je clique sur les pages.

  7. #7
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    - problème résolu comme suit:

    j'ai mis index.php?page=2

    ça remet la page à 1 quand je clique sur le bouton. C'est le but recherché par ma demande.

    Puis pour ajouter un 2e critère à la recherche.. j ai juste doublé le test isset
    en mettant une autre variable.

    nikel l'affaire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Défaut dans (moteur de recherche avec affichage par page)!
    Par booraq dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 13/12/2013, 12h10
  2. Moteur de recherche avec pages protégées
    Par oc_alex86 dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 13/02/2010, 12h59
  3. re:moteur de recherche il m'affiche page blanche
    Par boss59840 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/04/2007, 10h48
  4. afficher resultat page par page selon une recherche
    Par boss59840 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/03/2007, 18h12
  5. [MySQL] afficher plusieurs enregistrements par page par page à la volée
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/03/2006, 12h22

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