Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 11h56   #1
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
Par défaut affichage page par page

Bonjour,
je viens de créer un système de news avec u nombre limité de news par page.
Maintenant j'aimerais savoir comment mettre en place un systeme de page qui afficherait les news suivantes lorsque je cliquerait sur la page 2 et etc
Mais malheureusement je n'ai aucune idée de comment je pourrais faire...
Quelqu'un pourrait m'aider ?

Voila mon code :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
 
 
 
 
<?php
session_start();
 
require"admin/config.php";
mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
mysql_select_db(DB_BDD);
 
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass']))
{
	extract($_POST);
	$pass=sha1($pass);
 
 
	$sql = " SELECT id FROM users WHERE login='$login' and pass='$pass'";
	$req = mysql_query($sql) or die(mysql_error());
 
		if(mysql_num_rows($req)>0)
		{	
			$data= mysql_fetch_assoc($req);
			$_SESSION['Auth'] = array(
			'login' => $login,
			'pass' => $pass);
 
 
				header('Location:admin/indexadmin.php');
 
		}
		else
		{	
			header('location:galerie.php');
		}
 
}
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Paris Saint Germain</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<link rel="stylesheet" type="text/css" href="feuillestyle.css" /> 
</head>
 
 
 
 
<body>
<div id="site">
 
<div id="header">
 
 
</div>
 
<div id="main">
<div id="side">
 
<ul>
<li class="name"><a href="index.php">NEWS</a></li>
<li>Toutes les news pour vous tenir au courant de l'actu de manière aisée !</li>
</ul>
 
<ul>
<li class="name"><a href="galerie.php">GALERIE</a></li>
<li>Accéder en un clic à la galerie de votre équipe favorite.</li>
</ul>
 
<ul>
<li class="name"><a href="palmares.php">PALMARES</a></li>
<li>Le PSG ne cesse d'accumuler des titres année après année.
Vous ne savez plus vous y retrouver tellement il y en a ? 
Cliquez ici !</li>
</ul>
 
<ul>
 
<li>
 
<form method="post" action="index.php">
 
 
Pseudo :<input type="text" name="login" >
Mot de passe :<input type="password" name="pass" >
<input type="submit" value="OK" >
 
</form>
 
 
  <form action='deconnect.php' method='POST' >
        <input name='cacher' type='hidden' >
        <input name='quitter' type='submit' value='Déconnexion'>
</form>         
 
</li>
</ul>
 
</div>
 
 
<div id="contenu">
 
<div id="presentation">
 
 
							    <?php
 
 
 
 
 
 
 
# // on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(*) FROM news';  
 
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
# // on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat); 
# // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut']))
 $_GET['debut'] = 0; 
 
 $nb_affichage_par_page = 2; 
 
 
 
 
 
 
$dossier = 'images/';
 
# // Préparation de la requête avec le LIMIT 
$sql='SELECT n.`id`, n.`titre`, n.`contenu`, n.`date`, n.`image`, COUNT(c.`id`) AS nb_comments
FROM `news` AS n
LEFT JOIN `comment` AS c ON n.`id` = c.`news_id`
GROUP BY n.`id`
ORDER BY n.`date` DESC
LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
 
$req = mysql_query($sql) or die(mysql_error());
while($data=mysql_fetch_assoc($req))
{
    $id=$data["id"];
    $filename=$dossier.$data['image'];
 
    echo '<img src="'.$filename.'" alt="" />';
    echo "<p>{$data["titre"]} -- ";
   echo "<p>".Tronquer_Texte($data["contenu"],  100)."<br><a href='detail news.php?id={$data["id"]}'>Suite de  l'article</a></p>";
    echo "<p align=\"right\">".date("j/n/Y G:i",strtotime($data["date"]))."</p>";
    echo "<p><a href=\"formcom.php?id={$data["id"]}\">  Cliquez ici pour ajouter un commentaire </a></p>";
    echo" Commentaire(s) ({$data["nb_comments"]})<br><br><br><br><br>";
 
 
 
 
}
?>
 
 
 
 
 
</div>
 
 
 
 
 
 
 
 
 
 
 
<div id="footer">
<p>Design By </p>
</div>
 
</body>
</html>

Merci d'avance !
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 13h28   #2
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 405
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2006
Messages : 405
Points : 531
Points : 531
Envoyer un message via MSN à amoiraud
Et bien tu ajoute une requête qui récupère le nombre total de news, tu divise se nombre par le nombre de news que tu veux afficher par page ce qui te donnera un nombre de pages :

Code :
1
2
 
$nbPages = ceil($nbNews / $nbNewsParPage);
Ensuite dans les liens du style page suivante tu rajoute un parametre get du type news.php?page=($pageActuelle + 1)
Une fois que tu a récupéré la page à afficher, tu ajoute un limit à ta requete qui récupère la liste des news :

Code :
1
2
3
 
$limitStart = $pageActuelle * $nbNewsParPage;
$sql = mysql_query('Select * From news ORDER BY date LIMIT ' . $limitStart . ', ' . $nbNewsParPage);
Voila en gros ce qu'il faut faire, je vais pas te pondre tout le code je t'ai mis le principal mais si t'a des questions j'y répondrai

EDIT : J'avais pas vu que tu avais déjà préparé les requêtes pour la pagination, il te reste donc à gérer les liens page suivante / précédente comme je te l'ai indiqué
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 15h32   #3
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
J'ai essayé en m'aidant de ce que tu m'as dit et de divers tuto sur internet de me débrouiller mais je ne m'en sors pas...

voilà mon code pour le moment :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
  <?php					
 
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];
 
# // on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(id) FROM news';
 
 
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
# // on récupère le nombre d'éléments à afficher
$row = mysql_fetch_row($resultat); 
$total = $row[0];
# // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($debut))
{ 
	$debut = 0; 
}
 
 
 
 
 
 
 $nb_affichage_par_page = 2; 
 
 
 
$limitesuivante = $debut + $nb_affichage_par_page;
$limiteprecedente = $debut - $nb_affichage_par_page;
 
if($debut != 0) 
{
    echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a>';
}
if($debut != 0) {
    echo '<form action="'.$page.'" method="post">';
    echo '<input type="submit" value="précédents">';
    echo '<input type="hidden" value="'.$limiteprecedente.'" name="limite">';
    echo '</form>';
}
 
 
if($limitesuivante < $total) {
    echo '<a href="'.$page.'?limite='.$limitesuivante.'">Page Suivante</a>';
}
//Ou bien affichage d'un bouton formulaire 
if($limitesuivante < $total) {
    echo '<form action="'.$page.'" method="post">';
    echo '<input type="submit" value="suivants">';
    echo '<input type="hidden" value="'.$limitesuivante.'" name="limite">';
    echo '</form>';                
}
 
 
#// $sql2 = 'SELECT count(id) FROM news';    $nbNews=  mysql_query($sql2) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());     $nbPages = ceil($nbNews / $nb_affichage_par_page);	
 
 
 
$dossier = 'images/';
 
# // Préparation de la requête avec le LIMIT 
$sql='SELECT n.`id`, n.`titre`, n.`contenu`, n.`date`, n.`image`, COUNT(c.`id`) AS nb_comments
FROM `news` AS n
LEFT JOIN `comment` AS c ON n.`id` = c.`news_id`
GROUP BY n.`id`
ORDER BY n.`date` DESC
LIMIT '.$debut.','.$nb_affichage_par_page;
 
 
$req = mysql_query($sql) or die(mysql_error());
while($data=mysql_fetch_assoc($req))
{
    $id=$data["id"];
    $filename=$dossier.$data['image'];
 
    echo '<img src="'.$filename.'" alt="" />';
    echo "<p> {$data["titre"]} -- ";
   echo "<p>".Tronquer_Texte($data["contenu"],  100)."<br><a href='detail news.php?id={$data["id"]}'>Suite de  l'article</a></p>";
    echo "<p align=\"right\">".date("j/n/Y G:i",strtotime($data["date"]))."</p>";
    echo "<p><a href=\"formcom.php?id={$data["id"]}\">  Cliquez ici pour ajouter un commentaire </a></p>";
    echo" Commentaire(s) ({$data["nb_comments"]})<br><br><br><br><br>";
 
 
 
 
}
?>
je suis totalement perdu et je ne comprends pas ce que signifie le

Code php :
1
2
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];

Je ne trouve pas d'explication compréhensible...

Si tu pouvais m'aider

Merci d'avance !
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 02h18   #4
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
Code :
1
2
3
4
5
 
// recupère et découpe l'adresse de la page courante donc celle de ton fichier
$path_parts = pathinfo($_SERVER['PHP_SELF']);
// ne prend que le nom genre mapage.php
$page = $path_parts['basename'];
je pense que tu confond page et limites pour ta requête
pour les pages c'est + ou - 1

le début pour la requête c'est la page courante * la quantité

j'ai pas vu dans ton code
Code :
1
2
3
 
// il faut multiplier le numero de page avec la quantité par page sinon tu n'aura pas le bon chiffre
$limitStart = $begin*$nb_affichage_par_page;
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 13h20   #5
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
C'est bon j'ai trouvé la solution !
Merci de ton aide, en effet je ne prenais pas le bon chemin...
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h31.


 
 
 
 
Partenaires

Hébergement Web