pagination

Mammouth du PHP | 643 Messages

22 juil. 2014, 16:37

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);

ViPHP
xTG
ViPHP | 7331 Messages

22 juil. 2014, 16:42

Il y a quoi dans $requete ?

Mammouth du PHP | 643 Messages

22 juil. 2014, 16:51

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);
?>

ViPHP
xTG
ViPHP | 7331 Messages

22 juil. 2014, 17:12

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);

Mammouth du PHP | 643 Messages

22 juil. 2014, 21:38

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> 

ViPHP
xTG
ViPHP | 7331 Messages

23 juil. 2014, 08:51

Euh... Quel est le lien avec ce script PHP ?

Mammouth du PHP | 643 Messages

24 juil. 2014, 00:08

Commen ca quel est le lien ?

ViPHP
xTG
ViPHP | 7331 Messages

24 juil. 2014, 08:50

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.

Mammouth du PHP | 643 Messages

24 juil. 2014, 10:11

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 -->  

ViPHP
xTG
ViPHP | 7331 Messages

24 juil. 2014, 12:53

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.

Mammouth du PHP | 643 Messages

24 juil. 2014, 13:17

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 :)
....

ViPHP
xTG
ViPHP | 7331 Messages

24 juil. 2014, 16:14

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)

Mammouth du PHP | 643 Messages

24 juil. 2014, 17:30

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

ViPHP
xTG
ViPHP | 7331 Messages

24 juil. 2014, 19:59

Il suffit de passer en paramètre de l'url le limit.

Mammouth du PHP | 643 Messages

24 juil. 2014, 20:19

un exemple svp ?