Affichage page par page

Résolu
Bonjour,
J'affiche des images ou le chemin est stocké dans ma base de données, j'affiche également son nom et le commentaire, jusque la tout va bien, sauf que j'ai mis un code en place pour permmettre de mettre que 2 images par pages, et avoir un lien me permettant de voir les autres.
C'est à dire que j'aurais page suivante et précédente et que sur chaque page j'aurais deux images... Voici mon code :
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
	       <link rel="stylesheet" href="style.css" type="text/css" />

<?php
//connection a la BDD
	include('connection.php');
	include('index.php');
	

	
	// Séléction les noms des rubriques dans l'ordre alphabétique
	$req = ("SELECT NomRubrique, NumeroRubrique FROM rubri order by NomRubrique asc");
	// Execution de la requete
	$result = mysql_query($req);
	?>
	<!-- Création de la liste déroulante -->
	Quelle rubrique voulez vous afficher ? 
	<form action="rubrique.php" method="POST">
	<select name="choix">
	<option value="0" selected="selected">Choissisez votre rubrique </option>

	
	
	<?php
	while ($donnees = mysql_fetch_array($result))
					{
					// Affichage du nom de la rubrique
					?>
						
						<?php
						echo "<option value = '$donnees[NumeroRubrique]'>".$donnees['NomRubrique']. "</option>";
					}

	?>
	</select>
	<input type="submit" name="button"> 
	</form>
<br>
<?php




if (isset ($_POST['choix']))
	{
				// Initialisation de la variable nombre, pour savoir le nombre d'image à afficher/page
				$nombre = 2;
				// Initialisation de limite à 0
				if (!isset($limite)) $limite = 0; 
				$path_parts = pathinfo($_SERVER['PHP_SELF']);
				$page = $path_parts['basename'];
				// Requete sql permettant de compter le nombre d'enregistrement dans la table imagereduite
				$select = "SELECT count(NumeroImage) FROM imagereduite";
				// Execution requete
				$resultatselect = mysql_query($select);
				// Nombre d'enregistrement
				$row = mysql_fetch_row($resultatselect);
				$nb_resultat = $row[0];
				$limitesuivante = $limite + $nombre;
				$limiteprecedente = $limite - $nombre;
if($limite != 0) 
{
				echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a>';
}

if($limitesuivante < $nb_resultat) 
{
			echo '<a href="'.$page.'?limite='.$limitesuivante.'">Page Suivante</a>';
}
	$x = $_POST['choix'];
	//echo $x;
	$req = "SELECT * FROM rubri WHERE NumeroRubrique = '".$x."'";
	// Execution de la requete
	$result=mysql_query($req);
	// Parcours résultat
	$requete = "SELECT LienImage ,ImageAgrandie, CommentaireImage, NomImage FROM imagereduite WHERE NumeroRubrique = '".$x."' ORDER BY NomImage ASC LIMIT  '".$limite."','".$nombre."'";
		// Execution de la requete
		$resultat = mysql_query($requete);
		
		while ($donnee = mysql_fetch_array($resultat))
		{

			// Affichage des photos reduites et agrandies

		echo '<a href="photos/agrandies/'.$donnee[1].'" rel="lightbox"><img border="0" src="photos/reduites/'.$donnee[0].'">;</a>';

		
			?>
			
			<br><br>
			<font face="Papyrus" size = "3px">
			
			<table>
		
<tr>
			<td bgcolor="blue"><?php
			echo 'Commentaire : '. $donnee[2];
			?>
			<br></td></tr>
</tr>
			<td><?php 
			echo 'Nom : ' .$donnee[3];
			?>
			</td>
			</tr>
			</font>
			</table>
			<?php
		}
	}
else
{
	//Requete séléction rubrique
	$req = "SELECT * FROM rubri ;";
	// Execution de la requete
	$result=mysql_query($req);
	// Parcours résultat

	while ($row= mysql_fetch_array($result))
	{

				
		// Deux colonnes qui correspondent à LienImage et à ImageAgrandie
		echo $row[0]." ".$row[1];
		// Requete permettant l'affichage des images reduites et agrandies
		
		
	$select = "SELECT * FROM imagereduite";
	$res = mysql_query($select);
	$nb_images = mysql_num_rows($res);
	echo $nb_images;
	
	
		$requete = ("SELECT LienImage ,ImageAgrandie FROM imagereduite WHERE NumeroRubrique = ".$row[0]);
		// Execution de la requete
		$resultat = mysql_query($requete);
		
		while ($donnee = mysql_fetch_array($resultat))
		{
			
			// Affichage des photos reduites et agrandies
			echo '<a href="photos/agrandies/'.$donnee[1].'" rel="lightbox"><img border="0" src="photos/reduites/'.$donnee[0].'">;</a>';

		}
	
		
	}

}


Mon erreur se trouve sur le mysql_fetch array celui ci
		while ($donnee = mysql_fetch_array($resultat))

Merci pour votre aide
Configuration: Windows Vista
Firefox 3.0.5

17 réponses

  1. Pourquoi ne mets tu pas un LIMIT dans ta requete :
     LIMIT x, 2; ou x = $numpage*2+1

    pour qu'il y est une page suivante, il suffit que $limite > $numpage*2+1
    => $numpage < ($limite-1)/2

    si la 1ère page est la page 0 sinon remplacer $numpage par ($numpage-1)
    1. J'ai bien une limite
      	$requete = "SELECT LienImage ,ImageAgrandie, CommentaireImage, NomImage FROM imagereduite WHERE NumeroRubrique = '".$x."' ORDER BY NomImage ASC LIMIT  '".$limite."','".$nombre."'";
      


      Merci pour votre réponse aussi rapide.
      1. Désolé, je n'avais pas vu.
        Par contre on ne met pas d'apostrophe pour les valeurs de limite.
        1. Oui en effet, merci
          l'erreur est corrigé mais le seul petit truc c'est que quand je clique sur suivant pour voir les autres images, il me redirige vers ma page ou toute les photos sont affichés.
          1. Rajoute
            "&choix=".$_POST['choix']
            dans tes liens.

            Edit : avec ". c'est mieux
            1. Merci pour vos réponses,
              Vous me dite de mettre $_POST['choix'] dans mes liens, mais c'est à dire ?
              1. Comme ça :
                echo '<a href="'.$page.'?limite='.$limiteprecedente.'&choix='.$_POST['choix'].'">Page précédente</a>';


                echo '<a href="'.$page.'?limite='.$limitesuivante.'&choix='.$_POST['choix'].'">Page Suivante</a>';


                Par contre, maintenant, choix peut être passer en GET ou en POST donc il faudrait tester en début de page par exemple :
                if (isset ($_POST['choix'])) $monChoix = $_POST['choix'];
                elseif (isset ($_GET['choix'])) $monChoix = $_GET['choix'];
                

                Et remplacer après dans le code $_POST['choix'] par $monChoix
                1. 
                         <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                  	   <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
                  	       <link rel="stylesheet" href="style.css" type="text/css" />
                  
                  <?php
                  //connection a la BDD
                  	include('connection.php');
                  	include('index.php');
                  	
                  if (isset ($_POST['choix'])) $monChoix = $_POST['choix'];
                  elseif (isset ($_GET['choix'])) $monChoix = $_GET['choix'];
                  
                  	
                  	// Séléction les noms des rubriques dans l'ordre alphabétique
                  	$req = ("SELECT NomRubrique, NumeroRubrique FROM rubri order by NomRubrique asc");
                  	// Execution de la requete
                  	$result = mysql_query($req);
                  	?>
                  	<!-- Création de la liste déroulante -->
                  	Quelle rubrique voulez vous afficher ? 
                  	<form action="rubrique.php" method="POST">
                  	<select name="choix">
                  	<option value="0" selected="selected">Choissisez votre rubrique </option>
                  
                  	
                  	
                  	<?php
                  	while ($donnees = mysql_fetch_array($result))
                  					{
                  					// Affichage du nom de la rubrique
                  					?>
                  						
                  						<?php
                  						echo "<option value = '$donnees[NumeroRubrique]'>".$donnees['NomRubrique']. "</option>";
                  					}
                  
                  	?>
                  	</select>
                  	<input type="submit" name="button"> 
                  	</form>
                  <br>
                  <?php
                  
                  
                  
                  
                  if (isset ($monChoix))
                  	{
                  		$x = $monChoix;
                  				// Initialisation de la variable nombre, pour savoir le nombre d'image à afficher/page
                  				$nombre = 1;
                  				// Initialisation de limite à 0
                  				if (!isset($limite)) $limite = 0; 
                  									    if(isset($_GET['limite'])) 
                  
                          $limite=$_GET['limite'];
                      else   $limite=0;
                  				$path_parts = pathinfo($_SERVER['PHP_SELF']);
                  				$page = $path_parts['basename'];
                  				// Requete sql permettant de compter le nombre d'enregistrement dans la table imagereduite
                  				$select = "SELECT count(NumeroImage) FROM imagereduite";
                  				// Execution requete
                  				$resultatselect = mysql_query($select);
                  				// Nombre d'enregistrement
                  				$row = mysql_fetch_row($resultatselect);
                  				$nb_resultat = $row[0];
                  				$limitesuivante = $limite + $nombre;
                  				echo $limitesuivante;
                  				$limiteprecedente = $limite - $nombre;
                  
                  if($limite != 0) 
                  {
                  				echo '<a href="'.$page.'?limite='.$limiteprecedente.'&choix='.$monChoix.'">Page précédente</a>';
                  }
                  
                  if($limitesuivante < $nb_resultat) 
                  {
                  	
                  			echo '<a href="'.$page.'?limite='.$limitesuivante.'&choix='.$monChoix.'">Page Suivante</a>';
                  }
                  
                  
                  	$x = $_POST['choix'];
                  	//echo $x;
                  	$req = "SELECT * FROM rubri WHERE NumeroRubrique = '".$x."'";
                  	// Execution de la requete
                  	$result=mysql_query($req);
                  	// Parcours résultat
                  	$requete = "SELECT LienImage ,ImageAgrandie, CommentaireImage, NomImage FROM imagereduite WHERE NumeroRubrique = '".$x."' ORDER BY NomImage ASC limit ".$limite.",".$nombre."";
                  
                  
                  		// Execution de la requete
                  		$resultat = mysql_query($requete) or die($req . '<br />' . mysql_error());
                  
                  		
                  		while ($donnee = mysql_fetch_array($resultat))
                  		{
                  
                  			// Affichage des photos reduites et agrandies
                  
                  		echo '<a href="photos/agrandies/'.$donnee[1].'"><img border="0" src="photos/reduites/'.$donnee[0].'">;</a>';
                  
                  		
                  			?>
                  			
                  			<br><br>
                  			<font face="Papyrus" size = "3px">
                  			
                  			<table>
                  		
                  <tr>
                  			<td bgcolor="blue"><?php
                  			echo 'Commentaire : '. $donnee[2];
                  			?>
                  			<br></td></tr>
                  </tr>
                  			<td><?php 
                  			echo 'Nom : ' .$donnee[3];
                  			?>
                  			</td>
                  			</tr>
                  			</font>
                  			</table>
                  			<?php
                  		}
                  	}
                  
                  


                  Mon code ressemble à ça maintenant, l'erreur que j'avais auparavant n'es plus d'actualité,
                  seulement maintenant quand je clique sur suivant aucune erreur s'affiche, mais l'image n'apparaît pas.
                  et la limite est = 2 lorsque je clique sur suivant
                  1. pourquoi $x = $monChoix ? ? Tu as ta valeur dans $monChoix et tu ne l'écrases pas.

                    Petite question qui a peut-être un rapport : dans
                    if (isset ($monChoix))
                    tu fais :
                    $select = "SELECT count(NumeroImage) FROM imagereduite";
                    Est-ce que ça compte toutes les images de la catégorie choisie ou bien toutes les images ?
                    Si ça compte toutes les images, c'est peut-être que tu n'as pas assez d'images réduites pour la 2ème page.
                    1. Ca me compte toutes les images. J'ai créer une rubrique vacances, a laquelle j'ai rajoutée deux photos.
                      Etant donné que ma limite est fixé à une par page il devrait m'afficher l'autre image quand je clique sur suivant.
                      Merci en tout cas de rester patient et de continuer de m'aider
                      1. Ca ne devrait pas compter que les images de la catégorie ?

                        url de la 2ème page ( où l'image n'apparait pas ) est-elle bonne ?

                        echo $requete = "SELECT LienImage ,ImageAgrandie, CommentaireImage, NomImage FROM imagereduite WHERE NumeroRubrique = '".$x."' ORDER BY NomImage ASC limit ".$limite.",".$nombre;

                        pour vérifier $limite et $nombre
                        1. En effet ça devrait m'afficher les images selon la rubrique choisie erreur corrigée je vous en remercie :)
                          L'url de ma seconde page est celle ci : ?limite=1&choix=6
                          La limite est toujours 0,1 !!
                          1. J'ai fais le echo de la requête pour la premiere page il voit bien que c'est la rubrique numéro 6 mais lorsque je clique sur suivant il ne trouve plus le numéro de la requête! AU SECOURS!
                            1. Tu peux faire un test en enlevant le limite de la requête pour vérifier que tu affiches bien toutes les images sur la 1ère page.

                              Si ça marche, essaye de tester la requête directement sous mysql pour vérifier que tu obtiens bien la (ou les) lignes correspondantes.

                              Edit : donc dans l'url, tu n'as pas choix=6 ?
                              ou alors c'est $monchoix = $_GET["choix"] qui ne marche pas.

                              Re Edit : c'est ton $x qui pose problème, enlève le et utilise $monChoix
                              et cette ligne est à supprimer : $x = $_POST['choix'];
                              1. J'ai fait ce que vous m'avez demandez
                                Ca affiche bien toutes mes images, et le test dans mysql fonctionne....
                                1. J'avais édité juste avant donc tu n'as peut-être pas vu :

                                  c'est ton $x qui pose problème, enlève le et utilise $monChoix
                                  et cette ligne est à supprimer : $x = $_POST['choix'];
                                  1. MERCI MERCI MERCI !!
                                    Ça marche !!!!!!!!!!!!!
                                    Je vous remercie pour avoir répondu aussi vite, et désolé si je vous ai pris un bout de l'après midi pour résoudre mon problème.
                                    Mais en tout cas merci vous m'avez vraiment bien aidée grâce à vos explications concrètes et à votre calme.
                                    Bonne fin de journée.