IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème de pagination


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut Problème de pagination
    Bonjour,

    Je m'embrouille complètement la tête sur une histoire de pagination. Ma difficulté principale est que ma pagination doit se faire en fonction de plusieurs critères (moteur de recherches) et de la catégorie sélectionnée.
    Je précises que les critères sont différents en fonction de la catégorie ou l'on se trouve.

    Pour le moment et pour effectuer la pagination, j'effectue une première requête qui me permet de compter le nombre de résultat, de pages, etc... en fonction de la catégorie et des critères de recherches.
    Suite à cette requête, j'en effectue une seconde pour prendre en compte le trie selectionné et la limite de pages (LIMIT ".$premiereEntree." , ".$messagesParPage.") .

    Premier soucis :

    Y a t'il plus simple ou suis je obligé de me taper 2 requêtes successives pour chacune des catégories de la même façon ?

    Ensuite vient l'affichage de la pagination avec la même rengaine...

    Second soucis :

    Suis-je obligé de me taper X fois le code de pagination en fonctions des catégories ou y a t'il plus simple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    //Nombre de messages par page.
    $messagesParPage=2; 
     
    if($categorie==1){
     
    	//on compte tout en fonction des critères de recherches
    	$retour_total=mysql_query("SELECT COUNT(*) AS total FROM MATABLE WHERE 
    	ici_mes_criteres
    	WHERE id_categorie = ".$categorie." 
    	"); 
     
    	//On récupère le contenu de la requête dans $retour_total
    	$donnees_total=mysql_fetch_assoc($retour_total);
    	//On range sous la forme d'un tableau.
    	$total=$donnees_total['total'];
    	//On compte le nombre de pages.
    	$nombreDePages=ceil($total/$messagesParPage);
    	if(isset($_GET['page']))
    	{
    		$pageActuelle=intval($_GET['page']);
     
    		if($pageActuelle>$nombreDePages)
    		{
    			$pageActuelle=$nombreDePages;
    		}
    	}
    	else
    	{
    		// La page actuelle est la n°1    
    		$pageActuelle=1;
    	}
    	// On calcul la première entrée à lire
    	$premiereEntree=($pageActuelle-1)*$messagesParPage;
     
    	//-----Ici je me retape la requête en double juste pour faire passer ORDER BY et LIMIT-----//
    	$query = mysql_query("SELECT mes_champs FROM MATABLE WHERE 
    	ici_mes_criteres
    	WHERE id_categorie = ".$categorie." 	
    	ORDER BY ".$trie." LIMIT ".$premiereEntree." , ".$messagesParPage."
    	");
    }
     
    //Ici on refait la même chose pour 10 autres catégories
    else if($categorie==2){
    	//double requête pour les critères de sélections et comptage des pages
    }
    else if($categorie==3){
    	//double requête pour les critères de sélections et comptage des pages
    }
    //etc...
     
    //Ici la pagination
    $suivant=$pageActuelle+1;
    $precedent=$pageActuelle-1;
     
    if($categorie==1){
    	//Si la variable est plus grand ou égal
    	if($precedent>=1){
    		echo '<a class="pagination" title="Page précédente" 
    href="?page='.$precedent.'&trie='.$_GET['trie'].'&plein-de-criteres-passer-par-$_GET-en-fonction-de-la-categorie=...">« Page précédente</a>';
    	}
     
    	//Si la variable est plus petit ou égal
    	if($suivant<=$nombreDePages){
    		echo '<a class="pagination" title="Page suivante" 
    href="?&page='.$suivant.'&trie='.$_GET['trie'].'&plein-de-criteres-passer-par-$_GET-en-fonction-de-la-categorie=...">Page suivante »</a>';
    	}
    }
    else if($categorie==2){
    	//Si la variable est plus grand ou égal
    	if($precedent>=1){
    		echo '<a class="pagination" title="Page précédente" 
    href="?page='.$precedent.'&trie='.$_GET['trie'].'&plein-de-criteres-passer-par-$_GET-en-fonction-de-la-categorie=...">« Page précédente</a>';
    	}
     
    	//Si la variable est plus petit ou égal
    	if($suivant<=$nombreDePages){
    		echo '<a class="pagination" title="Page suivante" 
    href="?&page='.$suivant.'&trie='.$_GET['trie'].'&plein-de-criteres-passer-par-$_GET-en-fonction-de-la-categorie=...">Page suivante »</a>';
    	}
    }
    //etc...on recommence le code de pagination pour chaque catégorie
    ?>
    Pour ceux ou celles qui ont compris mon soucis, un petit coup de neurones serait bienvenu ...

    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut
    Ha ouai .. moi j'avais lut celle-ci http://antoine-herault.developpez.co...e-en-php/#L4.2

    Bon, vu que je suis dans le forum "Débuter" et que je ne pige pas forcément tout, j'aimerais une petite explication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define('MODELE_REQUETE', 'SELECT SQL_CALC_FOUND_ROWS * FROM ma_table LIMIT %d,%d');
    Ce que j'ai à modifier ce situe bien entre FROM et LIMIT ?

    Ce code permet d'éviter entre autre mon soucis de double requête puisqu'il ne prend pas en compte la clause LIMIT ?

    J'ai bon ?

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Si j'ai bien compris puisque la catégorie entre directement dans la requête pourquoi tu va maitre des condition.
    J'ai fais des modification sur votre code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
    $messagesParPage = 2; 
     
    $query = mysql_query("SELECT mes_champs FROM MATABLE WHERE 
    ici_mes_criteres
    AND id_categorie = ".$categorie." 	
    ORDER BY ".$trie." LIMIT ".$premiereEntree." , ".$messagesParPage."
    ");
     
    $total = mysql_num_rows($query);	
    $nombreDePages=ceil($total/$messagesParPage);
     
    if(isset($_GET['page']))
    {
    	$pageActuelle=intval($_GET['page']);
     
    	if($pageActuelle>$nombreDePages)
    	{
    		$pageActuelle=$nombreDePages;
    	}
    }
    else
    {
    	// La page actuelle est la n°1    
    	$pageActuelle=1;
    }
    // On calcul la première entrée à lire
    $premiereEntree=($pageActuelle-1)*$messagesParPage;
     
     
    $suivant = $pageActuelle + 1;
    $precedent = $pageActuelle - 1;
     
    if($categorie==1)
    {
    	//Si la variable est plus grand ou égal
    	if($precedent>=1)
    	{
    		echo '<a class="pagination" title="Page précédente" 
    		href="?page='.$precedent.'&trie='.$_GET['trie'].'&plein-de-criteres-passer-par-$_GET-en-fonction-de-la-categorie=...">« Page précédente</a>';
    	}
     
    	//Si la variable est plus petit ou égal
    	if($suivant<=$nombreDePages){
    		echo '<a class="pagination" title="Page suivante" 
    		href="?&page='.$suivant.'&trie='.$_GET['trie'].'&plein-de-criteres-passer-par-$_GET-en-fonction-de-la-categorie=...">Page suivante »</a>';
    	}
    }
    ?>

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut
    Citation Envoyé par m4riachi Voir le message
    Si j'ai bien compris puisque la catégorie entre directement dans la requête pourquoi tu va maitre des condition.
    Salut,

    Tout simplement parce que les catégories font partie du formulaire de recherches accompagné d'autres champs de recherches.

    En gros, formulaire de base avec champs en commun.
    Si sélection d'une catégorie -> rechargement de la page avec champs de recherches en sup en fonction de la catégorie.
    Les champs de recherches et la catégorie ayant changé -> conditions .

    De plus, les recherches s'effectuent dans les catégories elles mêmes et non dans une page tiers.

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    vérifier tes conditions avant l'appelle des requête et met ce que tu dois maitre dans des variable, après tu insert tes variable dans la requête

Discussions similaires

  1. [Struts-Layout] Problème de pagination
    Par Haplo2006 dans le forum Struts 1
    Réponses: 1
    Dernier message: 23/02/2007, 18h09
  2. Problème de pagination avec un GridView
    Par Perceuse-Killer dans le forum ASP.NET
    Réponses: 2
    Dernier message: 07/02/2007, 13h30
  3. [DisplayTag] Problème de pagination
    Par questionneuse dans le forum Taglibs
    Réponses: 6
    Dernier message: 21/08/2006, 16h54
  4. [MySQL] Problème de pagination dans un script.
    Par Scurz dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/08/2006, 12h47
  5. [SQL] Problème de pagination avec tableau
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/05/2006, 22h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo