Page 1 sur 2

Tuto "Afficher des éléments page par page", Problè

Posté : 29 janv. 2008, 11:18
par Carnyx
Bonjour,

Je travaille sur la pagination de mes news mais je n'arrive pas à me connecter à ma base,
J'utilise ce tuto du forum

Dans cette partie du code :

Code : Tout sélectionner

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 = "test"; /* La base de données où sont enregistrées les informations */
Il n'y a pas de données à entrer ? je veux dire les codes de connection ?

Les codes de connection sont à entrer seulement dans cette partie là ?
Celle ci :

Code : Tout sélectionner

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

Posté : 29 janv. 2008, 11:31
par d0m
La première partie est justement la définition des paramètres de connexions, ce que tu appelle les codes.
Tu dois définir ceux qui correspondent à ta base.
Ces paramètres seront ensuite utilisés dans la fonction de connexion.

base de donnee

Posté : 29 janv. 2008, 11:35
par bruno.rotrou
slt
deja tu ouvre une connexion permanente avec
mysql_pconnect 
(pas forcement recommandé si pas indispensable) tu peux remplacer par
mysql_connect
ensuite lorsque tu sélectionne ta bd essais de renseigner tous les arguments
mysql_select_db($base_bd,$connexion);
A+

Posté : 29 janv. 2008, 12:14
par Carnyx
Ok merci

Je suis un peu dérouté par cette façon de se connecter, quand j'insert mes news, j'ai un code de connection tout simple :

Code : Tout sélectionner

$base = mysql_connect ('serveur', 'login', 'password'); mysql_select_db ('nom_base', $base);
Tout ce qui est entre guillemet est à changer par les codes de connection réel

Donc dans le tuto, ce qu'on entend par "fixer" c'est entrer les codes de connection; moi je les avais entré dans la deuxième partie, c'est l'explication à mon problème

Merci à vous

Sinon, il reste deux lignes d'erreur, elle serait peut-être dûes au terme "nouvelles" c'est peut-être le nom de la table ça ?

Posté : 29 janv. 2008, 12:18
par d0m
Sinon, il reste deux lignes d'erreur, elle serait peut-être dûes au terme "nouvelles" c'est peut-être le nom de la table ça ?
dur à dire sans voir ton code ni les messages d'erreurs...

Posté : 29 janv. 2008, 12:25
par Carnyx
Le message est :

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in E:\monsite_web ...nouvelles.php on line 223

ligne 212 j'ai :

while($nouv = mysql_fetch_assoc($nouvelles))


Et ligne 223 j'ai :

mysql_free_result($nouvelles);

Posté : 29 janv. 2008, 12:33
par d0m
Si ta requête échoue avec mysql_query, elle renverra false.
Et false n'est pas une ressource correcte.
il faut libérer seulement si la requête a fonctionnée.

Posté : 29 janv. 2008, 12:46
par Carnyx
La requête fonctionne bien pourtant

EDIT: enfin, à peu prêt, j'ai 6 news et deux pages, ces 6 news s'affichent sur la première alors que je n'en veux que 5, et c'est pareil sur la deuxième page (les 6 news s'affichent)

EDIT : Je reviens à ce code :

Code : Tout sélectionner

/* Requête pour compter les nouvelles présentes dans notre base de données */ $sql_nb = "SELECT COUNT(*) FROM `nouvelles`";
C'est celui du meme tuto,

"nouvelles" ça correspond à quoi ? c'est la table de la base ?
parce que si c'est ça il faut que je le change moi ?

Posté : 29 janv. 2008, 15:57
par iclo
Ne le prends pas mal, je crois qu'avant de se lancer des choses un petit peu avancées telle que la pagination, il serait nécessaire de potasser un peu les notions de bases des bases de données.
Ton dernier messages me laisse à penser que tu ne maitrise pas encore totalement la syntaxe des query sql de base, tel que le select.

Pas à après pas, il ne faut pas vouloir brûler les étapes...

Posté : 29 janv. 2008, 17:43
par Carnyx
Ok merci, 'nouvelles ' c'est bien la table

Sinon, toutes mes news s'affichent sur la même page à l'instar de ce topic

Mais je ne trouve pas le code 'is_int() ' dans ma page, (j'utilise toujours le même tuto de phpfrance)

EDIT : Sinon, j'ai toujours deux erreurs qui s'affichent sur la page :

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/monsite/Les_Nouvelles.php on line 200

et si je regarde la ligne 200 j'ai ce code :
?php 
    } 
    /* on libère la mémoire */ 
    mysql_free_result($resultat_1); 
    mysql_free_result($news); 
    /* On peut fermer la connexion à MySQL */ 
    mysql_close($connexion); 
    /* On affiche maintenant la barre de navigation */ 
?>
La ligne 200 correspond à celle où il y ($news)

Et puis la deuxième erreur serait dans ce code :
<?php 
    while($nouv = mysql_fetch_assoc($news)) 
    { 
?>


Voici le code de ma page entière :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Le Collectif des blablas</title>
<style type="text/css">
body {
	margin-left: 25px;
	margin-top: 60px;
	margin-right: 20px;
	margin-bottom: 10px;
	background-color: #FFFF66;
}
</style>
<link href="feuille_de_style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
a:link {
	text-decoration: none;
}
a:visited {
	text-decoration: none;
}
a:hover {
	text-decoration: underline;
}
a:active {
	text-decoration: none;
}
-->
</style>
<!-- pagination : le style  -->
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title></title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<meta name="author" content="Jean Molliné" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
<style type="text/css"> 
/* <![CDATA[ */  
body { 
    color: #000; 
    background-color: #efefef; 
    font-family: verdana, helvetica, sans-serif; 
    font-size: 80% !important; 
} 
p.situation { 
    text-align: right; 
    padding: 1em; 
} 
p.navigation { 
    text-align: center; 
    font-size: 0.85em; 
    text-decoration: underline; 
} 
p.date_nouv { 
    float: right; 
    font-size: 0.85em; 
} 
/* ]]> */ 
</style>
</head>
<body>


  
  
<!-- la fonction include-->
  <?php
// on inclut l'affichage de nos news  
include ('liste_news.php');  
?>
</div>

<!-- ici le code php pour les encarts de la zone1 -->
<div id="zone1">
  <?php include("./entetes.php"); ?>
  <?php include("./entetes2.php"); ?>
  <?php include("./entetes3.php"); ?>
</div>

<!--pagination -->
<?php 
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"); 
?>
<body>
<?php 
/** 
Commençons par fixer les paramètres : 
 */ 
 
/* Paramètres de connexion */ 
$admin_bd   = "blabla";              /* Le pseudonyme permettant à l'administrateur de se connecter */ 
$mdp_bd     = "mdp";                  /* Le mot d passe de l'administrateur de base de données */ 
$serveur_bd = "ftp.blabla.net";         /* L'adresse du serveur de base de données */ 
$base_bd    = "blabla";           /* La base de données où sont enregistrées les informations */ 



/* Paramètres de pagination */
$nb_nouv_par_page = 3;             /* Nombre de nouvelles qui seront affichées sur chaque page */ 
$url = "./http://www.blabla.net/Les_Nouvelles.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 `news`"; 

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

/* Calcul du nombre total de pages : on arrondit à l'entier supérieur (ceil() ) */ 
$nb_pages = ceil($nb_news / $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 un total de ". $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. 
     */ 
    $debut = $page_en_cours * $nb_nouv_par_page; 
    $sql_n = "SELECT nouv_titre, nouv_texte, nouv_date FROM news LIMIT ". $debut .", ". $nb_nouv_par_page .";"; 
    $news = mysql_query($sql_n); 
?>
<p class="situation"><?php echo($page_affichee); ?></p>
<?php 
    while($nouv = mysql_fetch_assoc($news)) 
    { 
?>
<p class="date_nouv">Publié le <?php echo($nouv['nouv_date']); ?></p>
<h3><?php echo($nouv['nouv_titre']); ?></h3>
<p><?php echo(nl2br($nouv['nouv_texte'])); ?></p>
<hr />
<?php 
    } 
    /* on libère la mémoire */ 
    mysql_free_result($resultat_1); 
    mysql_free_result($news); 
    /* 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 
     */ 
?>
<h3>Aucune nouvelle n'a encore été publiée à ce jour</h3>
<hr />
<?php 
} 
?>
</body>
</html>
<!-- fin de la pagination -->

Posté : 29 janv. 2008, 21:22
par Truc
Montre nous la structure de ta table en procédant comme indiqué ICI.

Tu dois avoir un souci sur la requête "$sql_n"... profite en pour l'afficher (echo $sql_n) et nous la montrer.

Posté : 29 janv. 2008, 21:49
par Carnyx
merci de m'aider

La structure de la table news :

Code : Tout sélectionner

Champ Type Null Défaut id mediumint(9) Oui NULL Date datetime Oui 0000-00-00 00:00:00 titre text Oui texte_news text Oui auteur varchar(30) Oui
Sinon la fonction include n'y est pour rien dans mon problème ?
 <?php
// on inclut l'affichage de nos news  
include ('liste_news.php');  
?>

Posté : 29 janv. 2008, 22:16
par Truc
Non l'include n'est pas en cause (pas encore :lol: )

L'erreur est le "copier/coller" ;)
Tu as cette requête :
$sql_n = "SELECT nouv_titre, nouv_texte, nouv_date FROM news LIMIT ". $debut .", ". $nb_nouv_par_page .";"; 
Tu demandes donc de sélectionner les champs "nouv_titre, nouv_texte, nouv_date" qui n'existent pas dans la table "news".
Remplace par les vrais noms dans la requête ainsi que dans le php pour l'affichage juste à la suite.

Posté : 29 janv. 2008, 22:43
par Carnyx
J'ai fait ce que tu as dit mais j'ai toujours le même problème d'affichage mysql :
<b>Warning</b>:  mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in <b>/home/monsite/Les_Nouvelles.php</b> on line <b>190</b><br />
<br />
<b>Warning</b>:  mysql_free_result(): supplied argument is not a valid MySQL result resource in <b>/home/monsite/Les_Nouvelles.php</b> on line <b>201</b><br />
EDIT: dans le tuto, il y a des 'date_nouv' et 'nouv_date', c'est la même chose ?

Posté : 29 janv. 2008, 23:22
par Truc
1. Toujours montrer les modifications que tu as faites
2. Faire un copier coller ici de la requête générée pour qu'on puisse la voir...
echo $sql_n;
3. "date_nouv" est la classe de CSS et n'a donc rien à voir avec "nouv_date" qui est le champ correspondant à la date de la nouvelle.