Affichage

Eléphant du PHP | 287 Messages

29 oct. 2008, 11:07

Bonjour,
Je sais que lorsqu'on veut limiter un nombre d'affichage d'élément de la BDD on utilise LIMIT 0,10 !
Mais là où je coince, c'est quand je veux afficher 10 résultats par page par exemple et mettre un lien permettant d'aller aux 10 résultats suivants et ainsi de suite...
Si vous pouviez m'aider...
Merci d'avance

Avatar du membre
ViPHP
ViPHP | 3008 Messages

29 oct. 2008, 11:14


Eléphant du PHP | 287 Messages

29 oct. 2008, 12:04

Bonjour,
J'ai trouvé un tuto sur le site OK
J'essaye de l'adapter à mon problème, mais j'ai quelques soucis.
Le nombre de page à afficher : OK
Mais j'ai quand même toutes mes données qui s'affiche sur chacune des pages. J'ai essayé de mattre un "LIMIT" mais ça m'a mis une erreur...
Voici mon code
<?php 
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"); 
?> 
<!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"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" /> 
<title></title> 
</head> 
<body> 
<?php 
/** 
Commençons par fixer les paramètres : 
 */ 
/* Paramètres de connexion */ 
$admin_bd   = "root";              /* Le pseudonyme permettant à l'administrateur de se connecter */ 
$mdp_bd     = "";                  /* Le mot d passe de l'administrateur de base de données */ 
$serveur_bd = "localhost";         /* L'adresse du serveur de base de données */ 
$base_bd    = "bdd";           /* La base de données où sont enregistrées les informations */ 

/* Paramètres de pagination */ 
$nb_nouv_par_page = 5;             /* Nombre de nouvelles qui seront affichées sur chaque page */ 
$url = "./affichage_blague_2.php?page="; 

/* On détermine quelle est la page qui est actuellement affichée */ 
$page_en_cours    = isset($_GET['page']) ? $_GET['page'] : 0; 
$page_affichee    = ($page_en_cours + 1); 

/* Connexion au serveur de base de données */ 
$connexion = mysql_pconnect($serveur_bd, $admin_bd, $mdp_bd); 
mysql_select_db($base_bd); 

/* Requête pour compter les nouvelles présentes dans notre base de données */ 
$sql_nb = "SELECT COUNT(*) FROM `blague`"; 

/* Exécution de la requête et récupération du résultat */ 
$resultat_1 = mysql_query($sql_nb); 
$nb_nouvelles = mysql_result($resultat_1, 0); 

/* Calcul du nombre total de pages : on arrondit à l'entier supérieur (ceil() ) */ 
$nb_pages = ceil($nb_nouvelles / $nb_nouv_par_page); 

/**  
Nous disposons maintenant de suffisament d'éléments pour créer notre barre de navigation. 
Première chose à vérifier : avons-nous plusieurs pages, et au moins une ? 
 */ 
if($nb_pages > 0) 
{ 
    /* On définit une variable qui contiendra les données de navigation */ 
    $barre_nav = ""; 
    /* Nous avons au moins une page : avons nous besoin d'une barre de navigation ? */ 
    if($nb_pages > 1) 
    { 
        /**  
        Nous avons plusieurs pages: nous allons afficher successivement les liens vers 
        les pages précédentes s'il y en a, la page en cours et les liens vers les pages 
        suivantes. Nous aurons une barre sous la forme : 1 | 2 | 3 etc.. en liens clicables 
        sauf pour la page en cours dont nous mettrons le chiffre en gras 
         */ 
        if($page_en_cours > 0) 
        { 
            for($i = 0; $i < $page_en_cours; $i++) 
            { 
                $p = $i + 1; 
                $barre_nav .= "<a href=\"". $url . $i ."\" title=\"page ". $p ."\">". $p ."</a> | "; 
            } 
        } 
        /** 
        On affiche la page en cours : notez le (+ 1) : pour les calculs, nous partons d'une  
        page 0 mais pour l'internaute, il est préférable de commencer à la page 1, donc on incrémente 
         */ 
        $barre_nav .= "<strong>". $page_affichee ."</strong>"; 
        /* Enfin on affiche (s'il y a lieu) les liens vers les pages suivantes */ 
        if(($page_affichee) < $nb_pages) 
        { 
            /* Il reste encore d'autres pages à afficher */ 
            $nb_suivantes = $nb_pages - ($page_affichee); 
            for($j = ($page_affichee); $j < $nb_pages; $j++) 
            { 
                $p = $j + 1; 
                $barre_nav .= " | <a href=\"". $url . $j ."\" title=\"page ". $p ."\">". $p ."</a>"; 
            } 
        } 
         
        /* On peut définir en plus la situation dans une autre variable à afficher ailleurs */ 
        $page_affichee = "Page ". $page_affichee ." sur ". $nb_pages ." pages."; 
    } 
    else 
    { 
        /* Nous n'avons qu'une seule page, on peut se contenter d'afficher juste page 1/1 */ 
        $barre_nav .= "Page 1/1"; 
    } 
    /** 
    On peut maintenant afficher notre page. On va commencer par récupérer les informations 
    On doit définir à partir de quelle nouvelle on doit récupérer les données dans la clause LIMIT. 
     */ 
mysql_select_db('bdd',$db);

$affichage = mysql_query("SELECT pseudo,date,texte_blague, DATE_FORMAT(date, '%d-%m-%Y') as datefr FROM blague ORDER BY date DESC") or die(mysql_error());
 
while ($donnees = mysql_fetch_array($affichage) )
{
?>

Postée par <?php echo $donnees['pseudo'];?>, le <?php echo $donnees['datefr'];?><br />
<?php echo $donnees['texte_blague'];?><br /><hr />
<?php 
    } 
    /* on libère la mémoire */ 
    mysql_free_result($resultat_1); 
    mysql_free_result($affichage); 
    /* On peut fermer la connexion à MySQL */ 
    mysql_close($connexion); 
    /* On affiche maintenant la barre de navigation */ 
?> 
<p class="navigation"><?php echo($barre_nav); ?></p> 
<?php 
} 
else 
{ 
    /**  
    Nous n'avons aucune page, on peut alors afficher un message autre  
    sans devoir nous préoccuper de la navigation 
     */ 
?> 

<hr /> 
<?php 
} 
?> 
</body> 
</html> 
Merci d'avance

Avatar du membre
ViPHP
ViPHP | 3008 Messages

29 oct. 2008, 12:28

Sans le LIMIT c'est normal que tu as tous les enregistrements. Quelle erreur as-tu en le mettant ?

Eléphant du PHP | 287 Messages

29 oct. 2008, 13:00

Bonjour,
Voilà mon code
SELECT pseudo,date,texte_blague, DATE_FORMAT(date, '%d-%m-%Y') as datefr FROM LIMIT blague ORDER BY date DESC
Et voilà mon ereur :
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in D:\Romuald\Travail\wamp\www\**************\affichage_blague_2.php on line 97
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT blague ORDER BY date DESC' at line 1

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 oct. 2008, 13:40

Modération :
Romuald632, veille à retirer de tes interventions
(messages d'erreurs, url, code, etc.) tout élément douteux.

J'ai édité ton précédent message pour retirer un tel élément.

Eléphant du PHP | 353 Messages

29 oct. 2008, 13:45

SELECT pseudo,date,texte_blague, DATE_FORMAT(date, '%d-%m-%Y') as datefr FROM LIMIT blague ORDER BY date DESC 
Attention à l'ordre de tes données sql

SELECT
FROM
WHERE
ORDER BY
LIMIT

Ici ton FROM blague ne fonctionne pas vu que ton limit (sans valeur?) est mal placé.

Cela devrait donner ceci :
SELECT pseudo,date,texte_blague, DATE_FORMAT(date, '%d-%m-%Y') as datefr 
FROM blague
ORDER BY date DESC 
LIMIT 0, 10
par exemple.

Après pour le cas d'une pagination, cela peut donner ceci par exemple :
$page = intval($_GET['page']);
$nb_per_page = 10;
$query = "SELECT pseudo,date,texte_blague, DATE_FORMAT(date, '%d-%m-%Y') as datefr 
FROM blague
ORDER BY date DESC 
LIMIT ".($page * $nb_per_page).",  $nb_per_page";

Invité
Invité n'ayant pas de compte PHPfrance

29 oct. 2008, 16:59

J'ai à nouveau un message d'erreur
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in ****** on line 97

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ****** on line 105

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in ****** on line 115

Petit nouveau ! | 5 Messages

29 oct. 2008, 17:13

mysql_select_db('bdd',$db); 
ce ne serait pas plutot :
mysql_select_db('bdd',$connexion); 
En effet ton erreur vient du fait que ta connexion n'est pas valide.

Vérifie a ce niveau là

Edit : mysql_select_db retourne un booléen verifie si il est a false ou non