j'arrive pas !! :o( pour l'affichage page par page

Répondre
kronemburg
le 07/07/2003 à 14:08
kronemburg
Salut,
J'essais depuis quelques tems d'afficher mes news page par page smiley... Docnc je vais sur lephpfacile est je copie bêtement le code que l'on trouve exprès pour cela dans les comments faire, je le teste pour voir si je suis un bon recopieur, et tout marche. Bon jusque la ça va ! Mais c'est lorsque que j'adapte le code pour mes news que ça ne marche plus ! Je ne comprend pas pourquoi smiley !! Voyez le wall:

<?
function barre_navigation ($nb_total,
$nb_affichage_par_page,
$debut) {

// on indique le nombre de liens représentants des chiffres dans la barre de navigation
$nb_liens_dans_la_barre = 10;

// on prépare l'URL de la page qui va être visitée
if ($_SERVER['QUERY_STRING'] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1) {
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else {
if ($tableau[0] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
}
}
}


// début <<
if ($debut >= $nb_affichage_par_page) {
// si $debut, qui correspond donc au x de notre LIMIT est supérieur ou égal au nombre d'éléments affichés par page, et bien c'est que l'on est pas sur la première page, du coup, on affiche un lien << vers la page 1 (et le x du LIMIT vaut donc 0) - on rappelle également que &lt = <
$cible = $query.(0);
$lien = '<A HREF="'.$cible.'">&lt;&lt;</A>&nbsp;';
}
else {
// sinon on affiche rien
$lien = '';
}
// on rappelle que la notation $barre .= $lien est equivalente à : $barre = $barre.$lien (une simple concaténation)
$barre .= $lien;

// précédent <
if ($debut >= $nb_affichage_par_page) {
// si $debut est supérieur ou égal au nombre d'éléments à afficher sur chaque page, cela implique que l'on ne se trouve pas sur la première page, et on affiche alors un lien < pointant vers la page précédente sur laquelle on se trouve ($cible)
$cible = $query.($debut-$nb_affichage_par_page);
$lien = '&nbsp;<A HREF="'.$cible.'">&lt;</A>&nbsp;';
}
else {
// sinon, cela veut dire que l'on est sur la première page et par conséquent on affiche rien
$lien = '';
}
$barre .= $lien;

// pages 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10
if ($debut >= ($nb_liens_dans_la_barre*$nb_affichage_par_page)) {
// on initialise deux compteurs
$cpt_fin = ($debut / $nb_affichage_par_page) + 1;
$cpt_deb = $cpt_fin - $nb_liens_dans_la_barre + 1;
}
else {
$cpt_deb = 1;
$cpt_fin = (int)($nb_total / $nb_affichage_par_page);
if (($nb_total % $nb_affichage_par_page) != 0) {
$cpt_fin++;
}
if ($cpt_fin > $nb_liens_dans_la_barre) {
$cpt_fin = $nb_liens_dans_la_barre;
}
}

for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
// on affiche tous les numéros de la barre de navigation, en prenant soin ne ne pas afficher de lien pour la page qui est en cours de consultation
if ($cpt == $cpt_fin) {
if ($cpt == ($debut / $nb_affichage_par_page) + 1) {
$barre .= "&nbsp;".$cpt."&nbsp; ";
}
else {
$barre .= "&nbsp;<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>&nbsp;";
}
}
else {
if ($cpt == ($debut / $nb_affichage_par_page) + 1) {
$barre .= "&nbsp;".$cpt."&nbsp;-&nbsp;";
}
else {
$barre .= "&nbsp;<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>&nbsp;-&nbsp;";
}
}
}

// suivant >
if ($debut + $nb_affichage_par_page < $nb_total) {
// si $debut plus le nombre éléments d'afficher par page est inférieur au nombre total d'éléments à, cela implique que l'on ne se trouve pas sur la dernière page, et on affiche alors un lien > pointant vers la page suivante sur laquelle on se trouve ($cible)
$cible = $query.($debut+$nb_affichage_par_page);
$lien = '&nbsp;<A HREF="'.$cible.'">&gt;</A>&nbsp;';
}
else {
$lien = '';
}
$barre .= $lien;

// fin >>
// on calcule le reste d'une division euclidienne (le %, cf. les opérateurs mathématiques) entre le nombre total d'éléments à afficher et le nombre d'éléments que l'on affiche sur une seule page, et enfin, on ôte le résultat par le nombre total d'élément
$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}
if ($fin != $debut) {
// si $fin est différent de $debut, c'est que l'on ne se trouve pas sur la dernière page, et on affiche donc un lien >> permettant d'accéder directement à la dernière page
$cible = $query.$fin;
$lien = '&nbsp;<A HREF="'.$cible.'">&gt;&gt;</A>';
}
else {
// dans ce cas, le visiteur se trouve sur la dernière page, et par conséquent, on n'affiche pas le lien >>
$lien = '';
}
$barre .= $lien;

return ($barre);
}
?>

<html>
<head>
<title>news</title>
</head>

</body>
<table width="100%" border="0">
<?
// on se connecte à notre base
include("connection.php");

// on choisit le nombre d'éléments à afficher sur chaque page
$nb_affichage_par_page = 6;

// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(*) FROM catalogue';

// on exécute cette requête
$resultat = mysql_query($sql);

// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);

// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
echo 'Aucune réponse trouvée';
}
else {
// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($debut)) $debut = 0;

// Préparation de la requête avec le LIMIT
$sql = 'SELECT titre, date, texte_news FROM news ORDER BY id DESC LIMIT 0,'.$nb_news_a_afficher.';';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while ($data = mysql_fetch_array($req)) {
$auteur = $data['auteur'];
$titre = $data['titre'];
$date = $data['date'];
$texte_news = $data['texte_news'];
$texte_news = nl2br ($texte_news);

sscanf($date, "%4s-%2s-%2s %2s:%2s:%2s", &$an, &$mois, &$jour, &$heure, &$min, &$sec);
// on affiches les résultats dans la <table>
echo ' <tr>
<td height="123"> <div align="center">
<p>News</p>
<p><br>
</p>
<table cellpadding=0 cellspacing=0 border=0 width=439>
<tr>
<td width=439 height="19" colspan=3 valign=middle background="images/home_49.gif">
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<TD><img src="images/pixtrans.gif" width=10 height=18></TD>
<td class=TITREBLANC>News du '.$jour.'/'.$mois.'/'.$an.'</td>
<td>'.$titre.'</td>
</tr>
</table></td>
</tr>
<tr>
<td background="images/home_39.gif" valign=top width=3><img src="images/home_33.gif"></td>
<td width=433 class=TEXT height=50><p>'.$texte_news.'</p>
<p align="right"><em>Le webmaster</em></p></td>
<td background="images/home_40.gif" valign=top width=3><img src="images/home_35.gif" width=3 height=31></td>
</tr>
<tr>
<td colspan=3 valign=top background="images/home_39.gif"><img src="images/home_43.gif" width=439 height=3></td>
</tr>
</table>
<tr> </tr>
</div></td>
</tr>';
}

// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
}
// on ferme la connexion à la base de données.
mysql_close ();
echo '</table><br>';

// on lance la création de la barre de navigation à l'aide de notre fonction, le dernier argument de la fonction étant le nom de notre page WEB sur laquelle on va afficher les résultats de notre requête
$barre = barre_navigation($nb_total, $nb_affichage_par_page, $debut);

// on affiche enfin notre barre
echo ' <tr>
<td height="21" align="center"> <div align="center"></div></td>
</tr>
<tr>
<td height="21" align="center">'.$barre.'</td>
</tr>
</table>';
?>
</body>
</html>

Je peux aussi vous dire que cela ne vient pas de ma requete car la même marche sans l'affichage page par page...
Merci smiley
Kro kro kro kronemburg
kronemburg
le 07/07/2003 à 14:10
kronemburg
le message d'erreure est :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp\www\testes\index.php on line 147
Aucune réponse trouvée
Kro kro kro kronemburg
zebden
le 07/07/2003 à 16:24
zebden
je me trompe peut etre mais
$sql = 'SELECT count(*) FROM catalogue';
au lieu de catalogue ca serait pas plutot news ??
zebdinou pour les intimes / Blog : http://www.zebden.fr
zebden
le 07/07/2003 à 16:29
zebden
et puis pour le wall automatique faut mettre ton code entre les balises
zebdinou pour les intimes / Blog : http://www.zebden.fr
LA GLOBULE
le 07/07/2003 à 17:01
LA GLOBULE
Zebden a raison, tu as copier coller en oubliant de modifier une requete SQL (table news au lieu de catalogue).
Répondre
LoadingChargement en cours