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 :

Bug de pagination [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Points : 22
    Points
    22
    Par défaut Bug de pagination
    Bon voila je me suis déjà adresser a vous il y a quelque jours pour un problème de moteur de recherche et vous m'avez vraiment aidé mais je me retrouve de nouveau confronté à une difficulté que je n'arrive pas a surmonter. Voila après avoir fais le moteur de recherche on ma demander d'y intégrer une liste déroulante qui permettrait de choisir le nombre de résultat par page . ça j'ai fait mais le seul problème et la pagination j'ai bien le nombre de résultat mais j'ai qu'une page j'ai essayer différente méthode mon script arrive a calculer le nombre de page nécessaire pour afficher tout les résultat mais quand je clique sur le numéro de page j'ai des erreurs pourriez vous m'aidez svp? =D

    Voici le html


    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
    <html>
    <link rel="stylesheet" Type="text/css" Href="stylesheet.css">
     
    <Title>XXX</title>
     
     
    <Body>
     
    <h2>XXXXXX</h2>
     
    <form method="POST" action="recherche.php" align="center">
    <h5>Veuillez entrer le nom du produit ou sa référence</h5>
    <input  type="text" name="critere"><br /> 
    <h5>Nombre de résultat par page</h5> 
      <select name="choix"  >
        <option value="5" selected="selected">5</option>
        <option value="10">10</option>
        <option value="20">20</option>
      </select><br><br>
    <input type="submit" value="Recherche"/>
    </form>


    et voici le php

    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
    <?php
    $host = "localhost";
     
    $user = "xxxxx";
     
    $password = "xxxx";
     
    $bdd = "XXXXX";
     
    $connexion = @ mysql_connect($host, $user,$password) or exit("Impossible de se connecter !") ;
    mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
     
    // Numero de page (1 par défaut)
    if( isset($_GET['page']) && is_numeric($_GET['page']) )
    	$page = $_GET['page'];
    else
    	$page = 1;
     
    // Nombre d'info par page
    $pagination = $_POST['choix'];
    // Numéro du 1er enregistrement à lire
    $limit_start = 0;
    $crit=$_POST['critere'];
    // Préparation de la requête
    $sql = "SELECT * FROM produit
    		WHERE LIBELLE_PRODUIT LIKE '%".$crit."%'
    		or DESCRIPTION LIKE '%".$crit."%' or REFERENCE_PRODUIT LIKE '%".$crit."%' ORDER BY REFERENCE_PRODUIT ASC LIMIT $limit_start, $pagination";
     
    // Requête SQL
    $resultat = mysql_query($sql);
     
    // Traitement et affichage des données
    if (mysql_num_rows($resultat) > 0){
    echo '<table align="center" border="2" bordercolor="red">';
    	echo '<tr><th>Image</th><th>Référence</th><th>Libellé</th><th>Prix TTC</th><th>Prix HT</th><th>Description</th></tr>';
    while ( $r = mysql_fetch_assoc($resultat) ) {
    	echo '<tr>';
    		echo '<td height="22" align="center"><a href="'.$r['GRANDE_IMAGE_SITE_ORIGINE'].'"><img src="'.$r['PETITE_IMAGE_SITE_ORIGINE'].'" high=70 width=70/></a></td>';
    		echo '<td height="22" align="center">'.$r['REFERENCE_PRODUIT'].'</td>';
    		echo '<td height="22" align="center">'.$r['LIBELLE_PRODUIT'].'</td>';
    		echo '<td height="22" align="center">'.$r['PRIX_TTC'].'</td>';
    		echo '<td height="22" align="center">'.$r['PRIX_HT'].'</td>';
    		echo '<td height="22" align="center">'.$r['DESCRIPTION'].'</td>';
    		echo '</tr>';
    	}
    	echo '</table>';
    } else {
    	echo "<p>Aucun enregitrement ne correspond</p>";
    }
    	/* ICI VOTRE CODE NORMAL */
    	/* Affichage d'un élément */
     
     
     
    // Nb d'enregistrement total
    $nb_total = mysql_query("SELECT * FROM produit
    		WHERE LIBELLE_PRODUIT LIKE '%".$crit."%'
    		or DESCRIPTION LIKE '%".$crit."%' or REFERENCE_PRODUIT LIKE '%".$crit."%'");
    $nb_total = mysql_num_rows($nb_total);
     
     
    // Pagination
    $nb_pages = ceil($nb_total / $pagination);
     
    echo '<p>[ Page :';
    // Boucle sur les pages
    for ($i = 1 ; $i <= $nb_pages ; $i++) {
    	if ($i == $page )
    		echo " $i";
    	else
    		echo " <a href=\"?page=$i\">$i</a> ";
    }
    echo ' ]</p>';
     
    ?>
    je ne sais vraiment pas quoi faire pour que les résultats suivant s'affichent sur les pages =(

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Bonjour,

    Peux-tu préciser quelles sont les erreurs ?
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Points : 22
    Points
    22
    Par défaut
    Bonjour ,en fait quand je clique sur le numéro d'une page au lieu d'avoir les autre résultat j'obtient et de plus je n'arrive pas a faire de bouton précédent suivant

    Notice: Undefined index: choix in C:\Program Files\EasyPHP-5.3.6.0\www\Electromodel\recherche.php on line 20

    Notice: Undefined index: critere in C:\Program Files\EasyPHP-5.3.6.0\www\Electromodel\recherche.php on line 23

    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-5.3.6.0\www\Electromodel\recherche.php on line 33

    Aucun enregitrement ne correspond

    Warning: Division by zero in C:\Program Files\EasyPHP-5.3.6.0\www\Electromodel\recherche.php on line 64
    [ Page : ]

    Suite a une mauvaise manipulation j'ai mis le sujet en résolu =s désolé.

  4. #4
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Bonjour,

    Le message t'indique que tu essaies de récupérer les paramètres choix et critere qui ont été postés.

    Or, quand tu crées tes liens, tu ne passes qu'un paramètre via GET.

    Tu peux t'inspirer de cette source pour corriger : http://php.developpez.com/telecharge...tat-de-requete
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    pour ne pas perdre en route (après pagination) les infos de ton formulaire (choix, critere), le mieux est de les mettre en session.
    D'autre part, ta pagination ne fonctionne pas !

    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
    <?php session_start(); // a mettre tout en haut de page !
    // ...
    // -------------
    // Numero de page (1 par défaut)
    if( isset($_GET['page']) && is_numeric($_GET['page']) )
    	$page = $_GET['page'];
    else
    	$page = 1;
    // -------------
    // Nombre d'info par page
    if(isset($_SESSION['choix']) && is_numeric($_SESSION['choix'])) {
    	$nb_par_page = $_SESSION['choix'];
    } else {
    	$nb_par_page = 5; // nombre par defaut
    }
    if(isset($_POST['choix']) && is_numeric($_POST['choix'])) {
    	$_SESSION['choix'] = $_POST['choix'];
    	$nb_par_page = $_SESSION['choix'];
    }
    // -------------
    // critere de recherche
    if(isset($_POST['critere']) && $_POST['critere']!='') {
    	$_SESSION['critere'] = $_POST['critere'];
    }
    	$crit = $_SESSION['critere'];
    // -------------
    // nombre total repondant a la recherche
    $NbreTotal_query 	= "SELECT COUNT(*) AS nbreTotal FROM produit ".
    			" WHERE (".
    			" LIBELLE_PRODUIT LIKE '%".$crit."%' ".
    			" or DESCRIPTION LIKE '%".$crit."%' ".
    			" or REFERENCE_PRODUIT LIKE '%".$crit."%' ".
    			");";
    $NbreTotal_result 	= mysql_query($NbreTotal_query) or die('Erreur SQL :<br />'.$NbreTotal_query.'<br />'.mysql_error());
    $NbreTotal_row 		= mysql_fetch_array($NbreTotal_result);
    $NbreTotal_nombre 	= $NbreTotal_row['nbreTotal'];
    // -------------
    // nombre de pages a creer
    	$nb_pages = ceil($NbreTotal_nombre / $nb_par_page);
    // -------------
    // Numéro du 1er enregistrement à lire
    // On calcule le numero du premier message qu on prend pour le LIMIT de MySQL (pagination)
    $num_debut 	= ($page-1) * $nb_par_page;
    // -------------
    // Préparation de la requête
    	$rech_query 	= "SELECT * FROM produit ".
    			" WHERE (".
    			" LIBELLE_PRODUIT LIKE '%".$crit."%' ".
    			" or DESCRIPTION LIKE '%".$crit."%' ".
    			" or REFERENCE_PRODUIT LIKE '%".$crit."%' ".
    			") ".
    			" ORDER BY REFERENCE_PRODUIT ASC ".
    			" LIMIT ".$num_debut.",".$nb_par_page.";";
    	$rech_result 	= mysql_query($rech_query) or die('Erreur SQL :<br />'.$rech_query.'<br />'.mysql_error());
    // -------------
    while ($rech_row = mysql_fetch_array($rech_result))
    {
    // AFFICHAGE des resultats
     
    // .....
     
    }
    // -------------
    // PAGINATION
    // -------------
    // page precedente
    if($page!=1) {
    	echo ' <a href="?page='.($page-1)'">préc.</a> ';
    }
    // liens vers chacune des pages
    if($nb_pages > 1) { 
    	for ($p=1; $p<=$nb_pages; $p++)
    	{
    		if ($p == $page) { echo ' <b>'.$p.'</b> '; }
    		else { echo ' <a href="?page='.$p'">'.$p.'</a> '; }
    	}
    // page suivante
    if($page!=$nb_pages) {
    	echo ' <a href="?page='.($page+1)'">suiv.</a> ';
    }
    ?>
    Dernière modification par Invité ; 30/06/2011 à 13h27.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Points : 22
    Points
    22
    Par défaut
    je sais que ma pagination de fonctionne pas et c'est bien ça le problème^^
    Après j'aurais le code que tu me passe c'est comme si t'envoyer un traité de philo a quelqu'un qui en a jamais fais moi je suis que novice en php alors que j'ai essayer de capter ton code (bien commenter d'ailleurs ) j'ai rien compris..parce que tout mon code marche c'est juste que je n'arrive pas a faire de pagination ^^ c'est ça le problème =s

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Points : 22
    Points
    22
    Par défaut
    En fait c'était des erreur de transmission de donnée d'une page a l'autre et j'ai réussi a réglé le problème grace a de l'aide ^^mais c réglé =D en tt cas merci pour votre aide^^

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

Discussions similaires

  1. Pagination recherche Wordpress
    Par gab_dev dans le forum WordPress
    Réponses: 2
    Dernier message: 26/12/2014, 00h31
  2. [PHP 5.2] bug de condition dans pagination
    Par gtraxx dans le forum Langage
    Réponses: 10
    Dernier message: 09/04/2009, 18h58

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