Affichage page par page mais à partir d'une recherche

NDS
Petit nouveau ! | 7 Messages

03 mars 2009, 06:02

Bonjour,

J'utilise le code de cyrano concernant l'affichage d'éléments page par page. Tout fonctionne bien. Mais si je veux afficher un grand nombre d'élément qui provient d'une recherche, cela bug.

Voici la partie du code

<h2>Résultat de la recherche dans le répertoire des commerçants</h2>
	<?php 
	 /* Paramètres de connexion */ 
	include_once("includes/connexion.php");
	// création des variables
	$searchterm= trim($searchterm);
	$searchterm= htmlspecialchars($searchterm);
	 if (!$searchtype || !$searchterm)
  	{
     echo "Vous n'avez pas entrer les &eacute;l&eacute;ments de recherches.  S.V.P. essayer de nouveau";
     exit;
  	}
	/* Paramètres de pagination */ 
	$nb_element_par_page = 6;             /* nombre d'élément affichées sur chaque page */ 
	$url = "./liste.php?page="; 
	
	/* Détermine quelle est la page qui est actuellement affichée */ 
	$page_en_cours    = isset($_GET['page']) ? $_GET['page'] : 0; 
	$page_affichee    = ($page_en_cours + 1); 
	
	/* Requête pour compter les renseignements */
	$sql_nb = "SELECT  COUNT(*) FROM entreprises WHERE $searchtype like '%$searchterm%'ORDER by  nom_entreprise"  ; 
	
	/* Exécution de la requête et récupération du résultat */ 
	$resultat_1 = mysql_query($sql_nb); 
	$nb_element = mysql_result($resultat_1, 0); 
	
	/* Calcul du nombre total de pages : on arrondit à l'entier supérieur (ceil() ) */ 
	$nb_pages = ceil($nb_element / $nb_element_par_page); 
	
	/**  
	 vérifier si plusieurs pages, et au moins une 
	 */ 
	if($nb_pages > 0) 
	{ 
    	/*  variable qui pour les données de navigation */ 
   		 $barre_nav = ""; 
    	/*au moins une page : avons nous besoin d'une barre de navigation ? */ 
   		 if($nb_pages > 1) 
    	{ 
        	/**  
			 vérifier si plusieurs pages, et au moins une 
			 */ 
        	if($page_en_cours > 0) 
        	{ 
           		 for($i = 0; $i < $page_en_cours; $i++) 
            	{ 
                	$p = $i + 1; 
               	 $barre_nav .= "<a href=\"". $url . $i ."\" title=\"page ". $p ."\">". $p ."</a>  "; 
           		 } 
       		 }	 
        	/** 
         	affiche la page en cours
         	*/ 
        	$barre_nav .= "<strong>". $page_affichee ."</strong>"; 
        	/* affiche (s'il y a lieu) les liens vers les pages suivantes */ 
        	if(($page_affichee) < $nb_pages) 
        	{ 
            	/* autres pages à afficher */ 
            	$nb_suivantes = $nb_pages - ($page_affichee); 
            	for($j = ($page_affichee); $j < $nb_pages; $j++) 
            	{ 
                	$p = $j + 1; 
                	$barre_nav .= "  <a href=\"". $url . $j ."\" title=\"page ". $p ."\">". $p ."</a>"; 
            	} 
        	} 
         
        	/* On peut définir en plus la situation dans une autre variable à afficher ailleurs */ 
       		 $page_affichee = "Page ". $page_affichee ." / ". $nb_pages ." "; 
    		} 
    		else 
    		{ 
      	 	 /* une seule page */ 
       		 $barre_nav .= "page 1/1"; 
  		 	 } 
   			 /**  
			 vérifier si plusieurs pages, et au moins une 
			 */ 
			$debut = $page_en_cours * $nb_element_par_page; 
			
			
			$sql_n = "SELECT id_entreprise, nom_entreprise, adresse,telephone FROM entreprises WHERE $searchtype like '%$searchterm%' ORDER BY nom_entreprise LIMIT ". $debut .", ". $nb_element_par_page .";"; 
			$element = mysql_query($sql_n); 
			
			?> 
			<p class="situation"><?php echo($page_affichee); ?></p> 
			<?php 
			
			while($nouv = mysql_fetch_assoc($element)) 
			{ 
			?> 
			<?php $id_entreprise=$nouv['id_entreprise'];?>
			<?php $nom_entreprise=$nouv['nom_entreprise'];?>
		
			<?php  echo "<blockquote><a href=voir.php?id_entreprise=$id_entreprise> $nom_entreprise </a></blockquote></p>";
			  }
			  echo "<blockquote>_________________________________________________</blockquote>";
			
			/* Libèration la mémoire */ 
			mysql_free_result($resultat_1); 
			mysql_free_result($element); 
			?> 
			<p class="navigation"><?php echo($barre_nav); ?></p> 
			<?php 
 			} 
			else 
			{ 
    		/**  
			aucune page affiche un message   */ 
			echo "Aucun résultat  ";
			} 
			?>
Tout va bien. Le nobre de page est affiché correctement mais lorsque je passe à la page 2, la réponse que j'obtiens est que je n'ai pas entrer d'éléments de recherche.

Merci de l'aide

Alain

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 mars 2009, 10:03

Modération :
NDS, le multipostage est interdit sur le forum.

Merci de prendre le temps de lire les règlements.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mars 2009, 15:04

Quelques questions à te poser, qui te permettront de résoudre ce petit soucis :

- Quelles sont les valeurs de $searchtype et $searchterm lorsque tu ouvres ta secondes pages ?
- Pourquoi n'ont elles pas les valeurs attendues ?
- D'où proviennent ces valeurs ?
- Pourquoi en disposes-tu sur la première page et pas sur la seconde ?
- Comment faire pour les transmettre d'une page à l'autre ?

Quand tu y auras répondu, tout devrait rouler ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

NDS
Petit nouveau ! | 7 Messages

03 mars 2009, 15:32

Désolé Zeus s'il y a eu multi-postage mais c'est par erreur .Il c'est sûrement produit lorque j'ai prévisualiser mon message. J'ai du faire envoyer par mégarde.
- Quelles sont les valeurs de $searchtype et $searchterm lorsque tu ouvres ta secondes pages ?
- Pourquoi n'ont elles pas les valeurs attendues ?
- D'où proviennent ces valeurs ?
- Pourquoi en disposes-tu sur la première page et pas sur la seconde ?
- Comment faire pour les transmettre d'une page à l'autre ?
Ce sont des variables chaîne de caractère envoyer par un formulaire de recherche. Elles sont envoyés par la méthode POST

voici le formulaire
<form action="liste.php" method="post">
		   <p>Choix du crit&egrave;re de recherche:</p>
		   <p>
             </p>
	           <select name="searchtype">
	             <option value="nom_entreprise">Nom du commerce</option>
	             <option value="adresse">Adresse</option>
	             <option value="telephone">Téléphone</option>
				 <option value="telephone_autre">Autre téléphone</option>
				 <option value="courriel">Courriel</option>
				 <option value="proprio">Propriétaire</option>
				 <option value="service">Offre de service</option>
				 <option value="autre">Autres détails</option>
 		                 </select>
		          </p>
		   <p />
  		<p>Entrer votre recherche:</p>
  		<p>
          </p>
	      <input name="searchterm" type="text" size="50">
	      </p>
  		</p>
  		<p>	        <input name="submit" type="submit" value="Chercher">
  	    </p>
		 </form>
Merci

Alain

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]