Généré pages suite à requêtes

Signaler
Messages postés
236
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
13 décembre 2004
-
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
-
Voyons voir,

J,ai une formulaire qui permet de faire une redcherche sur MySQL et afficher le résultat sur mon site...

Je limite chaque affichage à 50 résultats

Parfois les résultats excèdent ma limite, il y a donc plusieurs pages à afficher si on veut voir les autres résultats...

J'ai donc mis quelque chose qui permet page précédente, page actuelle et page suivante...

Mais cela est trop basic comme fonctionnement, n'utilisant qu'une formule +1 ou -1 selon que l'on avance ou recule de page...

Moi, j'aimerais plutôt quelque chose dans le style GOOGLE où il affiche Pages: 1 2 3 4 5 6 7 8 9

Alors je me demande comment réaliser ce coup...

Il faut que la formule génère le nombre de page avec le chiffre (1 2 3 4...) et le lien qui mène à cette page

Ce serait plus beau et + utile qu'un simple affichage de type Page précédente, page actuelle, page suivante comme c'est actuellement sur mon site...

On aurait l'opportunité d'aller directement à la page que l'on veut sans devoir cliquer page suivante ou précédente jusqu'à ce qu'on y arrive finalement...

Quelque chose dans le style de phyMyAdmin qui permet d'aller directement à une page et affiche toutes les pages disponibles en lien direct... (la version que j'ai le présente dans un menu déroulant)

Est-ce qu'une âme charitable pourrait me donner un petit coup de pouce pour réaliser ce pahantasme ???

lolll

Merci !!!

14 réponses

Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!
On a une variable $start passée par l'url...

$nb_pages = ceil($nb_results / $nb_results_p_page);
$courant = ceil($start / $nb_results_p_page);

if($courant > 1)
echo '[page.php?start=' . (($courant - 2) * $nb_results_p_page + 1)) . ' Page précédente]';

for($i = 1; $i <= $nb_pages; $i++)
{
if($i == $courant)
echo '' . $i . '';
else
echo echo '[page.php?start=' . (($i - 1) * $nb_results_p_page + 1)) . ' ' $i . ']';

if($i < $nb_pages)
echo ' | ';
}

if($courant < $nb_pages)
echo ' | [page.php?start=' . ($courant * $nb_results_p_page + 1)) . ' Page suivante]';


Voila j'éspère pas voir fait de fautes de code stupides...

@++

R@f

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
236
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
13 décembre 2004

Cela semble à première vue + simple que ce que j'ai pu faire jusqu'ici...

Je vais maintenant tenté de tester cela dans mon environnement (mon site)

je te reviens pour dire ce que ca donne...

pe est-ce un phantasme réalisée ???

lollllll

qui sait, rien n'est impossible...
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Oki doki!
D'ailleurs, mon calcul pour trouver le $start en fonction du $i doit pouvoir être simplifié...

@++

R@f

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
236
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
13 décembre 2004

Jusqu'à maintenant c'est ÉCHEC

J'ai une page blanche quand je mets le code dans ma source...

je cherche le problème...
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Tu as mis quoi comme valeurs pour:
$nb_results_p_page
$nb_results
$start

@++

R@f

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
236
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
13 décembre 2004

wow il faut mettre des valeur à ces endroit là ???

je ne suis qu'un tout petit codeur sur le tas...
je n'avais pas compris que je devais mettre des valeurs qq part...

comment je dois inscrire ces valeurs et où exactement ???

sachant que je veux 50 résultats par pages
et
un nombre de pages illimitées (autant que les résultats en exigeront)

Tu vois c'est pour cela que je gossais...
Messages postés
236
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
13 décembre 2004

Ce que j'ai fais ressemble à ceci
es-til possible d'y intégrer ton code là-dedans ???

<code>
//requête de recherche
$req = mysql_query("SELECT * from query_pc where Titre LIKE '%$_GET[query]%' Order by Titre Asc ") or die ("Maintenance en cours... ... ...
Veuillez réessayer ultérieurement");

//on compte les résultats
$res = mysql_numrows($req);
$total_num_page = ceil($res/50);

//----------------------------------------------------------------------
//on ressort les infos par ordres alphabétiques

if (($query != "") AND ($query != " ") AND ($query != "_"))
{

//recherche erronée cpuidle
if ($query == "cpuldle")
{
print " L'ortographe que vous avez inscrit est erronée: $query

Essayez avec l'ortographe suivant: cpuidle";
}
else

//on affiche le nombre de résultats trouvés
if ($res == 0)
{
print " Aucun logiciel correspondant à: $query

Essayez avec un mot clef plus descriptif

Astuce:
au lieu d'inscrire logiciel untel version 1.2.3, inscrivez simplement le mot untel";
}
else
{
print '<center>'.$query.' >> '.$res.' logiciel(s) disponible(s) sur '.$total_num_page.' page(s)</center>
';
}

//On affiche les pages supérieurs au maximum permisif ($cur_page "") {$cur_page 0;}
$page_num = $cur_page + 1;
$page_prec = $cur_page - 1;
$total_num_page = ceil($res/50);
if ($cur_page != "0")
if ($cur_page != "1")
{
$last = $cur_page;
$next = $cur_page + 2;
}
if ($cur_page == "0")
{
$last = '';
$next = $cur_page + 2;
}
if ($cur_page == "1")
{
$last = '1';
$next = $cur_page + 2;
}
if ($cur_page == "2")
{
$last = '2';
$next = $cur_page + 2;
}

$pres = $cur_page +1;

print "<Center>";

if ($total_num_page != 0)
{
print"";
print"<hr width="30%" color="#AA0000">";
$prevpage = $cur_page-1;
$nextpage = $cur_page+1;
if ($page_num != 1){print " << Page $last ";}
if ($total_num_page ! = 1){print " Page $pres ";}
if ($page_num != $total_num_page){print " Page $next >>";}
print"<hr width ="30%" color="#AA0000">
";
}

$limit_str = "LIMIT ". $cur_page * 50 .",50";

//requête de recherche
$req = mysql_query("SELECT * from query_pc where Titre LIKE '%$_GET[query]%' Order by Titre Asc $limit_str");

print'';

while( $sortie = mysql_fetch_array($req))
{

print'<li>'.$sortie[Titre].' [$'.$sortie[Amount].' USD]</li>';

}//fin de boucle
print"
";

}

//on ferme la connexion
mysql_close();
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!!!
$start tu la pase par l'url, c le début (LIMIT $start, 50 ds ta requete)

$nb_results c le nombre de résultat de ta requete, tu pourra aussi le passer dans l'url, là tu lui donne une valeur artificielle juste pour rire ;-) ( > 50)

$nb_results_p_page = 50

@++

R@f

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Alors...

$req = mysql_query("SELECT * from query_pc where Titre LIKE '%$_GET[query]%' Order by Titre Asc ")

-->
$req = mysql_query("SELECT * from query_pc where Titre LIKE '%$_GET[query]%' Order by Titre Asc LIMIT $start, $nb_results_p_page")


Pour compter le nombre de result (tu peux le passer de page en page ensuite, si tu veux pas faire cette requête chaque fois)
$req = mysql_query("SELECT count(*) from query_pc where Titre LIKE '%$_GET[query]%' Order by Titre Asc");

if($req)
{
$retour = mysql_fetch_array($req);
$nb_results = $retour[0];
}


Tu oublie pas de définir $nb_results_p_page à 50.

@++

R@f

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
236
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
13 décembre 2004

ça ci-dessous
$nb_results_p_page
$nb_results
$start

je mets cela comme ceci ???

$nb_pages = ceil($nb_results / $nb_results_p_page);
$courant = ceil($start / $nb_results_p_page);

ce qui donnerait:

$nb_pages = ceil(>50 / 50);
$courant = ceil(0/ 50);

ou quoi...

désolé si je comprends pas vite :-(
Messages postés
236
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
13 décembre 2004

j'ai mis comme ceci sans succès:

<code>
<?
//on se connecte à la base de donnée
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");

//sélection de votre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion
base");

$nb_results_p_page = 50;
$nb_results = 50;
$start = 0;
$nb_pages = ceil($nb_results / $nb_results_p_page);
$courant = ceil($start / $nb_results_p_page);

//requête de recherche
$req = mysql_query("SELECT * from query_pc where Titre LIKE '%$_GET[query]%' Order by Titre Asc LIMIT $start, $nb_results_p_page ") or die ("Maintenance en cours... ... ...
Veuillez réessayer ultérieurement");

//on compte les résultats
$req = mysql_query("SELECT count(*) from query_pc where Titre LIKE '%$_GET[query]%' Order by Titre Asc");

if($req)
{
$retour = mysql_fetch_array($req);
$nb_results = $retour[0];
}

//----------------------------------------------------------------------
//on ressort les infos par ordres alphabétiques

if (($query != "") AND ($query != " ") AND ($query != "_"))
{

//recherche erronée cpuidle
if ($query == "cpuldle")
{
print " L'ortographe que vous avez inscrit est erronée: $query

Essayez avec l'ortographe suivant: <gras>[page.php?start =' . (($courant - 2) * $nb_results_p_page + 1)) . ' Page précédente]';

for($i = 1; $i <= $nb_pages; $i++)
{
if($i == $courant)
echo '' . $i . '';
else
echo echo '[page.php?start=' . (($i - 1) * $nb_results_p_page + 1)) . ' ' $i . ']';

if($i < $nb_pages)
echo ' | ';
}

if($courant < $nb_pages)
echo ' | [page.php?start=' . ($courant * $nb_results_p_page + 1)) . ' Page suivante]';

print'';

while( $sortie = mysql_fetch_array($req))
{

print'<li>'.$sortie[Titre].' [$'.$sortie[Amount].' USD]</li>';

}//fin de boucle
print"
";

}

//on ferme la connexion
mysql_close();

?>
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!!!

$nb_pages = ceil($nb_results / $nb_results_p_page);
$courant = ceil($start / $nb_results_p_page);
A ne pas toucher et à mettre juste avant
if($courant > 1)
echo '[page.php?start=' . (($courant - 2) * $nb_results_p_page + 1)) . ' Page précédente]';

Enlève $nb_results = 50; ca sera déterminé en fonction de ta requête

Juste avant if($courant > 1)
echo '[page.php?start=' . (($courant - 2) * $nb_results_p_page + 1)) . ' Page précédente]';
ajoute:
$start++;

Met
$start = empty($_GET['start']) ? 0 : $_GET['start'] - 1;
en début de script

Pour la suite, je te propose de continuer l'adaptation par mail et/ou msn. Je te laisse m'envoyer ton adresse par MP

@++

R@f

P.S Ca fait mon 200e, :D

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
11
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
21 décembre 2005

Bonjour c'est depuis deux heures que j'essaye d'intégrer ces variantes dans mon code ci dessous, sans y arrivé, question bête, quelqu'un peu t-il m'aider.



if ($Nb_Enregistrements > $Nb_Annonces_Page) {
$Nb_Pages = ceil($Nb_Enregistrements / $Nb_Annonces_Page);

for ($i=1; $i<=$Nb_Pages; $i++) {
if ($i != $page) {
$Page_HTML .= " [$i] ";
} else {
$Page_HTML . = " [$i]";
}
}
}
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!
Où est le problème, exactement?

J'ai fais ce code, si ca te tente... :)
http://www.phpcs.com/code.aspx?ID=24067

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"