Page 1 sur 2

pagination

Posté : 22 juil. 2014, 16:37
par yoann38
Salut, voilà mon petit problème j'essai de faire une pagination sur mes articles mais ça ne marche pas même mon script permettant l'affichage de maximum 6 articles.
Mon code:
<!-- ********************************** -->
                              <div id="bloc_page">
									  <?php 
			while($loisirs=mysql_fetch_array($resultat)) {   ?>
			<?php $date_sortie = DateTime::createFromFormat('Y-m-d', $loisirs['date_debut_sortie']);?>
        	<?php $date = DateTime::createFromFormat('Y-m-d H:i:s', $loisirs['date_debut_sortie']);?>
        	<?php $datef = DateTime::createFromFormat('Y-m-d H:i:s', $loisirs['date_fin_sortie']);?>
        	<?php $diff = floor(($datef->getTimestamp() - $date->getTimestamp())/86400) ;?>
                             <!-- Annonce -->                
            <div class="col-md-4 col-sm-6 marg15">
                <div class="wrap">
                    <a href="add_favoris.php?idfav=<?php echo $loisirs['id_loisirs'];?>"><div class="corner">FAVORIS</div></a>
                    <a href="annonce_zoom.php?id=<?php echo $loisirs['id_loisirs'];?>" >
			<?php if(!empty($loisirs['photo'])){?><img class="img-responsive" src="img/annonce/<?php echo $loisirs['photo'];?>" ><?php }?></a>     
                    <h3><?php echo $loisirs['titre']; ?></h3>
                    <p class="desc"><?php echo substr($loisirs['description'], 0, 150).'...'; ?></p>
                    <hr>
                    <div class="utiles">
                                <p class="pull-right pad10"><?php echo ucfirst($jour[$date->format('N')]); ?> <?php echo $date->format('d'); ?> <?php echo ucfirst($mois[$date->format('n')]); ?> </p>
                                <p class="city pull-left pad10">
                                 <i class="fa fa-map-marker"></i> <?php echo $loisirs['city'];?>
                                </p>
                            </div>

                   <a href="annonce_zoom.php?id=<?php echo $loisirs['id_loisirs'];?>" > <input class="look pull-right" type="button" value="CONTINUER"></a> 
                </div>  
            </div>
             <?php }?>
                  
        <!-- pagination-->         
        <div class="pagination">Pages :
		<?php  
			$listParam = '';
			foreach($_GET as $key=>$param){
				if($key != 'page'){
					$listParam .= '&'.$key.'='.$param;
				}
			}
			
			for($i=1; $i<=$nbPages; $i++){
			     if($i==$pageActuelle) {
			         echo ' <span class="page active">'.$i.'</span> '; 
			     }else{
			          echo '<div class="page"><a href="sortie.php?page='.$i.$listParam.'">'.$i.'</div></a> ';
			     }
			}
			?> 
		</div>  
		</div>
et l'autre page ( que j'apele en include sur la premiere page ).
<?php
$nbParPage = 5;
// la ya du code et du code
$calculPage =mysql_query($requete);
$nbTotal = mysql_num_rows($calculPage);
$nbPages = ceil($nbTotal/$nbParPage);

if(isset($_GET['page'])){
	$pageActuelle=intval($_GET['page']);

	if($pageActuelle>$nbPages){
		$pageActuelle=$nbPages;
	}
}else {
	$pageActuelle=1; 
}

$startLimit=($pageActuelle-1)*$nbParPage;
$resultat=mysql_query($requete." limit ".$startLimit.",".$nbParPage);

Re: pagination

Posté : 22 juil. 2014, 16:42
par xTG
Il y a quoi dans $requete ?

Re: pagination

Posté : 22 juil. 2014, 16:51
par yoann38
Je me suis dis que le code complet était surement mieux pour bien comprendre :)

<?php
$nbParPage = 5;

$lstDep = array();
$departement = '-1';
if(isset($_GET['departement']) && !empty($_GET['departement'])){
	$departement = $_GET['departement'];
}
$region = -1;
//requete pour le select par département.
if(isset($_GET['region']) && !empty($_GET['region']) && $_GET['region'] != -1){
	$region = $_GET['region'];
	$req_departement = "select * from departements WHERE region_id = ".$region." ORDER BY nom";
	if($departement == '-1'){
		$res_dep = mysql_query($req_departement);
		while($line = mysql_fetch_array($res_dep)){
			$lstDep[] = $line['departement_id'];
		}
	}
}else{
	$req_departement = "select * from departements ORDER BY nom";
}

//requete pour le select loisir
$loisir = '-1';
if(isset($_GET['loisir']) && !empty($_GET['loisir'])){
	$loisir = $_GET['loisir'];
}
$req_sortie = "select * from type_loisir ORDER BY type";


$requete="SELECT * FROM loisirs where date_fin_sortie > NOW() and valide = 1";
if($departement != -1){
	$requete .= " and id_departements = ".$departement;
}
if($loisir != -1){
	$requete .= " and id_type_loisirs = ".$loisir;
}
if(!empty($lstDep)){
	$requete .= " and id_departements IN (".implode(",", $lstDep).")";
}
$calculPage =mysql_query($requete);
$nbTotal = mysql_num_rows($calculPage);
$nbPages = ceil($nbTotal/$nbParPage);

if(isset($_GET['page'])){
	$pageActuelle=intval($_GET['page']);

	if($pageActuelle>$nbPages){
		$pageActuelle=$nbPages;
	}
}else {
	$pageActuelle=1; 
}

$startLimit=($pageActuelle-1)*$nbParPage;
$resultat=mysql_query($requete." limit ".$startLimit.",".$nbParPage);
?>

Re: pagination

Posté : 22 juil. 2014, 17:12
par xTG
Tu ne protèges pas tes requêtes contre les injections.
Il y a la fonction mysql_real_escape_string pour cela.
Voir même ce driver n'étant plus maintenu il serait très recommandé de migrer vers mysqli ou PDO.

Je n'ai pas vu d'incohérence.
Peux-tu tracer les variables :
$pageActuelle
$requete
$_GET['page']

juste avant :
$resultat=mysql_query($requete." limit ".$startLimit.",".$nbParPage);

Re: pagination

Posté : 22 juil. 2014, 21:38
par yoann38
Donc enfait je pense que le problème vien de la page ou je demande que la pagination s'affiche dans la partie js, je pense qu'il faut intégrer la pagination ds le js mais comment exactement ?
[javascript]<script type="text/javascript">
// On déclare la fonction qui va aller chercher les données en base de données selon le bouton cliqué
function chargerDonnees(bouton) {
// On appelle en ajax le fichier rechercheAjax.php et on lui passe en GET le bouton sur lequel l'utilisateur a appuyé
$.ajax({
url: 'include/rechercheAjax.php?bouton='+bouton,
// Lorsque le fichier rechercheAjax.php a fini de s'exécuter, il retourne une chaîne au format JSON
success: function (data) {
var sorties = $.parseJSON(data);
console.log(sorties);
// Pour chacune des lignes retournées
$('#bloc_page').html('');
for(var i = 0; i < sorties.length; i++) {
// On prépare l'HTML qui va afficher les résultats
// Pour chacune des lignes retournées
// On vide la zone de résultats

var html = '<div class="col-md-4 col-sm-6 marg15"><div class="wrap"><a href="add_favoris.php?idfav='+sorties.id_loisirs+'" ><div class="corner">FAVORIS</div></a>';
html += '<a href="annonce_zoom.php?id='+sorties.id_loisirs+'" >';
if(sorties.photo != "") {
html += '<img class="img-responsive" src="img/annonce/'+sorties.photo+'" ></a>';
}
html += '<h3>'+sorties.titre+'</h3>';
html += '<p class="desc">'+sorties.description+'</p>';
html += '<hr><div class="utiles">';
html += '<p class="pull-right pad10">'+sorties.date_debut_sortie+'</p>';
html += '<p class="city pull-left pad10"><i class="fa fa-map-marker"></i> '+sorties.city+'</p></div>';
html += '<input class="look pull-right" type="button" value="CONTINUER"><a href="annonce_zoom.php?id='+sorties.id_loisirs+'"></a></div></div></div>';


// On ajoute l'HTML préparé à la page
$('#bloc_page').append(html);

}
}
});
}
</script>[/javascript]

La l'utilisateur filtre:

[javascript]<ul class="nav nav-tabs">
<li class="active"><a href="#home" onclick="javascript:chargerDonnees(0);" data-toggle="tab" >test1</a></li>
<li><a href="#profile" onclick="javascript:chargerDonnees(1);" data-toggle="tab">test2</a></li>
<li><a href="#messages" onclick="javascript:chargerDonnees(2);" data-toggle="tab">test3</a></li>
<li><a href="#settings" onclick="javascript:chargerDonnees(3);" data-toggle="tab">test4</a></li>
</ul> [/javascript]

La on met les annonces avec la pagination:
 <div id="bloc_page">
									  <?php 
			while($loisirs=mysql_fetch_array($resultat)) {   ?>
			<?php $date_sortie = DateTime::createFromFormat('Y-m-d', $loisirs['date_debut_sortie']);?>
        	<?php $date = DateTime::createFromFormat('Y-m-d H:i:s', $loisirs['date_debut_sortie']);?>
        	<?php $datef = DateTime::createFromFormat('Y-m-d H:i:s', $loisirs['date_fin_sortie']);?>
        	<?php $diff = floor(($datef->getTimestamp() - $date->getTimestamp())/86400) ;?>
                             <!-- Annonce -->                
            <div class="col-md-4 col-sm-6 marg15">
                <div class="wrap">
                    <a href="add_favoris.php?idfav=<?php echo $loisirs['id_loisirs'];?>"><div class="corner">FAVORIS</div></a>
                    <a href="annonce_zoom.php?id=<?php echo $loisirs['id_loisirs'];?>" >
			<?php if(!empty($loisirs['photo'])){?><img class="img-responsive" src="img/annonce/<?php echo $loisirs['photo'];?>" ><?php }?></a>     
                    <h3><?php echo $loisirs['titre']; ?></h3>
                    <p class="desc"><?php echo substr($loisirs['description'], 0, 150).'...'; ?></p>
                    <hr>
                    <div class="utiles">
                                <p class="pull-right pad10"><?php echo ucfirst($jour[$date->format('N')]); ?> <?php echo $date->format('d'); ?> <?php echo ucfirst($mois[$date->format('n')]); ?> </p>
                                <p class="city pull-left pad10">
                                 <i class="fa fa-map-marker"></i> <?php echo $loisirs['city'];?>
                                </p>
                            </div>

                   <a href="annonce_zoom.php?id=<?php echo $loisirs['id_loisirs'];?>" > <input class="look pull-right" type="button" value="CONTINUER"></a> 
                </div>  
            </div>
                  <?php }?>
                  <div class="pagination">Pages :
		<?php  
			$listParam = '';
			foreach($_GET as $key=>$param){
				if($key != 'page'){
					$listParam .= '&'.$key.'='.$param;
				}
			}
			
			for($i=1; $i<=$nbPages; $i++){
			     if($i==$pageActuelle) {
			         echo ' <span class="page active">'.$i.'</span> '; 
			     }else{
			          echo '<div class="page"><a href="sortie.php?page='.$i.$listParam.'">'.$i.'</div></a> ';
			     }
			}
			?> 
		</div>  
                 
                   </div> 

Re: pagination

Posté : 23 juil. 2014, 08:51
par xTG
Euh... Quel est le lien avec ce script PHP ?

Re: pagination

Posté : 24 juil. 2014, 00:08
par yoann38
Commen ca quel est le lien ?

Re: pagination

Posté : 24 juil. 2014, 08:50
par xTG
Tu as un script Javascript qui traite un format json, ton script php renvoi un format plain/text.
Ou alors j'ai pas compris le lien entre les différents scripts, le nom des fichiers aiderai.

Re: pagination

Posté : 24 juil. 2014, 10:11
par yoann38
Bonjour,
Alors je vais essayer d'être plus explicite,
Je pense qu'il ya un problème d'intégration et ne voit pas trop comment m'y prendre pour ajouter la pagination au js
car par default j'arrive sur une page et dès que je clique sur un des fameux boutons test, test 2 .... le echo de "Page" ne s'affiche plus :/
J'appele mon fichier ou j'ai ma pagination par:
<?php include("include/recherche.php"); ?>
et ce fichier contient:
<?php
$nbParPage = 5;

$lstDep = array();
$departement = '-1';
if(isset($_GET['departement']) && !empty($_GET['departement'])){
	$departement = $_GET['departement'];
}
$region = -1;
//requete pour le select par département.
if(isset($_GET['region']) && !empty($_GET['region']) && $_GET['region'] != -1){
	$region = $_GET['region'];
	$req_departement = "select * from departements WHERE region_id = ".$region." ORDER BY nom";
	if($departement == '-1'){
		$res_dep = mysql_query($req_departement);
		while($line = mysql_fetch_array($res_dep)){
			$lstDep[] = $line['departement_id'];
		}
	}
}else{
	$req_departement = "select * from departements ORDER BY nom";
}

//requete pour le select loisir
$loisir = '-1';
if(isset($_GET['loisir']) && !empty($_GET['loisir'])){
	$loisir = $_GET['loisir'];
}
$req_sortie = "select * from type_loisir ORDER BY type";


$requete="SELECT * FROM loisirs where date_fin_sortie > NOW() and valide = 1";
if($departement != -1){
	$requete .= " and id_departements = ".$departement;
}
if($loisir != -1){
	$requete .= " and id_type_loisirs = ".$loisir;
}
if(!empty($lstDep)){
	$requete .= " and id_departements IN (".implode(",", $lstDep).")";
}
$calculPage =mysql_query($requete);
$nbTotal = mysql_num_rows($calculPage);
$nbPages = ceil($nbTotal/$nbParPage);

if(isset($_GET['page'])){
	$pageActuelle=intval($_GET['page']);

	if($pageActuelle>$nbPages){
		$pageActuelle=$nbPages;
	}
}else {
	$pageActuelle=1; 
}

$startLimit=($pageActuelle-1)*$nbParPage;
$resultat=mysql_query($requete." limit ".$startLimit.",".$nbParPage);
?>

Ensuite sur une page (news.php) ce script: ( permet d'afficher mes "news" en fonction du bouton sur lequel l'utilisateur aura cliqué).
[javascript]
<script type="text/javascript">
// On déclare la fonction qui va aller chercher les données en base de données selon le bouton cliqué
function chargerDonnees(bouton) {
// On appelle en ajax le fichier rechercheAjax.php et on lui passe en GET le bouton sur lequel l'utilisateur a appuyé
$.ajax({
url: 'include/rechercheAjax.php?bouton='+bouton,// le traitement derrière pour calculer les dates en fonction de test1 , test 2 ...
// Lorsque le fichier rechercheAjax.php a fini de s'exécuter, il retourne une chaîne au format JSON
success: function (data) {
var sorties = $.parseJSON(data);
console.log(sorties);
// Pour chacune des lignes retournées
$('#bloc_page').html('');
for(var i = 0; i < sorties.length; i++) {
// On prépare l'HTML qui va afficher les résultats
// Pour chacune des lignes retournées
// On vide la zone de résultats

var html = '<div class="col-md-4 col-sm-6 marg15"><div class="wrap"><a href="add_favoris.php?idfav='+sorties.id_loisirs+'" ><div class="corner">FAVORIS</div></a>';
html += '<a href="annonce_zoom.php?id='+sorties.id_loisirs+'" >';
if(sorties.photo != "") {
html += '<img class="img-responsive" src="img/annonce/'+sorties.photo+'" ></a>';
}
html += '<h3>'+sorties.titre+'</h3>';
html += '<p class="desc">'+sorties.description+'</p>';
html += '<hr><div class="utiles">';
html += '<p class="pull-right pad10">'+sorties.date_debut_sortie+'</p>';
html += '<p class="city pull-left pad10"><i class="fa fa-map-marker"></i> '+sorties.city+'</p></div>';
html += '<input class="look pull-right" type="button" value="CONTINUER"><a href="annonce_zoom.php?id='+sorties.id_loisirs+'"></a></div></div></div>';


// On ajoute l'HTML préparé à la page
$('#bloc_page').append(html);

}
}
});
}
</script>
[/javascript]

Les boutons en relation avec script sont:
[javascript]
<ul class="nav nav-tabs">
<li class="active"><a href="#home" onclick="javascript:chargerDonnees(0);" data-toggle="tab" >Test1</a></li>
<li><a href="#profile" onclick="javascript:chargerDonnees(1);" data-toggle="tab">Test2</a></li>
<li><a href="#messages" onclick="javascript:chargerDonnees(2);" data-toggle="tab">Test3</a></li>
<li><a href="#settings" onclick="javascript:chargerDonnees(3);" data-toggle="tab">Test4</a></li>
</ul>
[/javascript]


Cette partie affcihe les news en elle même en fonction sur script juste au dessus

<!-- *********** les news ********* -->
                              <div id="bloc_page">
									  <?php 
			while($loisirs=mysql_fetch_array($resultat)) {   ?>
			<?php $date_sortie = DateTime::createFromFormat('Y-m-d', $loisirs['date_debut_sortie']);?>
        	<?php $date = DateTime::createFromFormat('Y-m-d H:i:s', $loisirs['date_debut_sortie']);?>
        	<?php $datef = DateTime::createFromFormat('Y-m-d H:i:s', $loisirs['date_fin_sortie']);?>
        	<?php $diff = floor(($datef->getTimestamp() - $date->getTimestamp())/86400) ;?>
                             <!-- Annonce -->                
            <div class="col-md-4 col-sm-6 marg15">
                <div class="wrap">
                    <a href="add_favoris.php?idfav=<?php echo $loisirs['id_loisirs'];?>"><div class="corner">FAVORIS</div></a>
                    <a href="annonce_zoom.php?id=<?php echo $loisirs['id_loisirs'];?>" >
			<?php if(!empty($loisirs['photo'])){?><img class="img-responsive" src="img/annonce/<?php echo $loisirs['photo'];?>" ><?php }?></a>     
                    <h3><?php echo $loisirs['titre']; ?></h3>
                    <p class="desc"><?php echo substr($loisirs['description'], 0, 150).'...'; ?></p>
                    <hr>
                    <div class="utiles">
                                <p class="pull-right pad10"><?php echo ucfirst($jour[$date->format('N')]); ?> <?php echo $date->format('d'); ?> <?php echo ucfirst($mois[$date->format('n')]); ?> </p>
                                <p class="city pull-left pad10">
                                 <i class="fa fa-map-marker"></i> <?php echo $loisirs['city'];?>
                                </p>
                            </div>

                   <a href="annonce_zoom.php?id=<?php echo $loisirs['id_loisirs'];?>" > <input class="look pull-right" type="button" value="CONTINUER"></a> 
                </div>  
            </div>
                  <?php }?>
                  <!-- pagination des news -->
                  <div class="pagination">Pages :
		<?php  
			$listParam = '';
			foreach($_GET as $key=>$param){
				if($key != 'page'){
					$listParam .= '&'.$key.'='.$param;
				}
			}
			
			for($i=1; $i<=$nbPages; $i++){
			     if($i==$pageActuelle) {
			         echo ' <span class="page active">'.$i.'</span> '; 
			     }else{
			          echo '<div class="page"><a href="sortie.php?page='.$i.$listParam.'">'.$i.'</div></a> ';
			     }
			}
			?> 
		</div>  
                 
                   </div><!-- fin bloc page -->  

Re: pagination

Posté : 24 juil. 2014, 12:53
par xTG
Ah oui donc effectivement je vois le souci...
Tu as un script de catégorisation en JS qui ne tient pas compte de la pagination.
Le plus simple : refaire ce script en PHP car tu as déjà tout ce qu'il faut pour la pagination.
Le script JS fait appel à un fichier PHP qui en gros doit faire jouer un paramètre dans une requête SQL, ni plus, ni moins.

Vérifies dans un premier temps que la pagination PHP fonctionne si tu ne fais pas appel au script JS.

Re: pagination

Posté : 24 juil. 2014, 13:17
par yoann38
Bah enfait c'est donc bien ce que je pensé mais je souhaite integrer la pagination au script js actuel, c'est un peut compliquer à expliquer pourquoi mais c'est que je souhaite c'est pour ça que je vous solicite :)
....

Re: pagination

Posté : 24 juil. 2014, 16:14
par xTG
Donc c'est pas du PHP qu'il te faut comme aide. ^^
Postes plutôt un nouveau sujet dans le forum Javascript afin qu'il soit clair et qu'il touche plutôt des personnes ayant les compétences pour te répondre.
(ce qui n'est pas mon cas, je bidouille plus qu'autre chose ne Javascript)

Re: pagination

Posté : 24 juil. 2014, 17:30
par yoann38
Ok, je vais poster ça.
Sinan je me demander en "jouant" avec MySQL LIMIT.
En gros quand j'envoie la requete en Ajax je ve voir apparaitre les 20 premiers resultat puis les 20 suivant et ainsi de suite.
Est ce possible de faire quelque chose comme ça, si oui comment.
Quelque chose de propre biensûr.
Merci encore

Re: pagination

Posté : 24 juil. 2014, 19:59
par xTG
Il suffit de passer en paramètre de l'url le limit.

Re: pagination

Posté : 24 juil. 2014, 20:19
par yoann38
un exemple svp ?