Demande d'aide pour affichage page par page

Eléphant du PHP | 287 Messages

26 janv. 2009, 17:26

Bonjour,
Depuis plusieurs jours je me bats pour afficher page par page !
Est-ce que quelqu'un peut m'aider ?
Voici mon code :
<?php
/*On apelle la variable*/
$choix_pays=$_GET['pays'];

/*Requete mysql*/
echo '<div class="centrer">';
$info_pays = mysql_query('SELECT DISTINCT nom,drapeaux FROM pays WHERE pays.nom="'.$choix_pays.'"');

//Avec cette boucle, on affiche le nom du pays
while ($affichage = mysql_fetch_array($info_pays) )     
{  
		echo "<br/>";
		echo '<li class="pays"><img src="../images/pt_logo_photo_01.png" /> Vous êtes ici <img src="../images/fleche_01.png" /> Photos <img src="../images/fleche_01.png" />  '.$choix_pays.'';
		echo ' <img src="../drapeaux_pt/'.$affichage['drapeaux'].'" width="16" height="11"></li>';
		echo "<br/>";
		echo '<li class="pays">Pour agrandir la photo, cliquez sur l\'image</li>';
		echo "<br/>";
		}
?>
<br />
<?php
// on se connecte à MySQL 
$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());

// on sélectionne la base
mysql_select_db('vol',$db);
 // On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 24; // Essayez de changer ce nombre pour voir :o)

// On récupère le nombre total de messages
$retour = mysql_query('SELECT COUNT(*) AS image FROM photo');
//$donnees = mysql_fetch_array($retour);$totalDesMessages = $donnees['photo'];
$donnees = mysql_fetch_array($retour);$totalDesMessages = $donnees['image'];
// On calcule le nombre de pages à créer
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
?>

<?php
$info_pays = mysql_query('SELECT DISTINCT nom,drapeaux FROM pays WHERE pays.nom="'.$choix_pays.'"');

if (isset($_GET['page']))
{
        $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
        $page = 1; // On se met sur la page 1 (par défaut)
}
 
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
 
$reponse = mysql_query('SELECT DISTINCT image FROM photo LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
 
if(isset($_GET["pays"])) 
{

/*requete mysql*/
$image = mysql_query('SELECT DISTINCT photo.image as image, photo.titre_image as titre_image,  photo.ville as ville, pays.nom as pays FROM photo LEFT JOIN pays ON photo.id_pays = pays.id WHERE pays.nom="'.$_GET['pays'].'" ORDER BY ville ASC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage .'')or die(mysql_error());

while ($affichage = mysql_fetch_assoc($image) )     
{    

	echo '<div class="img">';
    echo $affichage['ville']; 
	echo '<a href="aff_gd_photo.php?image='.$affichage['image'].'"><img src="../upload/'.$affichage['image'].'" width="190" height="143"></a>';   
    echo "<br />";
    echo $affichage['titre_image']; 
    echo "</div>";
	echo "</p>";  
}
?>
</p>
<?php 
echo 'Autres pages : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
echo '<a href="aff_photo_pays.php?pays='.$_GET['pays'].'&page=' . $i . '">' . $i . '</a> ';
}
}
/*Deconnexion de MySQL*/
mysql_close();	  
?>
Je pense que mon problème vient du SELECT COUNT, mais j'arrive pas à trouver la solution
Merci d'vance

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

26 janv. 2009, 18:01

Peux-tu donner plus d'infos sur le problème que tu rencontres ? Qu'est ce que ça fait concrétement, et qu'est ce que ça devrait faire ?

Ton SELECT COUNT est très bien et il te retourne le nombre d'enregistrements dans ta table...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 447 Messages

26 janv. 2009, 18:04

J'ai pas la réponse à ton problème, mais déjà y a un truc que j'capte pas, c'est pourquoi tu mets une connection à ta base après ta 1ère requête...
<br />
<?php
// on se connecte à MySQL 
$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
Logiquement si tu t'es pas connecté avant, ta 1ère requête ne peux pas marcher...
Probably (only a) Human Problem?

Eléphant du PHP | 287 Messages

26 janv. 2009, 20:40

Pour répondre à vos questions :
- J'ai bien le nombre de photos demandées (24), mais les pages suivantes sont vierges.
- Pour les pays où je n'ai pas 24 photos, j'ai tjs le même nombre d'autres pages qui s'affiche.
J'espère avoir répondu

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

27 janv. 2009, 09:17

Est-ce qu'il ne manquerait pas la notion de pays dans ton SELECT COUNT() ?

En effet, si tu as 100 photos en base, mais seulement 2 pour le pays concerné, tu vas faire ton calcul pour 5 pages (4*24 + 1*4), alors qu'au final il n'y en aura qu'une seule a afficher avec seulement 2 photos...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 287 Messages

27 janv. 2009, 09:47

Oui effectivement c'est la notion de pays que je n'arrive pas à mettre en place. Mon select count comptabilise toutes les photos que j'ai en base.

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

27 janv. 2009, 15:44

Bah tu reprends simplement ta requête mysql qui te retourne tes résultats, et tu comptes les enregistrements au lieu de les retourner :
$sql = "SELECT COUNT(*) AS image
  FROM photo LEFT JOIN pays ON photo.id_pays = pays.id 
  WHERE pays.nom='".$_GET['pays']."'";
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 287 Messages

27 janv. 2009, 23:54

OK merci ! pardon pour ma réponse tardive !
Ca fonctionne