Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 

#1 14-11-2005 15:53:15

klaus29
Membre
Lieu: Brest BZH powa !
Date d'inscription: 26-06-2005
Messages: 64
Site web

affichage sur lignes d'un tableau,et sur plusieurs page

Je voudrai afficher un certain nombre de news dans un tableau, une par ligne(avec sur la ligne id, titre, dtae, auteur)

Code:

<table width="100%"  border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td class="titre"><div align="center">id</div></td>
    <td class="titre"><div align="center">titre</div></td>
    <td class="titre"><div align="center">Date &amp; Heure</div></td>
    <td class="titre"><div align="center">Auteur</div></td>
    <td class="titre"><div align="center">Editer</div></td>
    <td class="titre"><div align="center">Supprimer</div></td>
  </tr><?php include('../connection.php'); 
$requete = "SELECT * FROM `news` ORDER by `id` DESC";
$envoi = mysql_query($requete);
while($news = mysql_fetch_array($envoi)) {
echo('
  <tr>
    <td><div align="center">'); echo($news['id']); echo('</div></td>');
    echo('<td><div align="center">'); echo($news['titre']); echo('</div></td>');
    echo('<td><div align="center">'); echo date('d.m.y', $news['date']);echo(' à ');echo date('H:i', $news['date']); echo('</div></td>');
    echo('<td><div align="center">'); echo($news['auteur']); echo('</div></td>');
    echo('<td><div align="center">'); echo('[Editer]'); echo('</div></td>');
    echo('<td><div align="center">'); echo('[Supprimer]'); echo('</div></td>
  </tr>');
 }
 ?>
</table>

Je voudrais recupérer le nombre de news a afficher de la base de donnée.
Et afficher les autres sur d'autres pages avec numeration et lien pour y aller un peu comme le modele de phpbb :

Code:

Aller à la page Précédente  1, 2, 3, 4, 5 ... 194, 195, 196  Suivante

mais je n'y arrive pas.

Hors ligne

 

#2 14-11-2005 16:13:33

kazhar
Ex-Webmaster
Lieu: Orléans
Date d'inscription: 25-06-2004
Messages: 3381
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

alors, alors
deja, pour obtenir le nombre d'entrées dans une base, il suffit de faire cela :

Code:

SELECT count(*)
FROM table;

donc, ensuite, quand tu dis que tu n'y arrive pas, cela signifie quoi ?
tu fait quoi ? tu a quoi comme erreur ?

Hors ligne

 

#3 15-11-2005 11:49:23

klaus29
Membre
Lieu: Brest BZH powa !
Date d'inscription: 26-06-2005
Messages: 64
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

et bien surtout je ne voit pas du tout comment je pourai fair ca...

Hors ligne

 

#4 15-11-2005 12:11:31

kazhar
Ex-Webmaster
Lieu: Orléans
Date d'inscription: 25-06-2004
Messages: 3381
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

eh bien, il faut que sur chaque page, tu recupere les entrées à partir de la n ieme, à la N ieme
ou n est le nombre de pages * le nombre d'entrées par pages (tu suis ?)

pour ca, dans ta requete, tu place un LIMIT n, N
apres, tu n'a plus qu'à calculer n et N pour chaque page (en sachant que tu a le nombre de pages, c'est pas trop compliqué wink )

Hors ligne

 

#5 19-11-2005 14:11:14

klaus29
Membre
Lieu: Brest BZH powa !
Date d'inscription: 26-06-2005
Messages: 64
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

kazhar a écrit:

(tu suis ?)[...](en sachant que tu a le nombre de pages, c'est pas trop compliqué wink )

hum je je suis pas tout, mais je ne vois pas trop comment faire sa...

Hors ligne

 

#6 19-11-2005 16:41:17

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

Regarde sur mon site http://stephane.baladeauboutdumonde.com - clic sur un album dans la liste de gauche et tu verras la barre sous les vignettes en haut, si c'est ça que tu veux, la fonction ci-dessous fera l'affaire. Elle est peut être à optimiser un peu mais elle tourne bien.

Code:

  #--------------------------------------------------------------------------------------------#
  # GERERATION D'UNE BARRE DE NAVIGATION AVEC FLECHES ET NUMEROS                               #
  # $table    -> table sur lequel on recupere le nombre de lignes                              #
  # $fichier  -> nom du fichier dans l'url                                                     #
  # $debut    -> nombre de debut pour la fourchette de tri                                     #
  # $nbmax    -> nombre de fin pour la fourchette de tri et nombre de lignes par page          #
  # $nb_page  -> nombre de chiffres dans la barre de navigation, par defaut 20                 #
  #--------------------------------------------------------------------------------------------#
  function barre_nav($table,$fichier,$debut,$nbmax,$nb_page=20) {
    $query = mysql_query('SELECT COUNT(*) FROM '.$table);
    $num_nb = mysql_fetch_array($query);
    $nbtotal = $num_nb[0];

    $td = '&nbsp;';
    $f_next = '>';
    $f_back = '<';
    $f_off = '';
    $f_begin = '<<';
    $f_end = '>>';

    if ($nbtotal > $nbmax) {
      //====== RETOUR AU DEBUT ======//
      if ($debut >= $nbmax) {
        echo $td.'<a href="'.$fichier.'?debut=0">'.$f_begin.'</a>&nbsp;';
        }
      else {
        echo $td.$f_off.$f_off.'&nbsp;';
        }

      //====== RETOUR PRECEDENT ======//
      if ($debut >= $nbmax) {
        echo $td.'<a href="'.$fichier.'?debut='.($debut-$nbmax).'">'.$f_back.'</a>&nbsp;';
        }
      else { 
        echo $td.$f_off.'&nbsp;'; 
        }

      //====== NUMERO DES PAGES ======//
      if ($debut >= ($nb_page * $nbmax)) {
        $cpt_fin = ($debut / $nbmax) + 1;
        $cpt_deb = $cpt_fin - $nb_page + 1;
        }
      else {
        $cpt_deb = 1;
        $cpt_fin = (int)($nbtotal / $nbmax);
        if (($nbtotal % $nbmax) != 0) $cpt_fin++;
        if ($cpt_fin > $nb_page) $cpt_fin = $nb_page;
        }

      for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
        if ($cpt == ($debut / $nbmax) + 1) { 
          echo $td.'<i class="'.$css_i.'">'.$cpt.'</i>&nbsp;';
          }
        else {
          echo $td.'<a href="'.$fichier.'?debut='.(($cpt-1)*$nbmax).'">'.$cpt.'</a>&nbsp;';
          }
        }

      //====== SUIVANT ======//
      if ($debut + $nbmax < $nbtotal) {
        echo $td.'<a href="'.$fichier.'?debut='.($debut+$nbmax).'">'.$f_next.'</a>&nbsp;';
        }
      else { 
        echo $td.$f_off.'&nbsp;';
        }

      //====== VERS LA FIN ======//
      $fin = ($nbtotal - ($nbtotal % $nbmax));
      if (($nbtotal % $nbmax) == 0) $fin = $fin - $nbmax;
      if ($fin != $debut) {
        echo $td.'<a href="'.$fichier.'?debut='.$fin.$criteres.'">'.$f_end.'</a>&nbsp;'; 
        }
      else { 
        echo $td.$f_off.'&nbsp;'; 
        }
      }
    }
  #--------------------------------------------------------------------------------------------#

Tu l'appele comme ca :

Code:

if (empty($debut)) $debut = 0;
if (empty($nbmax)) $nbmax = 20;
echo barre_nav('nom_de_la_table','fichier.php',$debut,$nbmax);

Il faut aussi modifier ta requête SQL avec un LIMIT '.$debut.', '.$nbmax.' pour ne récuperer que les enregistrement nécessaires par pages

Dernière modification par Shiva (19-11-2005 16:53:47)

Hors ligne

 

#7 04-12-2005 05:56:02

klaus29
Membre
Lieu: Brest BZH powa !
Date d'inscription: 26-06-2005
Messages: 64
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

Voilà le script :

Code:

<? 
include('../connection.php'); 
$requete = "SELECT * FROM `news` ORDER by `id` DESC  LIMIT '.$debut.', '.$nbmax.'";
$envoi = mysql_query($requete);
if (empty($debut)) $debut = 0;
if (empty($nbmax)) $nbmax = 20;
echo barre_nav('news','nav.php',$debut,$nbmax); 
mysql_close(); ?>

Il affiche :

Code:

Fatal error: Call to undefined function: barre_nav() in /var/www/free.fr/7/7/klaus29/newpf/admin/archives_news.php on line 23

La ligne 23 c'est

Code:

echo barre_nav('news','nav.php',$debut,$nbmax);

Où est le probleme ?

Hors ligne

 

#8 04-12-2005 06:42:26

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

Et la fonction, tu l'as mise où ?
car là la réponse : "appel d'une fonction indéfinie" est clair, il ne l'a trouve nulle part

Dernière modification par Shiva (04-12-2005 06:42:46)

Hors ligne

 

#9 04-12-2005 06:47:41

klaus29
Membre
Lieu: Brest BZH powa !
Date d'inscription: 26-06-2005
Messages: 64
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

et bien je l'ai mise dans le fichier nav.php

Hors ligne

 

#10 04-12-2005 06:59:09

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

Ca ne fonctionne pas comme ça smile
Soit tu met la fonction dans ton fichier connexion.php, soit tu créer un fichier function.php et tu la colle dedans, ensuite tu l'inclus comme ton fichier connexion.php
Sinon pour le nom du fichier en second paramètre de la fonction il faut mettre celui qui affiche les données donc certainement archives_news.php si c'est bien celui là qui doit afficher les infos et la bare de navigation

Hors ligne

 

#11 04-12-2005 08:15:49

klaus29
Membre
Lieu: Brest BZH powa !
Date d'inscription: 26-06-2005
Messages: 64
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

oki oki, c'est ce que j'ai fai là, mais maintenant sa n'affiche rien :

Code:

<? 
include('../connection.php'); 
include('functions.php'); 
$requete = "SELECT * FROM `news` ORDER by `id` DESC  LIMIT '.$debut.', '.$nbmax.'";
$envoi = mysql_query($requete);

if (empty($debut)) $debut = 0;
if (empty($nbmax)) $nbmax = 20;
echo barre_nav('news','archives_news.php',$debut,$nbmax); 
mysql_close(); ?>

Hors ligne

 

#12 04-12-2005 08:33:54

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

Faut que ton code ça ressemble à çà :

Code:

include('functions.php'); 
if (empty($debut)) $debut = 0;
if (empty($nbmax)) $nbmax = 20;
$requete = "SELECT * FROM `news` ORDER by `id` DESC  LIMIT '.$debut.', '.$nbmax.'";

Car pour le moment les deux variables $nbmax et $debut sont définies après ta requête SQL donc forcement y à rien par défaut dans le LIMIT

Hors ligne

 

#13 04-12-2005 09:15:06

klaus29
Membre
Lieu: Brest BZH powa !
Date d'inscription: 26-06-2005
Messages: 64
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

rha je capte vraiment rien

Code:

<? 

include('functions.php'); 
include('../connection.php'); 
if (empty($debut)) $debut = 0;
if (empty($nbmax)) $nbmax = 20;
$requete = "SELECT * FROM `news` ORDER by `id` DESC  LIMIT '.$debut.', '.$nbmax.'";
mysql_close(); ?>

Et il n'affiche toujour rien.

Hors ligne

 

#14 04-12-2005 09:44:49

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

Le dernier morceau de code que tu a posté est vraiment ce qu'il y a dans ton fichier ou est-ce seulement un morceau ?
car avec ceci :

Code:

<? 
include('functions.php'); 
include('../connection.php'); 
if (empty($debut)) $debut = 0;
if (empty($nbmax)) $nbmax = 20;
$requete = "SELECT * FROM `news` ORDER by `id` DESC  LIMIT '.$debut.', '.$nbmax.'";
mysql_close(); ?>

c'est normal que ça n'affiche rien !
Inclus tu le fichier archives_news.php dans un autre ?
Quand j'ai voulu dire que ton code doit ressembler à çà :

Code:

include('functions.php'); 
if (empty($debut)) $debut = 0;
if (empty($nbmax)) $nbmax = 20;
$requete = "SELECT * FROM `news` ORDER by `id` DESC  LIMIT '.$debut.', '.$nbmax.'";

ça voulais dire qu'il faut mettre les deux lignes

Code:

if (empty($debut)) $debut = 0;
if (empty($nbmax)) $nbmax = 20;

au dessus de

Code:

$requete = "SELECT * FROM `news` ORDER by `id` DESC  LIMIT '.$debut.', '.$nbmax.'";

T'as pas enlevé le reste du code ? smile
Ton fichier au complet, il ressemble à quoi ?

Hors ligne

 

#15 18-12-2005 09:40:02

klaus29
Membre
Lieu: Brest BZH powa !
Date d'inscription: 26-06-2005
Messages: 64
Site web

Re: affichage sur lignes d'un tableau,et sur plusieurs page

bon désolé du retard, je n'ai pas pu mettre le nez dedans a cause des cours, maintenant que je suis en vacance, j'en profite ^^

et bien le code de la page est :

Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="css.css"  type="text/css" rel="stylesheet" />
</head>

<body><div align="center" class="title">Archives des news<br>
    </div>
      <hr size="0"><br><br><br><br><br><br>
<? 

include('functions.php'); 
include('../connection.php'); 
if (empty($debut)) $debut = 0;
if (empty($nbmax)) $nbmax = 20;
$requete = "SELECT * FROM `news` ORDER by `id` DESC  LIMIT '.$debut.', '.$nbmax.'";
mysql_close(); ?>
</body>
</html>

et le fichier functions.php

Code:

<?  #--------------------------------------------------------------------------------------------#
  # GERERATION D'UNE BARRE DE NAVIGATION AVEC FLECHES ET NUMEROS                               #
  # $table    -> table sur lequel on recupere le nombre de lignes                              #
  # $fichier  -> nom du fichier dans l'url                                                     #
  # $debut    -> nombre de debut pour la fourchette de tri                                     #
  # $nbmax    -> nombre de fin pour la fourchette de tri et nombre de lignes par page          #
  # $nb_page  -> nombre de chiffres dans la barre de navigation, par defaut 20                 #
  #--------------------------------------------------------------------------------------------#
  function barre_nav($table,$fichier,$debut,$nbmax,$nb_page=20) {
    $query = mysql_query('SELECT COUNT(*) FROM '.$table);
    $num_nb = mysql_fetch_array($query);
    $nbtotal = $num_nb[0];

    $td = '&nbsp;';
    $f_next = '>';
    $f_back = '<';
    $f_off = '';
    $f_begin = '<<';
    $f_end = '>>';

    if ($nbtotal > $nbmax) {
      //====== RETOUR AU DEBUT ======//
      if ($debut >= $nbmax) {
        echo $td.'<a href="'.$fichier.'?debut=0">'.$f_begin.'</a>&nbsp;';
        }
      else {
        echo $td.$f_off.$f_off.'&nbsp;';
        }

      //====== RETOUR PRECEDENT ======//
      if ($debut >= $nbmax) {
        echo $td.'<a href="'.$fichier.'?debut='.($debut-$nbmax).'">'.$f_back.'</a>&nbsp;';
        }
      else { 
        echo $td.$f_off.'&nbsp;'; 
        }

      //====== NUMERO DES PAGES ======//
      if ($debut >= ($nb_page * $nbmax)) {
        $cpt_fin = ($debut / $nbmax) + 1;
        $cpt_deb = $cpt_fin - $nb_page + 1;
        }
      else {
        $cpt_deb = 1;
        $cpt_fin = (int)($nbtotal / $nbmax);
        if (($nbtotal % $nbmax) != 0) $cpt_fin++;
        if ($cpt_fin > $nb_page) $cpt_fin = $nb_page;
        }

      for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
        if ($cpt == ($debut / $nbmax) + 1) { 
          echo $td.'<i class="'.$css_i.'">'.$cpt.'</i>&nbsp;';
          }
        else {
          echo $td.'<a href="'.$fichier.'?debut='.(($cpt-1)*$nbmax).'">'.$cpt.'</a>&nbsp;';
          }
        }

      //====== SUIVANT ======//
      if ($debut + $nbmax < $nbtotal) {
        echo $td.'<a href="'.$fichier.'?debut='.($debut+$nbmax).'">'.$f_next.'</a>&nbsp;';
        }
      else { 
        echo $td.$f_off.'&nbsp;';
        }

      //====== VERS LA FIN ======//
      $fin = ($nbtotal - ($nbtotal % $nbmax));
      if (($nbtotal % $nbmax) == 0) $fin = $fin - $nbmax;
      if ($fin != $debut) {
        echo $td.'<a href="'.$fichier.'?debut='.$fin.$criteres.'">'.$f_end.'</a>&nbsp;'; 
        }
      else { 
        echo $td.$f_off.'&nbsp;'; 
        }
      }
    }
  #--------------------------------------------------------------------------------------------# ?>

Le fichier archive_news.php n'eest pas inclue dans un autre, il est inclue par une frame.comme dans le panneau d'admin d'un forum phpbb en fait.

Hors ligne