Multipaging
thomy
-
apes Messages postés 5 Statut Membre -
apes Messages postés 5 Statut Membre -
Bonjour,je suis débutant en php, je suis entrain de réaliser un moteur de recherche pour un projet personnel.
J'ai un problème sur mon affichage des résultats, que je souhaiterai voir limité à 30
résultats par page, malgrès de très nombreux tutos je me retrouve avec un problème sur l'affichage de ma seconde page.
j'arrive bien a obtenir le nombre de résultat de ma requête, la première limite est ok mais quand je clic sur la seconde page je me retrouve
avec la totalité de la bdd.
Je ne sais pas si c'est lié à ma requête ou bien peut etre manque t'il une boucle, pourriez vous m'aidez plz ?
<html>
<head>
<title>mon site</title>
</head>
<body>
<center><H1>BIENVENUE SUR LE SITE CRD SALLE 104</H1></center>
<BR></BR>
<BR></BR>
<BR></BR>
<BR></BR>
<form method="post" action="page.php">
<center>Recherche : <input type="text" name="Valeur" size="50"><input type="submit" value="OK"><BR></center>
</form>
<?php
$messagesParPage=10;
mysql_connect("localhost","root");
mysql_select_db("test");
$mot = isset ( $_POST['Valeur'] ) ? $_POST['Valeur'] : '' ;
echo "<br />";
$keywords = preg_split("/[\s,]+/", $mot);
$nbrtbl=sizeof($keywords);
echo "Vous avez tapé ".$nbrtbl." Mots clés";
echo "<br/>";
for ($j=0;$j<$nbrtbl;$j++)
{
$reponse = mysql_query("SELECT * FROM `rapport`WHERE (idRapport LIKE '%". $keywords[$j]."%'
OR NomEntreprise LIKE '%". $keywords[$j]."%'
OR Formation LIKE '%". $keywords[$j]."%'
OR Theme LIKE '%". $keywords[$j]."%')")or die (mysql_error());
$m=$j+1;
echo "le mot clé n° ".$m." est : ".$keywords[$j];
echo "<br/>";
}
$total = mysql_num_rows($reponse);
echo "il y a : ".$total." résultats.";
echo "<br/>";
mysql_free_result($reponse);
echo "<br/>";
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page']))
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages)
{
$pageActuelle=$nombreDePages;
}}
else
$pageActuelle=1;
echo "La page actuelle est : ".$pageActuelle;
echo '</p>';
$premiereEntree=($pageActuelle-1)*$messagesParPage;
echo "Le nombre total de page : ".$nombreDePages;
echo "<br/>";
echo "La premiere entrée est : ".$premiereEntree;
echo "<br/>";
if ($premiereEntree >10);
{echo $premiereEntree;}
for ($j=0;$j<$nbrtbl;$j++)
{
$reponse = mysql_query
("SELECT * FROM `rapport`WHERE
(
idRapport LIKE '%". $keywords[$j]."%'
OR NomEntreprise LIKE '%". $keywords[$j]."%'
OR Formation LIKE '%". $keywords[$j]."%'
OR Theme LIKE '%". $keywords[$j]."%'
)ORDER BY 'NomEntreprise' ASC
LIMIT $premiereEntree,$messagesParPage ")or die (mysql_error());
}
while($donnees = mysql_fetch_array($reponse))
{ echo "<table>";
echo "<td>".$donnees['idRapport']."</td>";
echo "<td>".$donnees['NomEntreprise']."</td>";
echo "<td>".$donnees['Theme']."</td>";
echo "<td>".$donnees['Formation']."</td>";
echo "</table>";
}
echo '<p align="center">Page : ';
for($i=1; $i<=$nombreDePages; $i++)
{
if($i==$pageActuelle)
{echo ' (( '.$i.' )) '; }
else
{echo ' <a href="page.php?page='.$i.'">'.$i.'</a> ';
}
}
echo "<br/>";
mysql_close();
?>
</body>
</html>
J'ai un problème sur mon affichage des résultats, que je souhaiterai voir limité à 30
résultats par page, malgrès de très nombreux tutos je me retrouve avec un problème sur l'affichage de ma seconde page.
j'arrive bien a obtenir le nombre de résultat de ma requête, la première limite est ok mais quand je clic sur la seconde page je me retrouve
avec la totalité de la bdd.
Je ne sais pas si c'est lié à ma requête ou bien peut etre manque t'il une boucle, pourriez vous m'aidez plz ?
<html>
<head>
<title>mon site</title>
</head>
<body>
<center><H1>BIENVENUE SUR LE SITE CRD SALLE 104</H1></center>
<BR></BR>
<BR></BR>
<BR></BR>
<BR></BR>
<form method="post" action="page.php">
<center>Recherche : <input type="text" name="Valeur" size="50"><input type="submit" value="OK"><BR></center>
</form>
<?php
$messagesParPage=10;
mysql_connect("localhost","root");
mysql_select_db("test");
$mot = isset ( $_POST['Valeur'] ) ? $_POST['Valeur'] : '' ;
echo "<br />";
$keywords = preg_split("/[\s,]+/", $mot);
$nbrtbl=sizeof($keywords);
echo "Vous avez tapé ".$nbrtbl." Mots clés";
echo "<br/>";
for ($j=0;$j<$nbrtbl;$j++)
{
$reponse = mysql_query("SELECT * FROM `rapport`WHERE (idRapport LIKE '%". $keywords[$j]."%'
OR NomEntreprise LIKE '%". $keywords[$j]."%'
OR Formation LIKE '%". $keywords[$j]."%'
OR Theme LIKE '%". $keywords[$j]."%')")or die (mysql_error());
$m=$j+1;
echo "le mot clé n° ".$m." est : ".$keywords[$j];
echo "<br/>";
}
$total = mysql_num_rows($reponse);
echo "il y a : ".$total." résultats.";
echo "<br/>";
mysql_free_result($reponse);
echo "<br/>";
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page']))
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages)
{
$pageActuelle=$nombreDePages;
}}
else
$pageActuelle=1;
echo "La page actuelle est : ".$pageActuelle;
echo '</p>';
$premiereEntree=($pageActuelle-1)*$messagesParPage;
echo "Le nombre total de page : ".$nombreDePages;
echo "<br/>";
echo "La premiere entrée est : ".$premiereEntree;
echo "<br/>";
if ($premiereEntree >10);
{echo $premiereEntree;}
for ($j=0;$j<$nbrtbl;$j++)
{
$reponse = mysql_query
("SELECT * FROM `rapport`WHERE
(
idRapport LIKE '%". $keywords[$j]."%'
OR NomEntreprise LIKE '%". $keywords[$j]."%'
OR Formation LIKE '%". $keywords[$j]."%'
OR Theme LIKE '%". $keywords[$j]."%'
)ORDER BY 'NomEntreprise' ASC
LIMIT $premiereEntree,$messagesParPage ")or die (mysql_error());
}
while($donnees = mysql_fetch_array($reponse))
{ echo "<table>";
echo "<td>".$donnees['idRapport']."</td>";
echo "<td>".$donnees['NomEntreprise']."</td>";
echo "<td>".$donnees['Theme']."</td>";
echo "<td>".$donnees['Formation']."</td>";
echo "</table>";
}
echo '<p align="center">Page : ';
for($i=1; $i<=$nombreDePages; $i++)
{
if($i==$pageActuelle)
{echo ' (( '.$i.' )) '; }
else
{echo ' <a href="page.php?page='.$i.'">'.$i.'</a> ';
}
}
echo "<br/>";
mysql_close();
?>
</body>
</html>
7 réponses
ce que je te conseille, c'est de mettre ta requête dans une variable, ainsi tu pourras l'afficher et trouver ce qui cloche.
bonjour il me semble déja avoir tenté de mettre la requête dans une variable il me semble que j'obtenais un truc du genre ressource#3 ou autre valeur en fonction du nombre de mots que je mettais dans ma recherche
au lieu de faire ça :
fais ça :
c'est strictement la même chose, et de cette façon tu pourras afficher ta requête et trouver ton erreur
$reponse = mysql_query
("SELECT * FROM `rapport`WHERE
(
idRapport LIKE '%". $keywords[$j]."%'
OR NomEntreprise LIKE '%". $keywords[$j]."%'
OR Formation LIKE '%". $keywords[$j]."%'
OR Theme LIKE '%". $keywords[$j]."%'
)ORDER BY 'NomEntreprise' ASC
LIMIT $premiereEntree,$messagesParPage ")or die (mysql_error());
fais ça :
echo $requete = "SELECT * FROM `rapport`WHERE ( idRapport LIKE '%". $keywords[$j]."%' OR NomEntreprise LIKE '%". $keywords[$j]."%' OR Formation LIKE '%". $keywords[$j]."%' OR Theme LIKE '%". $keywords[$j]."%' )ORDER BY 'NomEntreprise' ASC LIMIT $premiereEntree,$messagesParPage "; $reponse = mysql_query($requete)or die (mysql_error());
c'est strictement la même chose, et de cette façon tu pourras afficher ta requête et trouver ton erreur
en fait ce sont des champs indexés si je ne dis pas de bétises, je retrouve donc bien ressource id#(valeur numérique)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
voici ce que je retrouve en faisant un echo sur la requete j'ai fait un copie coller de la requete le resultat est :
SELECT * FROM `rapport`WHERE ( idRapport LIKE '%%' OR NomEntreprise LIKE '%%' OR Formation LIKE '%%' OR Theme LIKE '%%' )ORDER BY 'NomEntreprise' ASC LIMIT 0,10
bizzard comme resultat pas de valeur entre les %%.
SELECT * FROM `rapport`WHERE ( idRapport LIKE '%%' OR NomEntreprise LIKE '%%' OR Formation LIKE '%%' OR Theme LIKE '%%' )ORDER BY 'NomEntreprise' ASC LIMIT 0,10
bizzard comme resultat pas de valeur entre les %%.