omlaly
-
8 mars 2013 à 10:28
cs_stay
Messages postés493Date d'inscriptionjeudi 7 juillet 2005StatutMembreDernière intervention24 mai 2017
-
8 mars 2013 à 17:47
Bonjour,
J'ai développé un système de pagination mais il ne marche pas En effet, il affiche 5 articles par pages (ça c'est bon) sauf que quand il y a plus de 5 articles je voudrais que ça mette vers
adresse.com?page= 2
comma ça
Page : 1 2 3 ...
. Actuellement, ça affiche :
Page :
(c'est tout).
Quand je mets à la main l'adresse
adresse.com?page=2
, une erreur apparait :
Erreur sur la requête SQL concernant le nombre d'articlesYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1
Voici le code PHP :
$messagesParPage=5; // Nombre de messages affichés par pages
$retour_total=mysql_query('SELECT COUNT(*) AS id_article FROM articles WHERE nom_categorie = "categorie" AND nom_village = "nomduvillage"') or die ('Erreur sur la requête SQL concernant le calcul du nombre d\'articles '.mysql_error()); // Envoie une requête à un serveur MySQL - Récupération du contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); // Rangement de $retour_total sous la forme d'un tableau
$total=$donnees_total['total']; // Récupération du total pour le placer dans la variable $total
// Comptage du nombre de pages
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else
{
$pageActuelle=1; // La page actuelle est la n°1
}
$premiereEntree=($pageActuelle-1)*$messagesParPage; // Calculer la première entrée à lire
// La requête SQL pour récupérer les messages de la page actuelle - C'est sur cette requête SQL que ça bug...
$retour_messages=mysql_query('SELECT * FROM articles WHERE nom_categorie = "categorie" AND nom_village = "nomvillage" ORDER BY id_article DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'') or die ('Erreur sur la requête SQL concernant le nombre d\'articles'.mysql_error()); // Envoie une requête à un serveur MySQL
while($donnees_messages=mysql_fetch_assoc($retour_messages)) { // Lecture des entrées une à une grâce à une boucle
echo ''.nl2br($donnees_messages['titre_article']).',
----
'.nl2br($donnees_messages['texte_article']).',
----
<td id=\"auteur_article_date_depot_numero_article\" align=\"right\" >
<small> Posté par : '.(stripslashes($donnees_messages['auteur_article']).' - '.dateLongue($donnees_messages['date_depot'])).' - Article N°'.nl2br($donnees_messages['id_article']).' </small>
';
echo '
Commentaires.
<form method ="POST" action="../../commentaire_post.php"><textarea name="texte_commentaire_article"></textarea>
</form>
';
$id_article=$donnees_messages['id_article'];
// Ajout des sauts de ligne pour espacer les messages (
)
// Requête SQL pour déterminer l'identifiant de l'article correspondant
$query_selection_article_correspondant = mysql_query('SELECT articles.id_article, commentaires.date_depot, commentaires.texte_commentaire,commentaires.user_pseudo FROM articles, commentaires WHERE articles.id_article=commentaires.id_article AND commentaires.id_article ='.$id_article.'') or die ('Erreur sur la requête SQL concernant la sélection de l\'article correspondant'.mysql_error()); // Envoie une requête à un serveur MySQL
while ($row = mysql_fetch_assoc($query_selection_article_correspondant)) {
echo '';
echo '----
'.$row["user_pseudo"].', ';
echo ''.dateLongue($row["date_depot"]).', ';
echo ''.$row["texte_commentaire"].'
';
}
}
echo 'Page : '; // Centrer la liste des pages pour l'affichage
for($i=1; $i<=$nombreDePages; $i++) // Boucle
{
// Condition
if($i==$pageActuelle) // S'il s'agit de la page actuelle
{
echo ' [ '.$i.' ] ';
}
else
{
echo ' [adresse.php?page='.$i.' '.$i.'] ';
}
}
echo '
';
}
else // Aucun résultat
{
echo "
Aucun article à l'heure actuelle...
";
}
?>
cs_stay
Messages postés493Date d'inscriptionjeudi 7 juillet 2005StatutMembreDernière intervention24 mai 20174 8 mars 2013 à 12:27
L'erreur est évidente.
$nombreDePages=ceil($total/$messagesParPage);
Si tu as 2 enregistrements dans la db et que la quantité d’enregistrement que tu veux afficher est de 5.
Il est normal que l’expression qui suis sera égal à true, car précédemment tu as $nombreDePages qui est négatif.
<?php
$query_categorie mysql_query("SELECT titre_article, texte_article, date_depot, auteur_article FROM articles WHERE nom_categorie 'nomcategorie' AND nom_village = 'nomvillage'") or die('Erreur lors de la requête SQL'.mysql_error()); // Envoie une requête à un serveur MySQL
if(mysql_num_rows($query_categorie) > 0){ // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
$messagesParPage=5; // Nombre de messages affichés par pages
$retour_total=mysql_query('SELECT COUNT(*) AS id_article FROM articles WHERE nom_categorie = "nomcategorie" AND nom_village = "nomvillage"') or die ('Erreur sur la requête SQL concernant le calcul du nombre d\'articles '.mysql_error()); // Envoie une requête à un serveur MySQL - Récupération du contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); // Rangement de $retour_total sous la forme d'un tableau
$total=$donnees_total['total']; // Récupération du total pour le placer dans la variable $total
// Comptage du nombre de pages
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else
{
$pageActuelle=1; // La page actuelle est la n°1
}
$premiereEntree=(intval($_GET['page'])-1)*$messagesParPage; // Calculer la première entrée à lire
// La requête SQL pour récupérer les messages de la page actuelle
$retour_messages=mysql_query('SELECT * FROM articles WHERE nom_categorie = "nomcategorie" AND nom_village = "nomvillage" ORDER BY id_article DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'') or die ('Erreur sur la requête SQL concernant le nombre d\'articles'.mysql_error()); // Envoie une requête à un serveur MySQL
while($donnees_messages=mysql_fetch_assoc($retour_messages)) { // Lecture des entrées une à une grâce à une boucle
// Affichage des messages avec le design
// nl2br : Insère un retour à la ligne HTML à chaque nouvelle ligne - pour prendre en compte les sauts de ligne dans le message.
echo ''.nl2br($donnees_messages['titre_article']).',
----
'.nl2br($donnees_messages['texte_article']).',
----
<td id=\"auteur_article_date_depot_numero_article\" align=\"right\" >
<small> Posté par : '.(stripslashes($donnees_messages['auteur_article']).' - '.dateLongue($donnees_messages['date_depot'])).' - Article N°'.nl2br($donnees_messages['id_article']).' </small>
';
echo '
Commentaires.
<form method ="POST" action="../../commentaire_post.php"><textarea name="texte_commentaire_article"></textarea>
</form>
';
$id_article=$donnees_messages['id_article'];
// Ajout des sauts de ligne pour espacer les messages (
)
// Requête SQL pour déterminer l'identifiant de l'article correspondant
$query_selection_article_correspondant = mysql_query('SELECT articles.id_article, commentaires.date_depot, commentaires.texte_commentaire,commentaires.user_pseudo FROM articles, commentaires WHERE articles.id_article=commentaires.id_article AND commentaires.id_article ='.$id_article.'') or die ('Erreur sur la requête SQL concernant la sélection de l\'article correspondant)'.mysql_error()); // Envoie une requête à un serveur MySQL
while ($row = mysql_fetch_assoc($query_selection_article_correspondant)) {
echo '';
echo '----
'.$row["user_pseudo"].', ';
echo ''.dateLongue($row["date_depot"]).', ';
echo ''.$row["texte_commentaire"].'
';
}
}
echo 'Page : '; // Centrer la liste des pages pour l'affichage
for($i=1; $i>=$nombreDePages; $i++) // Boucle
{
// Condition
if($i==$pageActuelle) // S'il s'agit de la page actuelle
{
echo ' [ '.$i.' ] ';
}
else
{
echo ' [adresse.php?page='.$i.' '.$i.'] ';
}
}
echo '
';
}
else // Aucun résultat
{
echo "
Aucun article à l'heure actuelle...
";
}
?>
Quand j'essaie, voici l'erreur qui apparait, il n'y a plus d'article qui apparait :
Erreur sur la requête SQL concernant le nombre d'articles concernant le village d'Aramon et la catégorie "Monument(s) à visiter"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1
Si vous voyez quelque chose, n'hésitez pas...
Quand j'accède à : http://www.adresse.com/page.php?page=2 à la main, je vois qu'il y a des articles qui apparaissent mais le problème, c'est que ça fait une liste de pages (ça va jusqu'à 240473 pages !!!)
cs_stay
Messages postés493Date d'inscriptionjeudi 7 juillet 2005StatutMembreDernière intervention24 mai 20174 8 mars 2013 à 17:47
Tu dois commenter une grosse partie de ton code et aller au cas par cas.
Regarde si l'affichage des 5 éléments sont retournés correctement.
Par la suite, du dé-commente le script pour la pagination et jusqu'au résultat final, car même si j'ai vu une erreur, je ne trouverais peut-être pas les autres.
Il est toujours plus simple de regarder concrètement au cas par cas avec le résultat.