Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/06/2011, 00h05   #1
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
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 :
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>
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2011, 04h42   #2
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
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 :
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 :
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 = "
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 07h52   #3
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
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 :
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>
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 21h04   #4
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
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 :
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 :
Citation:
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 :
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 :
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)
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 07h52   #5
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
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.
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 09h08   #6
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
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.
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 16h35   #7
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
- 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.
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h38.


 
 
 
 
Partenaires

Hébergement Web