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

PHP & Base de données Discussion :

Pagination qui ne pagine pas ;)


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut Pagination qui ne pagine pas ;)
    Bonjour à tous,

    Alors voilà, je suis débutante en php et je me frotte à un projet pour lequel je suis coincée à plusieurs endroits.
    Le premier, c'est la pagination.

    Le projet est un annuaire, donc un genre de moteur de recherche dans une BDD.
    La recherche fonctionne bien. Mais pas la pagination.
    Lorsque la pagination s'affiche, j'ai en fait tous les numéros de pages de toute la BDD (soit 4000 et quelques pages) et mes résultats s'affichent les uns en dessous des autres... (les pages sont looonnngues lol).

    J'ai l'impression que ma requête de base (ma recherche) n'est pas prise en compte dans cette pagination et quoi que je fasse, et je n'y arrive pas....

    Voici le code de ma page entière :

    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
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Infirmières Libérales (cabinets et soins à domicile)</title>
    	<?php if (isset($metaRefresh)) echo $metaRefresh;?>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    	<meta http-equiv="Content-Language" content="fr" />
     
    	<link rel="stylesheet" type="text/css" href="../css/style.css" /> 
     
    </head>
     
    <body>
     
    <?php
    	if(isset($_POST['requete']) && $_POST['requete'] != NULL)
    	{
    	mysql_connect('localhost','root','root');
    	mysql_select_db('annuaire-infirmieres'); 
     
     
    //pagination
    $sql = "SELECT COUNT(id) as nbInf FROM infirmieres";
    $req = mysql_query($sql) or die(mysql_error());
    $data = mysql_fetch_assoc($req);
    print_r($data);
     
    $nbInf = $data['nbInf'];
    $parPage = 5;
    $nbPage = ceil($nbInf / $parPage);
     
    if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage) {
    $pageCourante = $_GET['p'];
    }
    else {
    $pageCourante = 1;
    }
     
    $sql = "SELECT * FROM infirmieres WHERE code_postal LIKE '%$requete%' ORDER BY id DESC LIMIT ". (($pageCourante-1)*$parPage). ",$parPage";
    $req = mysql_query($sql) or die(mysql_error());
    while ($data=mysql_fetch_assoc(sreq)){
    echo "<h1>{$data['nom']}</h1>";
    echo $data{'nom'};
    echo "</hr>";
    }
     
    for($i=1;$i<$nbPage;$i++) {
    if($i==$pageCourante) {
    	echo " $i /";
    }
    else {		
    echo "<a href=\"recherche/rechercher_ville.php?p=$i\">$i</a> ";
    }
     
    }
    //fin pagination
     
    //requête sur le champ ville du formulaire
    	$requete = htmlspecialchars($_POST['requete']); 
    	$query = mysql_query("SELECT * FROM infirmieres WHERE nom LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error()); 
    	$nb_resultats = mysql_num_rows($query); 
    		if($nb_resultats != 0) 
    			{
    ?>
     
    <!--affichage des résultats-->
    <h3>Résultats de votre recherche.</h3>
    <h2>Nous avons trouvé <? echo $nb_resultats;
    if($nb_resultats > 1) { echo ' résultats'; } else { echo ' résultat'; } 
    ?>
     dans votre commmune :<br/>
    <br/></h2>
    <?
    	while($donnees = mysql_fetch_array($query)) 
    	{
    ?>
    		<br/><div id="affichage">
    		<? echo $donnees['nom']?><br/>
    		<? echo $donnees['adresse']?><br/>
    		<? echo $donnees['code_postal']?>
    		<? echo $donnees['ville']?><br/>
    		<input class="bouton-inscription-affichernum" type="submit" value="Afficher le numéro">
    		<input class="bouton-inscription-affichernum" type="submit" value="Afficher le plan">
    	<br/><br/>
    		</div>
    <?
    } 
    ?><br/>
    <br/>
     
    <a href="rechercher_nom.php"> <input class="bouton-inscription-recherche" type="button" value="FAIRE UNE NOUVELLE RECHERCHE"> </a>
     
    <?
    } 
    else
    { 
    ?>
    <h3>Pas de résultats</h3>
    <p>Nous n'avons trouvé aucun résultat pour votre requête "<? echo $_POST['requete']; ?>". <a href="rechercher_nom.php">Réessayez</a> avec autre chose.</p>
    <?
    }
    mysql_close(); 
    }
    else
    { 
    ?>
    <h2>Vous allez faire une recherche dans notre annuaire des infirmières. </br> Saisissez un nom pour réaliser une recherche.</h2>
     	<form action="rechercher_nom.php" method="Post" class="position-form">
      		<div id="champrecherche">
    			<label for="nom">Nom : </label><input type="text" name="requete" size="50" onchange="javascript:this.value=this.value.toUpperCase();">
    			<input type="submit" class="bouton-inscription-recherche" value="Ok">
    			<a href="../index.php"><input class="bouton-inscription-accueil" type="button" value="Retour à l'accueil"/></a>
    		</div>
    	</form>
    <?
    }
    ?>
    <div id="image">
    	<img id="infirmiere" src="../images/infirmiere.jpg" alt="infirmière à domicile"/>
    </div>
     
    </body>
    <?php
    include('../cnx-dnx/includes/bas.php');
    ?>
    </html>
    Si jamais vous trouvez le bug, pouvez vous m'expliquer sa résolution "pas à pas" ?

    Par avance, je vous en remercie !!!
    Karine

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu as un problème avec ta requête d'affichage, mais pas d'erreurs.
    Donc 1ere étape : récupérer la requête réellement exécutée, histoire de voir la valeur des choses que tu as insérées dedans.
    Un petit echo fera l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT * FROM infirmieres WHERE code_postal LIKE '%$requete%' ORDER BY id DESC LIMIT ". (($pageCourante-1)*$parPage). ",$parPage";
    echo "Requête : ".$sql." <br/>"; // on affiche la requête pour debug
    $req = mysql_query($sql) or die(mysql_error());
    Tu récupères la requête, tu regardes si ça a la tête que tu t'attendais à avoir et tu nous tiens informés
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Alors ça affiche ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Requête : SELECT * FROM infirmieres WHERE code_postal LIKE '%%' ORDER BY id DESC LIMIT 0,5
    je m'attendais à voir le CP que j'ai saisi dans mon formulaire... SNIFF....
    Comment je fais alors pour lui dire que je veux récupérer dans l'affichage juste les CP correspondant à ce que j'ai demandé ?

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    C'est probablement mes yeux, mais je ne vois nulle part dans ton code la déclaration d'une variable qui s’appellerait $requete...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    J'ai trouvé ! (@Bovino : ok, j'ai un peu triché à coup de Ctrl+F)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = htmlspecialchars($_POST['requete']);
    Sauf que c'est à la ligne 60 alors que la requête est à la ligne 40

    Donc, remonte l'affectation de $requete *avant* l'exécution de la requête et ça devrait beaucoup mieux marcher.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    oups......
    merci pour vos réponses.
    Donc maintenant, j'ai bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requête : SELECT * FROM infirmieres WHERE nom LIKE '%DUPON%' ORDER BY id DESC LIMIT 0,5
    "DUPON" étant le nom que j'ai saisi dans mon formulaire de recherche.
    MAIS, ça pagine toujours pas correctement...
    En fait, j'ai 21608 données dans ma base et j'ai 4321 pages affichées en pagination lol
    Ca veut dire que quand j'ai demandé 5 affichages par pages, ça à l'air d'être ok (21608 / 4321 = 5), MAIS POURQUOI la pagination ne prends pas en compte uniquement les résultats de ma requête ???
    Aussi, si je clique sur un lien de page, ça annule tout. Du moins, les résultats de ma requête disparaissent...
    J'y comprends rien...
    C'est pas beau de débuter lol !!!
    PS : je m'excuse d'être aussi embêtante !!

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En fait tu as deux requêtes : une avec la LIMIT (qui te remonte les résultats à afficher) et une sans la LIMIT (que tu utilises pour connaitre le nombre total de résultats). Et pas de bol, tu boucles sur la mauvaise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = mysql_query("SELECT * FROM infirmieres WHERE nom LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error()); 
    $nb_resultats = mysql_num_rows($query); 
    // ...
    while($donnees = mysql_fetch_array($query))
    Une bonne pratique serait de remplacer ta requête sans LIMIT par une requête COUNT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = mysql_query("SELECT COUNT(*) as total FROM infirmieres WHERE nom LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error()); 
    	$nb_resultats = mysql_result($query, 0);
    Seul problème : tu boucles déjà sur ta requête limitée ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = "SELECT * FROM infirmieres WHERE code_postal LIKE '%$requete%' ORDER BY id DESC LIMIT ". (($pageCourante-1)*$parPage). ",$parPage";
    $req = mysql_query($sql) or die(mysql_error());
    while ($data=mysql_fetch_assoc(sreq)){
    echo "<h1>{$data['nom']}</h1>";
    echo $data{'nom'};
    echo "</hr>";
    }
    Donc si tu veux re-boucler sur le même résultat, il faut réinitialiser le pointeur :
    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
     
    mysql_data_seek($req, 0);
    while($donnees = mysql_fetch_array($req )) 
    	{
    ?>
    		<br/><div id="affichage">
    		<? echo $donnees['nom']?><br/>
    		<? echo $donnees['adresse']?><br/>
    		<? echo $donnees['code_postal']?>
    		<? echo $donnees['ville']?><br/>
    		<input class="bouton-inscription-affichernum" type="submit" value="Afficher le numéro">
    		<input class="bouton-inscription-affichernum" type="submit" value="Afficher le plan">
    	<br/><br/>
    		</div>
    <?
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Bon y a une avancé !!!!
    Le nombre d'affichage est maintenant bien limité à 5.
    MAIS !! J'ai tjrs 4300 pages et rien en page 2 par ex si ma recherche compte 8 résultats...

    voici mon code modifié :

    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
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Infirmières Libérales (cabinets et soins à domicile)</title>
    	<?php if (isset($metaRefresh)) echo $metaRefresh;?>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    	<meta http-equiv="Content-Language" content="fr" />
     
    	<link rel="stylesheet" type="text/css" href="../css/style.css" /> 
     
    </head>
     
    <body>
     
    <?php
    	if(isset($_POST['requete']) && $_POST['requete'] != NULL)
    	{
    	mysql_connect('localhost','root','root');
    	mysql_select_db('annuaire-infirmieres'); 
     
     
    //pagination
    $sql = "SELECT COUNT(id) as nbInf FROM infirmieres";
    $req = mysql_query($sql) or die(mysql_error());
    $data = mysql_fetch_assoc($req);
    print_r($data);
     
    $nbInf = $data['nbInf'];
    $parPage = 5;
    $nbPage = ceil($nbInf / $parPage);
     
    if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage) {
    $pageCourante = $_GET['p'];
    }
    else {
    $pageCourante = 1;
    }
    $requete = htmlspecialchars($_POST['requete']); 
     
    $sql = "SELECT * FROM infirmieres WHERE nom LIKE '%$requete%'  ORDER BY id DESC LIMIT ". (($pageCourante-1)*$parPage). ",$parPage";
    echo "Requête : ".$sql." <br/>"; // on affiche la requête pour debug
    $req = mysql_query($sql) or die (mysql_error());
     
    while ($data=mysql_fetch_assoc(sreq)){
    echo "<h1>{$data['nom']}</h1>";
    echo $data{'nom'};
    echo "</hr>";
    }
    for($i=1;$i<$nbPage;$i++) {
    if($i==$pageCourante) {
    	echo " $i /";
    }
    else {		
    echo "<a href=\"rechercher_nom.php?p=$i\">$i</a> ";
    }
     
    }
    //fin pagination
     
    //requête sur le champ ville du formulaire
    $query = mysql_query("SELECT COUNT(*) as total FROM infirmieres WHERE nom LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error()); 
    	$nb_resultats = mysql_result($query, 0);
    		if($nb_resultats != 0) 
    			{
    ?>
     
    <!--affichage des résultats-->
    <h3>Résultats de votre recherche.</h3>
    <h2>Nous avons trouvé <? echo $nb_resultats;
    if($nb_resultats > 1) { echo ' résultats'; } else { echo ' résultat'; } 
    ?>
     dans votre commmune :<br/>
    <br/></h2>
    <?
    mysql_data_seek($req, 0);
    while($donnees = mysql_fetch_array($req )) 
    	{
    ?>
    		<br/><div id="affichage">
    		<? echo $donnees['nom']?><br/>
    		<? echo $donnees['adresse']?><br/>
    		<? echo $donnees['code_postal']?>
    		<? echo $donnees['ville']?><br/>
    		<input class="bouton-inscription-affichernum" type="submit" value="Afficher le numéro">
    		<input class="bouton-inscription-affichernum" type="submit" value="Afficher le plan">
    	<br/><br/>
    		</div>
    <?
    } 
    ?><br/>
    <br/>
     
    <a href="rechercher_nom.php"> <input class="bouton-inscription-recherche" type="button" value="FAIRE UNE NOUVELLE RECHERCHE"> </a>
     
    <?
    } 
    else
    { 
    ?>
    <h3>Pas de résultats</h3>
    <p>Nous n'avons trouvé aucun résultat pour votre requête "<? echo $_POST['requete']; ?>". <a href="rechercher_nom.php">Réessayez</a> avec autre chose.</p>
    <?
    }
    mysql_close(); 
    }
    else
    { 
    ?>
    <h2>Vous allez faire une recherche dans notre annuaire des infirmières. </br> Saisissez un nom pour réaliser une recherche.</h2>
     	<form action="rechercher_nom.php" method="Post" class="position-form">
      		<div id="champrecherche">
    			<label for="nom">Nom : </label><input type="text" name="requete" size="50" onchange="javascript:this.value=this.value.toUpperCase();">
    			<input type="submit" class="bouton-inscription-recherche" value="Ok">
    			<a href="../index.php"><input class="bouton-inscription-accueil" type="button" value="Retour à l'accueil"/></a>
    		</div>
    	</form>
    <?
    }
    ?>
    <div id="image">
    	<img id="infirmiere" src="../images/infirmiere.jpg" alt="infirmière à domicile"/>
    </div>
     
    </body>
    <?php
    include('../cnx-dnx/includes/bas.php');
    ?>
    </html>
    tu as une idée d'où ça peut venir ? lol

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pourquoi tu as 4300 pages ? Regardons le code qui affiche les pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for($i=1;$i<$nbPage;$i++) {
    if($i==$pageCourante) {
    	echo " $i /";
    }
    else {		
    echo "<a href=\"rechercher_nom.php?p=$i\">$i</a> ";
    }
    Donc le 4300 est dans $nbPage, qui est défini un peu plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = "SELECT COUNT(id) as nbInf FROM infirmieres";
    $req = mysql_query($sql) or die(mysql_error());
    $data = mysql_fetch_assoc($req);
    $nbInf = $data['nbInf'];
    $parPage = 5;
    $nbPage = ceil($nbInf / $parPage);
    Donc $nbPage est calculé par rapport au nombre total d'infirmières et non pas par rapport au nombre de résultats de ton filtre (celui que tu affiches plus bas)

    Essaye de remettre les requêtes dans l'ordre :
    1) le nombre de résultat : un SELECT COUNT avec le filtre (et sans LIMIT) => on l'utilise pour calculer le nombre de pages et on le garde dans une variable pour l'afficher dans le morceau "n résultats trouvés" plus bas
    2) le résultat filtré : un SELECT avec le filtre et le LIMIT => on boucle dessus pour construire le tableau
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Bonjour

    Bon !!!! après avoir passé la journée à chercher, j'ai avancé sur le pb... lol
    Mais... j'en ai encore un peu...

    Par exemple, je fais une recherche par un nom où j'ai 11 résultats qui sortent.

    J'ai 5 adresses affichées sur ma première page (normal jusque là c'est ce que je veux).
    Maintenant par contre, j'ai que deux pages de pagination (au lieu de 3... puisque 2X5 = 10 + 1 page = 11 résutlats).
    Et quand je clique sur ma page 2, je retombe sur mon formulaire de recherche, pourquoi ??

    En tout cas, j'ai plus mes 4300 pages lol !!!!!!

    A force, j'ai du mal cet aprèm ...

    Revoici mon code complet :

    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
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Infirmières Libérales (cabinets et soins à domicile)</title>
    	<?php if (isset($metaRefresh)) echo $metaRefresh;?>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    	<meta http-equiv="Content-Language" content="fr" />
     
    	<link rel="stylesheet" type="text/css" href="../css/style.css" /> 
     
    </head>
     
    <body>
     
    <?php
    	if(isset($_POST['requete']) && $_POST['requete'] != NULL)
    	{
    	mysql_connect('localhost','root','root');
    	mysql_select_db('annuaire-infirmieres'); 
     
    $requete = htmlspecialchars($_POST['requete']); 
    //pagination
    $sql = "SELECT COUNT(id) as nbInf FROM infirmieres WHERE nom LIKE '%$requete%'";
    $req = mysql_query($sql) or die(mysql_error());
    $data = mysql_fetch_assoc($req);
    print_r($data);
    $nbInf = $data['nbInf'];
    $parPage = 5;
    $nbPage = ceil($nbInf / $parPage);
     
    if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage) {
    $pageCourante = $_GET['p'];
    }
    else {
    $pageCourante = 1;
    }
     
     
    $sql = "SELECT * FROM infirmieres WHERE nom LIKE '%$requete%' ORDER BY id DESC LIMIT ". (($pageCourante-1)*$parPage). ",$parPage";
    echo "Requête : ".$sql." <br/>"; // on affiche la requête pour debug
    $req = mysql_query($sql) or die (mysql_error());
     
    while ($data=mysql_fetch_assoc(sreq)){
    echo "<h1>{$data['nom']}</h1>";
    echo $data{'nom'};
    echo "</hr>";
    }
    for($i=1;$i<$nbPage;$i++) {
    if($i==$pageCourante) {
    	echo " $i /";
    }
    else {		
    echo "<a href=\"rechercher_nom.php?p=$i\">$i</a> ";
    }
     
    }
    //fin pagination
     
    //comptage du nbre de résultats trouvés.
    $query = mysql_query("SELECT COUNT(*) as total FROM infirmieres WHERE nom LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error()); 
    	$nb_resultats = mysql_result($query, 0);
    		if($nb_resultats != 0) 
    			{
    ?>
    <!--affichage des résultats-->
    <h3>Résultats de votre recherche.</h3>
    <h2>Nous avons trouvé <? echo $nb_resultats;
    if($nb_resultats > 1) { echo ' résultats'; } else { echo ' résultat'; } 
    ?>
     dans votre commmune :<br/>
    <br/></h2>
    <?
    mysql_data_seek($req, 0);
    while($donnees = mysql_fetch_array($req )) 
    	{
    ?>
    		<br/><div id="affichage">
    		<? echo $donnees['nom']?><br/>
    		<? echo $donnees['adresse']?><br/>
    		<? echo $donnees['code_postal']?>
    		<? echo $donnees['ville']?><br/>
    		<input class="bouton-inscription-affichernum" type="submit" value="Afficher le numéro">
    		<input class="bouton-inscription-affichernum" type="submit" value="Afficher le plan">
    	<br/><br/>
    		</div>
    <?
    } 
    ?><br/>
    <br/>
     
    <a href="rechercher_nom.php"> <input class="bouton-inscription-recherche" type="button" value="FAIRE UNE NOUVELLE RECHERCHE"> </a>
     
    <?
    } 
    else
    { 
    ?>
    <h3>Pas de résultats</h3>
    <p>Nous n'avons trouvé aucun résultat pour votre requête "<? echo $_POST['requete']; ?>". <a href="rechercher_nom.php">Réessayez</a> avec autre chose.</p>
    <?
    }
    mysql_close(); 
    }
    else
    { 
    ?>
    <h2>Vous allez faire une recherche dans notre annuaire des infirmières. </br> Saisissez un nom pour réaliser une recherche.</h2>
     	<form action="rechercher_nom.php" method="Post" class="position-form">
      		<div id="champrecherche">
    			<label for="nom">Nom : </label><input type="text" name="requete" size="50" onchange="javascript:this.value=this.value.toUpperCase();">
    			<input type="submit" class="bouton-inscription-recherche" value="Ok">
    			<a href="../index.php"><input class="bouton-inscription-accueil" type="button" value="Retour à l'accueil"/></a>
    		</div>
    	</form>
    <?
    }
    ?>
    <div id="image">
    	<img id="infirmiere" src="../images/infirmiere.jpg" alt="infirmière à domicile"/>
    </div>
     
    </body>
    <?php
    include('../cnx-dnx/includes/bas.php');
    ?>
    </html>
    Merci d'avance pour ton éclairage !!
    Belle soirée !

    Karine

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    résolu en passant mes paramètres par GET...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pagination qui ne fonctionne pas
    Par cedrus dans le forum Langage
    Réponses: 4
    Dernier message: 01/10/2013, 22h25
  2. Centrer une pagination qui varie (de 1 à 5 pages)
    Par Marc22 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 10/05/2010, 16h21
  3. pagination qui disparait apres un clik
    Par keusty78 dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2009, 13h00
  4. La pagination ne s'enregistre pas
    Par thefrenchgrumpy dans le forum Word
    Réponses: 4
    Dernier message: 28/04/2008, 18h17
  5. Tri et pagination du datagrid qui ne marche pas
    Par paradeofphp dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2007, 17h00

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