Nombre de requêtes par page mal calculées

Résolu/Fermé
Balafatch - 20 févr. 2009 à 14:35
kibel Messages postés 24 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 21 février 2009 - 21 févr. 2009 à 10:05
Bonjour,
Bonjour,
J'utilise un script de FAQ.
Par exemple sur la page http://www.10moi.fr/FAQ/afficher.php?id_faq=11 Il y a la totalité des questions de cette catégorie soit 14 questions alors que je n'en ai demandé que 10 ; n'en demandant que 10 le nombre de pages est bien calculé mais pas le nombre de questions par page ; a chaque page j'ai la totalité des questions.
Quelqu'un peut il me dire s'il voit un problème sur le script ? (je ne transmet que la partie script en php) :

<?php include("inc/header.php"); ?>
<?php include("inc/conf.php"); ?>
<?php include("inc/fonctions.php"); ?>
<?php

if($_GET['id_faq']) $id_faq=$_GET['id_faq'];
else $id_faq='';

$requete = mysql_query("select * from faq_categories where id=\"$id_faq\"");
if (mysql_num_rows($requete)==0){
mysql_close($connect_db);
header("location: index.php");
exit();
}

?>
<?php

$requete = mysql_query("select * from faq_categories where id=\"$id_faq\"");
while($ligne = mysql_fetch_array($requete)){
$id_cat = $ligne["id"];
$nom2 = utf8_encode($ligne["nom"]);
}
?>

<table border="0" align="center" cellpadding="3" cellspacing="1" width="<?php echo $width_table; ?>">
<tr>
<td><?php echo $image_categorie_open; ?> <font color="#000080"><b><?php echo $nom2; ?></b></font></td>
<td align="right">Catégorie :
<select onchange="javascript:if(this.value != <?php echo $id_faq; ?>) document.location.href=this.value;">
<option value="<?php echo $page_index; ?>">Accueil</option>
<option value="<?php echo $page_ajouter_q; ?>">Ajouter une Faq</option>
<option value="<?php echo $page_recherche; ?>">Rechercher</option>
<option>----------</option>
<?php

$requete = mysql_query("select * from faq_categories order by nom");
while($ligne = mysql_fetch_array($requete)){
$id_cat = $ligne["id"];
$nom = utf8_encode($ligne["nom"]);
echo("<option value=\"$page_afficher?id_faq=$id_cat\"");
if ($id_cat == $id_faq){echo(" selected");}
if ($id_cat == 0){echo("<option value=\"$page_index\"");}
echo(">".$nom."</option>");
}

?>
</select>
</td>
</tr>
</table>

<br>


<table border="0" align="center" width="<?php echo $width_table; ?>" cellpadding="3" cellspacing="1">
<tr>
<td class="titre" height="8"></td>
</tr>
<tr>
<td valign="top">

<?php

if(!$start)
{$start=0;}

$requete = mysql_query("select * from faq where id_cat=\"$id_faq\" and etat=\"1\" order by titre");
while($ligne = mysql_fetch_array($requete)){
$id_q = $ligne["id"];
$od_cat = $ligne["id_cat"];
$titre = $ligne["titre"];
$titre = utf8_encode($titre);
$message = $ligne["message"];
$message = nl2br($message);
$message = utf8_encode($message);
$date = $ligne["date"];
$date = explode("-",$date);
$annee = $date[0];
$mois = $date[1];
$jour = $date[2];
$date = $jour."/".$mois."/".$annee;

echo("$image_question <a href='$page_afficher_details?id_cat=$id_faq&id=$id_q'><b>$titre</b></a><br><br>");
}
?>
</td>
<td valign="top"><?php echo("$image") ?></td>
</tr>
</table>

<br>

<center>
[ <?php

$result=mysql_query("select count(*) from faq where id_cat=\"$id_faq\" and etat=\"1\"");
$row=mysql_fetch_row($result);

if ($start == "0")
{
echo"<b>1</b> ";
}
else
{
echo"<a href=\"$page_afficher?id_faq=$id_faq&start=0\" target='_top'>1</a> ";
///// Commentaire perso : $page_afficher est sur la page conf.php et désigne la page sur laquelle est ce script : afficher.php
}

for($index=1;($index*$nombre_message_page)<$row[0];$index++)
{
$pg = $index+1;
if(($index*$nombre_message_page)!=$start)
///// Commentaire perso :En début de cette page il y a bien l'appel <?php include("inc/conf.php"); ?> et sur la page <?php include("inc/conf.php"); ?> il y a bien $nombre_message_page = "10"; // nombre de message par page
{
print(" - <a href=\"$page_afficher?id_faq=$id_faq&start=".($index*$nombre_message_page)."\" target='_top'>");
echo"$pg";
print("</a>");
}
else
{
echo" - <b>$pg</b>";
}
}

?> ]</center>

<br>

<?php include("inc/footer.php"); ?>

Merci vraiment si quelqu'un a un commentaire !!!
A voir également:

7 réponses

kibel Messages postés 24 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 21 février 2009 1
20 févr. 2009 à 14:56
Pourrais tu encadrer la zone qui pose problème car sans indetation dur dur à lire.

Sinon, il s'agit trés probablement d'une erreur d'algorithme.

Sinon, une solution si tu veux avoir seulement 10 questions, tu peux le demander dans ta requete avec le LIMITED vu que tu connais le début et la fin.
0
balafatch Messages postés 7 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 11 juillet 2010 4
20 févr. 2009 à 15:16
Merci pour ta réponse.
Il me semble que la zone qui pose problème est celle d'affichage des requêtes et donc de leur nombre par page mais je ne vois rien qui le demande précisément (mais je suis dans la situation de quelqu'un qui arrive à deviner la signification d'une langue étrangère sans savoir la parler !!!) :

<?php

if(!$start)
{$start=0;}

$requete = mysql_query("select * from faq where id_cat=\"$id_faq\" and etat=\"1\" order by titre");
while($ligne = mysql_fetch_array($requete)){
$id_q = $ligne["id"];
$od_cat = $ligne["id_cat"];
$titre = $ligne["titre"];
$titre = utf8_encode($titre);
$message = $ligne["message"];
$message = nl2br($message);
$message = utf8_encode($message);
$date = $ligne["date"];
$date = explode("-",$date);
$annee = $date[0];
$mois = $date[1];
$jour = $date[2];
$date = $jour."/".$mois."/".$annee;

echo("$image_question <a href='$page_afficher_details?id_cat=$id_faq&id=$id_q'><b>$titre</b></a><br><br>");
}
?>

Tu as une idée ?
0
kibel Messages postés 24 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 21 février 2009 1
20 févr. 2009 à 15:46
Oui même je pense que celà est du que en faîte tu sélectionnes dans ta requête toutes les données se trouvant dans faq correspondant de la catégorie et à l'état 1. Puis après tu les affiches toutes. Donc que tu en es 5, 10, 15 en résultat, il se moque totalement du 10 car tu ne fais jamais de vérification.

while($ligne = mysql_fetch_array($requete)){

Tu extrait une données, et tu l'affiches.

En faîte, il faudrait soit modfier la requête avec un LIMIT en nombre de réponse.

Voicile format:
SELECT * FROM `your_table` LIMIT X, Y
LIMIT X, Y veut dire que tu choisis les resultats a partir de la ligne X+1 et que tu affiches Y resultats

Sinon refaire l'algo d'affichage.
0
kibel Messages postés 24 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 21 février 2009 1
20 févr. 2009 à 15:54
$requete_sql ="select * from faq where id_cat=\"$id_faq\" and etat=\"1\" order by titre ";
$requete_sql.=" LIMIT ".$start.",".$nombre_message_page ." ";

$requete = mysql_query($requete_sql);


Si j'ai compris ton code ça doit être ça. Il y aura peut être une erreur dans le formatage de $requete_sql, mais j'ai pas de logiciel me permettant de tester.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
balafatch Messages postés 7 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 11 juillet 2010 4
20 févr. 2009 à 16:22
J'ai donc corrigé de la façon suivante... mais je n'ai plus de résultats sur aucune des deux pages... je n'ai que l'affichage de la catégorie
Tu lis bien, la table est bien faq (faq_categories est la table des catégories).
$nombre_message_page est sur la page conf.php en include au début de cette page
Par contre j'observe que l'adresse de la premiére page est bien :
http://www.10moi.fr/FAQ/afficher.php?id_faq=11&start=0
et de la seconde :
http://www.10moi.fr/FAQ/afficher.php?id_faq=11&start=10

<?php

if(!$start)
{$start=0;}

$requete = mysql_query("select * from faq where id_cat=\"$id_faq\" and etat=\"1\" order by titre");
$requete_sql ="select * from faq where id_cat=\"$id_faq\" and etat=\"1\" order by titre ";
$requete_sql.=" LIMIT ".$start.",".$nombre_message_page ." ";

$requete = mysql_query($requete_sql);
{
$id_q = $ligne["id"];
$od_cat = $ligne["id_cat"];
$titre = $ligne["titre"];
$titre = utf8_encode($titre);
$message = $ligne["message"];
$message = nl2br($message);
$message = utf8_encode($message);
$date = $ligne["date"];
$date = explode("-",$date);
$annee = $date[0];
$mois = $date[1];
$jour = $date[2];
$date = $jour."/".$mois."/".$annee;

echo("$image_question <a href='$page_afficher_details?id_cat=$id_faq&id=$id_q' target='_top'><b>$titre</b></a><br><br>");
}
?>
0
kibel Messages postés 24 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 21 février 2009 1
20 févr. 2009 à 16:28
Tu n'as pas remis le while

while($ligne = mysql_fetch_array($requete)){
c'est lui qui permet de lire les résultats.

Pour information:
mysql_query -> Execution de la requete sql
mysql_fetch_array -> recuperation ligne par ligne du resultat donnée par mysql_query

ça donne donc

<?php

if(!$start)
{$start=0;}

$requete_sql ="select * from faq where id_cat=\"$id_faq\" and etat=\"1\" order by titre ";
$requete_sql.=" LIMIT ".$start.",".$nombre_message_page ." ";

$requete = mysql_query($requete_sql);

while($ligne = mysql_fetch_array($requete)){
$id_q = $ligne["id"];
$od_cat = $ligne["id_cat"];
$titre = $ligne["titre"];
$titre = utf8_encode($titre);
$message = $ligne["message"];
$message = nl2br($message);
$message = utf8_encode($message);
$date = $ligne["date"];
$date = explode("-",$date);
$annee = $date[0];
$mois = $date[1];
$jour = $date[2];
$date = $jour."/".$mois."/".$annee;

echo("$image_question <a href='$page_afficher_details?id_cat=$id_faq&id=$id_q' target='_top'><b>$titre</b></a><br><br>");
}
?>
0
balafatch Messages postés 7 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 11 juillet 2010 4
20 févr. 2009 à 16:40
je m'étais rendu compte lorsque tu m'as répondu...
Avec tous mes remerciements, cela fonctionne. Tu m'as appris quelque chose.
Au delà du service que tu viens de me rendre cela fait plaisir de rencontrer grâce au web une entraide comme cela !
Merci.
0
kibel Messages postés 24 Date d'inscription vendredi 20 février 2009 Statut Membre Dernière intervention 21 février 2009 1
21 févr. 2009 à 10:05
De rien.
0