Page 1 sur 1

Navigation page par page : Recherche dans album Photos

Posté : 13 mai 2006, 00:01
par Photographiquement Vôtre
Bonsoir,

Désolé pour le titre mais je n'ai pas su quoi mettre.
[Modération (Cyrano)] : Corrigé

Volià mon problème :

Je fait des recherche sur un fichier de photos.

Je me sers ensuite d'un super script trouvé sur ce site qui permet de limiter le nombre de photos par page et qui permet en utilisant une barre de navigation de naviguer de page en page.

J'ai un problème quand je clique sur la barre de navigation car rien ne se passe

Merci pur votre aide.

Mon code :

<table align="center" width=733 height=320 border=0>
	<table align="center" width=500 border=0 height=50 bgcolor=#D3E134 cellspacing=2 cellpading=2>
		<tr>
			<td>Entrez le(s) mot(s) clé(s) dans le secteur souhaité et appuyer sur recherche :</td>
	 	<tr>
		<form action="recherche.php" method="post" >
	  		<td width=180 align=center><input type="text" size="20" name="mot" value=""  ></td>
			<td width=220 align=center>&nbsp<select name="id_categorie" >
				<option value="toutes" >toutes catégories
				<option value="1" >Glaciers
				<option value="2" >Montagnes
				</select>
			</td>
			<td width=120 align=center><input type="submit" name="rechercher" value="rechercher"></td>
		</form>
	</tr>
	</table>
</table>	


<?php 

include ("connection.php"); 		
		
/* Lors du chargement de la page, on vérifie si le bouton d'envoi du formulaire a été cliqué */ 
if(isset($_POST['rechercher'])) 
	{ 
	/* Le bouton de recherche a été cliqué : On récupère la valeur envoyée du formulaire */ 

	$nom_recherche = isset($_POST['mot']) ? trim($_POST['mot']) : ""; 
	
	/* On vérifie que la valeur envoyée n'est pas vide */ 
    if(empty($nom_recherche)) 
    	{ 
        	/* La valeur envoyée est vide : on affiche un message d'erreur */ 
        	echo("<p><strong>Veuillez rentrer un mot</strong></p>\n"); 
		}    
	$resultat_recherche = mysql_query("SELECT * FROM tblphotos WHERE Motcle LIKE '%$nom_recherche%'")or exit ('Erreur SQL !'.$resultat_recherche.'<br>'.mysql_error()); 
	$nb_photos=mysql_numrows($resultat_recherche);
	
	$nb_photos_par_page = 12; 
	
	/* Calcul du nombre total de pages : on arrondit à l'entier supérieur (ceil() ) */ 
	$nb_pages = ceil($nb_photos / $nb_photos_par_page);
	$url = "./recherche.php?page="; 
	
	/* On 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); 
	
	
if($nb_pages > 0) 
	{ 
    $barre_nav = ""; 
    if($nb_pages > 1) 
		{ 
        if($page_en_cours > 0) 
			{ 
			$url_2= "./recherche.php?page=";  
			
            for($i = 0; $i < $page_en_cours; $i++) 
				{ 
                $page = $i + 1; 
                $barre_nav .= "<a href=\"". $url_2 . $i ."\" title=\"page ". $page ."\">". $page ."</a> | "; 
				} 
			} 
               $barre_nav .= "<strong>". $page_affichee ."</strong>"; 
       
        if(($page_affichee) < $nb_pages) 
			{ 
			$url_2= "./recherche.php?page=";  
			
	        $nb_suivantes = $nb_pages - ($page_affichee); 
            for($j = ($page_affichee); $j < $nb_pages; $j++) 
				{ 
                $p = $j + 1; 
                $barre_nav .= " | <a href=\"". $url_2 . $j ."\" title=\"page ". $p ."\">". $p ."</a>"; 
				} 
			} 
      
        
        $page_affichee = "Page ". $page_affichee ." sur un total de ". $nb_pages ." pages."; 
        
		} 
    else 
		{ 
        //$page_affichee = "Page ". $page_affichee ." sur un total de ". $nb_pages ." pages."; 
        //$barre_nav .= "page 1/1"; 
        $page_affichee = "Page ". $page_affichee ; 
        //$barre_nav .= "1"; 
	} 
	

	$debut = $page_en_cours * $nb_photos_par_page; 
	 
     $sql_photos = "SELECT * FROM tblphotos  WHERE Motcle LIKE '%$nom_recherche%' LIMIT ". $debut .", ". $nb_photos_par_page .";"; 
                
    $photos = mysql_query($sql_photos)or exit ('Erreur SQL !'.$sql_photos.'<br>'.mysql_error());  
    $nlignes = mysql_num_rows($photos);
	
	//echo "$nlignes";
	
}	
	
	
?> 

<p class="situation"><?php echo($page_affichee); ?></p> 

<table align="center" border="1" width="50%" cellspacing="0" cellpadding="5">
   <tr>
    <td align="center" colspan="2"><?php echo $nb_photos;?>&nbsp;Réponses à votre recherche</td>
   </tr>
</table>    

<?php
$tab=array(); 
$cpt=0; 

?>

<table border=0 cellpadding=5 cellspacing=0 bordercolor=#FFFFFF align=center>

<?php

while ($data=mysql_fetch_array($photos))  
	{  

echo "<td><font size=3><img src=Vignettes/{$data['Ref_Vignette']}  border=0 ></td>"; 

?> 
   
</td>
 
 <?php //affichage des légendes 
    
   $tab[]=$data['Legende_Image'];   
   $cpt++; 
   
   if (($cpt % 4 == 0) || ($cpt==$nlignes)) 
   		{ 
        echo "</tr><tr>"; 
        foreach ($tab as $value) //Parcours les légendes
        	{ 
	        echo "<td align=center>";
	        echo "$value";
	        echo"</center></td>"; 
   			} 
        echo "</tr>"; 
        array_splice ($tab, 0);    // remise a zéro du tableau 
   		} 
	} 
}	

?> 

</table>

<p class="navigation" >

<?php

echo($barre_nav);

?>

</p>

Posté : 13 mai 2006, 07:50
par Cyrano
Salut,
j'ai déjà vu ça quelque part ce système de navigation ;)

Ceci dit, tu annonces que "rien ne se passe", je suis persuadé du contraire et on va le vérifier :
- Est-ce que les liens de la barre de navigation ont une url correspondant à ce que tu attends ?
- Quand tu cliques sur un de ces liens, si l'url est correcte, est-ce que la page se recharge avec les bon paramètres dans la barre d'adresse de ton navigateur ?

Pose-toi les bonnes question pour déterminer à quel endroit de ton script il y a quelque chose qui bafouille.

Pour le titre de ton sujet, je suggère que tu le modifie pour "Navigation page par page : album photos".

Navigation page par page : album photos

Posté : 13 mai 2006, 09:30
par Photographiquement Vôtre
Merci Cyrano,

J'ai vu ce script sur ce foum et vu ta réponse sans doute fait par toi et je t'en remercie car je l'utilise déjà dans sur mon site www.hute-definition.net (Gallrie).

Ma barre de navigation apparait bien avec 6 pages (63 photos chargées)

Quand je clique sur le lien, j'ai bien la bonne URL avec le numero de la page.

Cela doit être du au test isset pour tester la submission du formulaire.

Mais je ne vois pas ou le placer

Merci de m'éclairer

Sur mon site voir lien "Recherche"

Posté : 13 mai 2006, 10:47
par Cyrano
Bon, donc on a quand même quelque chose qui se passe finalement :D

Il faut alors suivre le déroulement logique de ton application : continue à essayer de te poser les bonnes questions :
- quand tu effectues telle action, il se passe (ou devrait se passer) telle chose : deux solution, ça fonctionne ou ça ne fonctionne pas. Si ça fonctionne, on continue sur l'action suivante, sinon, on s'arrête et on cherche en remontant un peu dans le code et on refait le même raisonnement avec l'action précédente jusqu'à tomber sur une action dont le résultat attendu se produit correctement. En arrivant à ce point, tu as cerné de façon beaucoup plus fine l'endroit du code où tu as fait une boulette.

Posté : 13 mai 2006, 12:17
par Photographiquement Vôtre
J'ai continué mon code dans le cas ou on a cliqué sur la barre de navigation.

Je suis bloqué car j'ai besoin de la valeur du mot recherché $nom_recherche pour faire mon Select.

Comment je peux le stocker ou y a t-il une solution plus facile.

Merci

La suite de mon code
else //Si on a pas appuyé sur Submit
   	
   	{
	//on récupère la valeur de la page dans l'URL	
	$Pos=$_GET['page'];
		
	if ($Pos>0)
		{
			
		$barre_nav = ""; 
				
		$page_en_cours    = isset($_GET['page']) ? $_GET['page'] : 0; 
	
		$page_affichee    = ($page_en_cours + 1); 
	
		if($page_en_cours > 0) 
			{ 
			$url_2= "./recherche.php?page=";  
			
           	for($i = 0; $i < $page_en_cours; $i++) 
				{ 
               	$page = $i + 1; 
               	$barre_nav .= "<a href=\"". $url_2 . $i ."\" title=\"page ". $page ."\">". $page ."</a> | "; 
				} 
			} 
        $barre_nav .= "<strong>". $page_affichee ."</strong>"; 
       
        if(($page_affichee) < $nb_pages) 
			{ 
			$url_2= "./recherche.php?page=";  
		    $nb_suivantes = $nb_pages - ($page_affichee); 
           		
	        for($j = ($page_affichee); $j < $nb_pages; $j++) 
				{ 
           		$p = $j + 1; 
           		$barre_nav .= " | <a href=\"". $url_2 . $j ."\" title=\"page ". $p ."\">". $p ."</a>"; 
				} 
			} 
      
           		$page_affichee = "Page ". $page_affichee ." sur un total de ". $nb_pages ." pages."; 
         		
				$debut = $page_en_cours * $nb_photos_par_page; 
	 
			//PROBLEME COMMENT RECUPERER LA VALEUR DE 	$nom_recherche
				
     		$sql_photos = "SELECT * FROM tblphotos  WHERE Motcle LIKE '%$nom_recherche%' LIMIT ". $debut .", ". $nb_photos_par_page .";"; 
                
    		$photos = mysql_query($sql_photos)or exit ('Erreur SQL !'.$sql_photos.'<br>'.mysql_error());  
    		$nlignes = mysql_num_rows($photos);

Posté : 13 mai 2006, 12:35
par Cyrano
Précise ta question : d'où sort cette variable et où en as-tu besoin ? Si tu en as besoin sur la page suivante, la question à poser est "Comment la transmettre ?" non ? Mais bon, c'est à toi d'analyser le code pour savoir quelle question poser et, dans 3 cas sur 4, tu trouveras la réponse tout seul ;)

Posté : 13 mai 2006, 12:57
par Photographiquement Vôtre
Je vais le passer dans l'URL et la reprendre avec Get.

Je te tiens au courant.

Merci de tes conseils

Posté : 13 mai 2006, 13:00
par Cyrano
Je vais le passer dans l'URL et la reprendre avec Get.
Tout simplement, et note bien que tu as trouvé de toi-même une solution satisfaisante, c'est le but du jeu à terme: tu deviens autonome ;)