Forum de discussion et d'aide au php
Vous n'êtes pas identifié.
|
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. |
||
Pages: 1 2
Je voudrai afficher un certain nombre de news dans un tableau, une par ligne(avec sur la ligne id, titre, dtae, auteur)
<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 & 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 :
Aller à la page Précédente 1, 2, 3, 4, 5 ... 194, 195, 196 Suivante
mais je n'y arrive pas.
Hors ligne
alors, alors
deja, pour obtenir le nombre d'entrées dans une base, il suffit de faire cela :
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
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é
)
Hors ligne
kazhar a écrit:
(tu suis ?)[...](en sachant que tu a le nombre de pages, c'est pas trop compliqué
)
hum je je suis pas tout, mais je ne vois pas trop comment faire sa...
Hors ligne
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.
#--------------------------------------------------------------------------------------------#
# 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 = ' ';
$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> ';
}
else {
echo $td.$f_off.$f_off.' ';
}
//====== RETOUR PRECEDENT ======//
if ($debut >= $nbmax) {
echo $td.'<a href="'.$fichier.'?debut='.($debut-$nbmax).'">'.$f_back.'</a> ';
}
else {
echo $td.$f_off.' ';
}
//====== 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> ';
}
else {
echo $td.'<a href="'.$fichier.'?debut='.(($cpt-1)*$nbmax).'">'.$cpt.'</a> ';
}
}
//====== SUIVANT ======//
if ($debut + $nbmax < $nbtotal) {
echo $td.'<a href="'.$fichier.'?debut='.($debut+$nbmax).'">'.$f_next.'</a> ';
}
else {
echo $td.$f_off.' ';
}
//====== 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> ';
}
else {
echo $td.$f_off.' ';
}
}
}
#--------------------------------------------------------------------------------------------#Tu l'appele comme ca :
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
Voilà le script :
<?
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 :
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
echo barre_nav('news','nav.php',$debut,$nbmax);Où est le probleme ?
Hors ligne
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
Ca ne fonctionne pas comme ça ![]()
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
oki oki, c'est ce que j'ai fai là, mais maintenant sa n'affiche rien :
<?
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
Faut que ton code ça ressemble à çà :
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
rha je capte vraiment rien
<?
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
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 :
<?
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 à çà :
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
if (empty($debut)) $debut = 0; if (empty($nbmax)) $nbmax = 20;
au dessus de
$requete = "SELECT * FROM `news` ORDER by `id` DESC LIMIT '.$debut.', '.$nbmax.'";
T'as pas enlevé le reste du code ? ![]()
Ton fichier au complet, il ressemble à quoi ?
Hors ligne
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 :
<!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
<? #--------------------------------------------------------------------------------------------#
# 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 = ' ';
$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> ';
}
else {
echo $td.$f_off.$f_off.' ';
}
//====== RETOUR PRECEDENT ======//
if ($debut >= $nbmax) {
echo $td.'<a href="'.$fichier.'?debut='.($debut-$nbmax).'">'.$f_back.'</a> ';
}
else {
echo $td.$f_off.' ';
}
//====== 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> ';
}
else {
echo $td.'<a href="'.$fichier.'?debut='.(($cpt-1)*$nbmax).'">'.$cpt.'</a> ';
}
}
//====== SUIVANT ======//
if ($debut + $nbmax < $nbtotal) {
echo $td.'<a href="'.$fichier.'?debut='.($debut+$nbmax).'">'.$f_next.'</a> ';
}
else {
echo $td.$f_off.' ';
}
//====== 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> ';
}
else {
echo $td.$f_off.' ';
}
}
}
#--------------------------------------------------------------------------------------------# ?>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