Tuto "Afficher des éléments page par page", Problème de connection BDD

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Tuto "Afficher des éléments page par page", Problème de connection BDD

par Carnyx » 01 févr. 2008, 00:14

Normalement le lien est sur le 1 et pas sur le bout de trait qui est en dessous

Je vérifie demain (car mon hébergeur est visiblement planté)

EDIT Après vérification, ce n'est pas un lien, c'est bien le 1 qui fait le lien

par iclo » 31 janv. 2008, 11:22

C'est un lien, non ??

par Invité » 31 janv. 2008, 10:25

Ok, il vaut mieux que je le change alors?


Sinon encore un petit truc, concernant les chiffres de la pagination, est-ce normal si ça fait comme ça :

Image

Il y a un petit trait sous le "1", je suis maniac hein ? :oops:

par d0m » 31 janv. 2008, 09:41

Je dirais plus que c'est sous le caractère | qu'il y a un trait

par Carnyx » 31 janv. 2008, 01:11

Ok, il vaut mieux que je le change alors?


Sinon encore un petit truc, les chiffres de la pagination, est-ce normal si ça fait comme ça :

Image

Il y a un petit trait sous le "1", je suis maniac hein ? :oops:

par Truc » 31 janv. 2008, 01:02

Il y a peut-être un problème avec le nom d'une des colonnes : "Date" est un mot réservé en SQL qui crée peut-être un conflit...
C'est vrai ce que disait Cyrano :wink:

par Carnyx » 31 janv. 2008, 00:40

Ca marche avec ce code :
 $sql_n = "SELECT titre, Date, auteur, texte_news FROM news ORDER BY DATE LIMIT ". $debut .", ". $nb_nouv_par_page .";"; 
C'est correct comme écriture ?

EDIT : arf, ça met les dates en chronologique au lieu de anti chronologique

Re EDIT : j'ai trouvé :
 $sql_n = "SELECT titre, Date, auteur, texte_news FROM news ORDER BY DATE DESC LIMIT ". $debut .", ". $nb_nouv_par_page .";"; 

par Truc » 31 janv. 2008, 00:24

A aucun moment tu demandes un ordre et encore moins un ordre chronologique sur les dates.
Pour ça tu dois ajouter "ORDER BY" suivi du champ sur lequel le résultat doit être trié.

par Carnyx » 31 janv. 2008, 00:08

Ok et merci beaucoup pour votre aide, mon site ressemble à un site maintenant

Je m’étais embrouillé avec les champs des tables, j’ai relu tout le code à tête reposée ce matin et j’ai trouvé. #-o


Sinon un autre petit truc, les dates doivent s’afficher de façon chronologique normalement avec ce code :
    $sql_n = "SELECT titre, Date, auteur, texte_news FROM news LIMIT ". $debut .", ". $nb_nouv_par_page .";";
Parce que ça ne marche pas pour moi en tout cas

par iclo » 30 janv. 2008, 01:31

Tu as modifié ton select sql, il ne récupère plus le champ contenu dans la table et donc php te signale que ce champ n'existe pas dans le resultat du select.

Désolé d'insister, mais j'ai vraiment l'impression que tu modifie ce code au petit bonheur la chance en espérant que ça finira pas fonctionner. Je te conseille vraiment de prendre un quart d'heure pour lire un tutorial sur comment utiliser mySql avec php, ça t'aidera à comprendre par toi-même, ce qui cloche dans ce code.

par Carnyx » 29 janv. 2008, 23:52

je viens de changer une ligne et ça a l'air d'aller mieux (c'est les champs de ma base)

$sql_n = "SELECT Date, titre, texte_news, auteur FROM news LIMIT ". $debut .", ". $nb_nouv_par_page .";";

Je continue à chercher

je n'ai pas encore entré le code que tu m'as donné mais les erreurs mysql ont disparues, par contre j'ai :

Code : Tout sélectionner

Notice: Undefined index: contenu in e:\monsite\les_nouvelles.php on line 196

Ligne 196 c'est :
<p><?php echo(nl2br($nouv['contenu'])); ?></p>
Juste après l'exécution de la requête mais avant la boucle while(), essaye d'ajouter pour voir ce qui se passe :
PHP:
echo('<pre>' . "\n");
var_dump($news);
echo('</pre>' . "\n");


Et dis nous ce que ça t'affiche...
Apparemment j'ai cette ligne qui s'affiche sur la page html :

Code : Tout sélectionner

<pre> resource(10) of type (mysql result) </pre>

:fete: Bon maintenant j'ai un "double double" affichage mais différent :

Il y a un bel affichage (css du tuto je pense) qui se met en place sur la page html, j'ai bien 5 news sur la première page et 2 news sur la deuxième, mais il manque le contenu de la news, sinon ça serait nickel

Par contre :shock: il y a à nouveau les news qui s'affichent en totalité (les 7) sur la première page mais aussi sur la deuxième page .
EDIT : je viens de trouver pour le double affichage, c'est ma page liste_news.php qui fait doublon

par Cyrano » 29 janv. 2008, 23:47

Il y a peut-être un problème avec le nom d'une des colonnes : "Date" est un mot réservé en SQL qui crée peut-être un conflit... et donc génère une erreur. :-k

C'est pour ça que dans le tuto, j,ai nommé les colonnes en les préfixant avec les premiers caractères du nom de la table.

Juste après l'exécution de la requête mais avant la boucle while(), essaye d'ajouter pour voir ce qui se passe :
echo('<pre>' . "\n");
var_dump($news);
echo('</pre>' . "\n");
Et dis nous ce que ça t'affiche...

par Carnyx » 29 janv. 2008, 23:40

Je remets le code après les modifications :
<!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> Mon site </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"); 
?>

<?php 
/** 
Commençons par fixer les paramètres : 
 */ 
 
/* Paramètres de connexion */ 
$admin_bd   = "monsite";           /* 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.hebergement.net";   /* L'adresse du serveur de base de données */ 
$base_bd    = "monSite";           /* 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 = "./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 titre, contenu, Date, auteur 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['Date']); ?></p>
<h3><?php echo($nouv['titre']); ?></h3>
<p><?php echo(nl2br($nouv['contenu'])); ?></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 -->

<!-- Le pied de page -->
<div id="pied_de_page">
  <p>Copyright "Le collectif 2007, tous droits r&eacute;serv&eacute;s</p>
</div>
</body>
</html>
J'ai donc toujours les erreurs 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 />

Les news s'affichent entièrement sur la page 1 mais aussi entièrement sur la page 2 (donc deux fois la même page de news)

EDIT: je viens de changer une ligne et ça a l'air d'aller mieux (c'est les champs de ma base)

$sql_n = "SELECT Date, titre, texte_news, auteur FROM news LIMIT ". $debut .", ". $nb_nouv_par_page .";";

Je continue à chercher

par Truc » 29 janv. 2008, 23:22

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.

par Carnyx » 29 janv. 2008, 22:43

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 ?