Aller au contenu

Affichage Reponses par Page...


Sujets conseillés

Posté (modifié)

j'utilise une limite sur mes requetes mysql pour ne sortir que les lignes m'interressant.

Ca marche pour la premiere page, mais toutes les autres pages affiche tout mon tableau. Seul la premiere et la derniere prennent en compte la limite de ma requete.

Pourtant, si je teste ma requete sur les pages centrales, celle est bonne:

Requete=SELECT * FROM Auteurs Limit 10,20...SELECT * FROM Auteurs Limit 20,30...SELECT * FROM Auteurs Limit 30,40.......

Je ne comprend pas trop pourquoi.

Mes pages:

-- Formulaire:choix de la table avec un champ caché Submit pour initialiser ma variable $position.

-- on tombe sur DecoupResult.php que voici:

<?php

require_once ("Connect.php"); contient mes parametres de connexion

require_once ("Connexion.php");fonction de connexion a ma base

require_once ("ExecRequete.php");fonction de recherche dans ma base

require_once ("AfficheResultat.php");affichage des resultats dans un tableau entierement dynamique

define ("TAILLE_GROUPE", 10);

$connexion=connexion(NOM,PASSE,BASE,SERVEUR);

if (isSet ($_POST['submit']))

{

$position=0;

$fin=$position+TAILLE_GROUPE;

determine la Table selon bouton choisi je n'en ais mis qu'une pour simplifier

if (isSet ($_POST['Auteur']))

{

$Table="Auteurs";

}

else

{

$position = $_GET['position'];

$Table = $_GET['Table'];

$fin = $position+TAILLE_GROUPE;

}

Compte Total de Ligne

$qte=ExecRequete("SELECT * FROM $Table", $connexion);

$TotalLigne= mysql_num_rows ($qte);

Determination et Execution de la requete$Requete="SELECT * FROM $Table Limit $position,$fin";

$resultat=ExecRequete($Requete, $connexion);

Titre et lien ajouter dans la base

echo "<p><H3 ALIGN='Center'>Table Auteur<BR><BR>";

echo "<A HREF = > Ajouter un auteur </a><BR>";

Lien page precedente

if ($position >= TAILLE_GROUPE)

{

$avant=$position - TAILLE_GROUPE;

$fin=$position+TAILLE_GROUPE;

$NomTable=$Table;

$Requete="SELECT * FROM $Table LIMIT $position,$fin";

$RequeteCode= urlencode($Requete);

echo "<A HREF ='DecoupResult.php?fin=$fin&position=$avant&Table=$NomTable'>".

"voir les ". TAILLE_GROUPE. " lignes precedentes</A><BR>\n";

}

Lien page suivante

if ($position + TAILLE_GROUPE < $TotalLigne)

{

$apres=$position + TAILLE_GROUPE;

$NomTable=$Table;

echo "<A HREF ='DecoupResult.php?position=$apres&Table=$NomTable'>".

"voir les ". TAILLE_GROUPE. " lignes suivantes</A><BR>\n";

}

affichage des resultats

AfficheResultat ($resultat, $position, TAILLE_GROUPE);

?>

Voici le code d'affichage (j'en suis assez fier):<?php

require_once("ExecRequete.php");

Function AfficheResultat ($resultat, $position, $nbrLignes)

Cette fonction fais un tableau, y insere une entete avec les attributs et les valeurs pour ces resultats

{

entete tableau

echo "<TABLE ALIGN='center' BORDER='1'>\n";

$nbAttr = mysql_num_fields ($resultat);

echo "<TR>\n";

placement Nom Attributs

for ($i=0; $i<$nbAttr; $i++)

echo "<TH>". mysql_field_name ($resultat, $i)."</TH>\n";

echo "<TH>Modifier</TH>\n<TH>Supprimer</TH>\n</TR>\n";

Remplissage

while ($tabAttr = mysql_fetch_row ($resultat))

Je me demande si ce n'est pas cette boucle qui me pose probleme, mais j'ais beau bidouiller rien ne marche

{

echo "<TR>";

for ($i=0; $i<$nbAttr; $i++)

{

echo "<TD>".$tabAttr[$i]."</TD>";

}

echo "</TR>\n";

}

}

?>

Modifié par furious Gontran
Posté

J'ais posé un compteur dans ma boucle while qui stoppe celle-ci au bout de 10 boucle...

Mais la question reste entiere: Pourquoi la limit fonctionnais sur la premiere et derniere page et non sur les pages centrales de resultat ???

J'aimerais bien comprendre... :huh:

Voici mon code corrigé, servez vous :) :

Mon Formulaire apelle DecoupScript:

<html>
<head>
<title>Consultation</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<?php
require_once ("Connect.php");
require_once ("Connexion.php");
require_once ("ExecRequete.php");
require_once ("AfficheResultat.php");
define ("TAILLE_GROUPE", 10);


$connexion=connexion(NOM,PASSE,BASE,SERVEUR);

//determine la Table selon bouton choisi
if (isSet ($_POST['Auteur']))
 {
 
 $Table="Auteurs";
 $position = 0;
 $fin = $position+TAILLE_GROUPE;
 
 }
 else
 {
 
 $position = $_GET['position'];
 $Table = $_GET['Table'];
 $fin = $position+TAILLE_GROUPE;
 }

//Compte Total de Ligne  
 $qte=ExecRequete("SELECT * FROM $Table", $connexion);
 $TotalLigne= mysql_num_rows ($qte);
 
 
$Requete="SELECT * FROM $Table LIMIT $position,$fin";
$resultat=ExecRequete($Requete, $connexion);

echo "<p><H3 ALIGN='Center'>Table Auteur<BR><BR>";
echo "<A HREF =  > Ajouter un auteur </a><BR>";

 //Liens avant-Apres
 //lignes a voir avant
if ($position >= TAILLE_GROUPE)
{
$avant=$position - TAILLE_GROUPE;
$NomTable=$Table;

echo "<A HREF ='DecoupResult.php?position=$avant&Table=$NomTable'>".
 "voir les ". TAILLE_GROUPE. " lignes precedentes</A><BR>\n";
}
 // Lignes a voir apres
if ($position + TAILLE_GROUPE < $TotalLigne)
{
$apres=$position + TAILLE_GROUPE;
echo "apres=".$apres;
$NomTable=$Table;
echo "<A HREF ='DecoupResult.php?position=$apres&Table=$NomTable'>".
 "voir les ". TAILLE_GROUPE. " lignes suivantes</A><BR>\n";
}
 
 //affichage
AfficheResultat ($resultat, $position, TAILLE_GROUPE);

?>
</body>
</html>

Affiche Resultat:

<?php
Function AfficheResultat ($resultat, $position, $nbrLignes)
// Cette fonction fais un tableau, y insere une entete avec les attributs et les valeurs pour ces resultats
// decoupés en pages selon $nbrLignes
{
$Compt=0;
//entete tableau
echo "<TABLE ALIGN='center' BORDER='1'>\n";
$nbAttr = mysql_num_fields ($resultat);
echo "<TR>\n";
 
//placement Nom Attributs
for ($i=0; $i<$nbAttr; $i++)
echo "<TH>". mysql_field_name ($resultat, $i)."</TH>\n";
echo "<TH>Modifier</TH>\n<TH>Supprimer</TH>\n</TR>\n";
 
//Remplissage
while ($tabAttr = mysql_fetch_row ($resultat))
{
$Compt++;
if ($Compt <= $nbrLignes)
{
 echo "<TR>";
     for ($i=0; $i<$nbAttr; $i++)
 {
 echo "<TD>".$tabAttr[$i]."</TD>";
 }  
echo "</TR>\n";
}
}
}

?>

:whistling:

Je m'ameliore a force, je commence meme à m'auto-repondre :P

Posté

Bientôt, tu pourras même auto-répondre aux autres membres ;)

Pour ce qui est de ta première requète :

Pourtant, si je teste ma requete sur les pages centrales, celle est bonne:

Requete=SELECT * FROM Auteurs Limit 10,20...SELECT * FROM Auteurs Limit 20,30...SELECT * FROM Auteurs Limit 30,40.......

Les paramètres de la clause LIMIT sont ainsi :

LIMIT $début,$nb_lignes.

Ainsi, si tu veux 10 lignes, quelque soit l'endroit où tu commences, ca donnera :

LIMIT $debut,10

Si tu veux commencer à la ligne 55, sans savoir combien de lignes tu auras, cela fera :

LIMIT 55,$nb_lignes.

Etc..

Pour ta variable $position, tu peux la mettre 'cachée'. Mais c'est un paramètre que tu laisses alors sans 'protection'. Le mieux est de prévoir cette éventualité dans le script, en la testant :

Si ($position n'existe pas) alors $position=0

Sinon $position=(int)$position.

Le "sinon" signifie :

Si elle existe, alors c'est forcément un 'entier'. Cela évite les problèmes du style :

$position =1;select login from user

En effet, il est très facile de passer des requètes sql dans un script non protégé.. ( :( ) Il faut donc toujours tester les variables renvoyées par les scripts et autres ;) ET si possible, les tester ailleurs que chez le 'client', autrement dit : pas en javascript ou champ Hidden.

Anonymus.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...