Limiter affichage page par page

Eléphant du PHP | 287 Messages

02 déc. 2011, 10:49

J'ai 9 enregistrements dans ma BDD, mais je veux afficher les 6 derniers sur 2 pages
J'ai essayé de mettre un LIMIT dans mysql_query('SELECT COUNT(*) AS nom_compagnie_avion FROM avion LIMIT O,5');, mais sans réussir !!
Mon code :
$nombreDeMessagesParPage = 3;
$retour = mysql_query('SELECT COUNT(*) AS nom_compagnie_avion FROM avion');
$donnees = mysql_fetch_assoc($retour);
$totalDesMessages = $donnees['nom_compagnie_avion'];
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);


if (isset($_GET['page']))
{
  $page = $_GET['page'];
}
else
{
  $page = 1;
}

$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; 

$reponse = mysql_query('select * from avion LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
 
    echo '<br / >';
	echo '<div id="page">';
 	echo 'Pages : ';
Merci de votre aide

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

02 déc. 2011, 10:59

heu ou mais non :)

count() permet de compter, tu n'aura donc pas les noms.
un select count(*) from avion; donne le nombre total de tuple dans la table.
la limit est donc mal employée ici (ligne2)

par contre le second select semble correct :)

après il te manque l'affichage ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 287 Messages

02 déc. 2011, 11:05

J'ai tenté de supprimer le cont(*) (puisqu'il compte tout) et de mettre LIMIT, mais dans ce cas mon code ne fonctionne plus !

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

02 déc. 2011, 11:10

c'est l'inverse, garde le count et vire le limit (seulement dans a 1ère requête) ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 287 Messages

02 déc. 2011, 11:22

J'ai modifier le code comme ceci :
$nombreDeMessagesParPage = 1;
$retour = mysql_query('SELECT COUNT(*) AS nom_compagnie_avion FROM avion');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nom_compagnie_avion'];
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);


if (isset($_GET['page']))
{
  $page = $_GET['page'];
}
else
{
  $page = 1;
}

$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; 

//$reponse = mysql_query('select * from avion LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
$reponse = mysql_query('select * from avion LIMIT 1');
Donc 1 affichage par page, mais toujours le même sur les 9 pages

ViPHP
xTG
ViPHP | 7331 Messages

02 déc. 2011, 11:30

Utilises la requête commentée et cela ira déjà mieux. ;)

Eléphant du PHP | 287 Messages

02 déc. 2011, 11:32

C'est quoi une requête commentée ?

Eléphanteau du PHP | 15 Messages

02 déc. 2011, 11:42

xTG parle de la requête que tu as mis en commentaire dans le précédent code que tu as as cité, à savoir:

remplacer ta requête:
$reponse = mysql_query('select * from avion LIMIT 1');
Par celle que tu avais mis en commentaire:
$reponse = mysql_query('select * from avion LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
;)

@+

Eléphant du PHP | 287 Messages

02 déc. 2011, 11:52

Ca revient à ce que j'avais au début... c'est à dire que ça affiche tous les résultats

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

02 déc. 2011, 11:56

c'pas possible si $nombreDeMessagesParPage reste égale à trois :)

affiche la requête générée et test la avec phpmyadmin (par exemple)
$sql = 'select * from avion LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage;
echo $sql;
$reponse = mysql_query($sql);
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 287 Messages

02 déc. 2011, 12:13

Le résultat est le suivant :
select * from avion LIMIT 3, 3

Peut-être que le problème vient de la suite alors :
    echo '<br / >';
	echo '<div id="page">';
 	echo 'Pages : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo ' <a class="nbr_page" href="avion.php?page=' . $i . '">' .($i == $page?'<strong>'.$i.'</strong>':$i). '</a> |';
}
	echo '</div>';
	
	while ($donnees = mysql_fetch_assoc($reponse) )
{

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

02 déc. 2011, 12:28

poste le code complet (hors mis les host, user et mdp de connexion au sgbd et autre trucs sensible du genre) cela ira plus vite ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 287 Messages

02 déc. 2011, 12:44

Voilà mon code complet
$nombreDeMessagesParPage = 3;
$retour = mysql_query('SELECT COUNT(*) AS nom_compagnie_avion FROM avion');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nom_compagnie_avion'];
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);


if (isset($_GET['page']))
{
  $page = $_GET['page'];
}
else
{
  $page = 1;
}

$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; 

$reponse = mysql_query('select * from avion LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
 
    echo '<br / >';
	echo '<div id="page">';
 	echo 'Pages : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo ' <a class="nbr_page" href="avion.php?page=' . $i . '">' .($i == $page?'<strong>'.$i.'</strong>':$i). '</a> |';
}
	echo '</div>';
	
	while ($donnees = mysql_fetch_assoc($reponse) )
{
?>
<br />
<table class="td_avion" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
  <tr>
    <td class="td_logo_avion" valign="top">
<?php
echo '<a href="'.$donnees['lien_web_compagnie_avion'].'" target="_blank"><img src="../logos/'.$donnees['logo_compagnie_avion'].'" width="80"/></a>';
?></td>
    <td class="td_description_avion" valign="top">
<?php
echo '<img src="../images/01.png"> ';
echo $donnees['nom_compagnie_avion'];
echo '<br/>';
echo ''.nl2br ($donnees['description_compagnie_avion']).'';
echo '<br>';
echo '<a href="'.$donnees['lien_web_compagnie_avion'].'" target="_blank"><img src="logo_billet_avion_01.png"></a>';
?></td>
  </tr>
</table>

Eléphant du PHP | 287 Messages

02 déc. 2011, 15:37

Bon je ne trouve tjs pas la solution !
Si je réflechis nul part j'indique le nombre maxi à afficher, c'est à dire 6

Testé ça mais sans succès :
$totalDesMessages = 6;

Eléphant du PHP | 287 Messages

19 déc. 2011, 16:41

Je reviens vers vous parce que j'ai toujours pas la solution à mon problème !!!