Transformer une boucle while en for ?

Petit nouveau ! | 4 Messages

17 janv. 2011, 16:25

Bonjour à tous,

Voila j'ai un petit souci concernant un script PHP de pagination voici ma boucle :
$resultat = mysqli_query($bdd,$sql);
$i=12; // ici je commence ma deuxième page à 12
$j=1; // je déclare mon numéro de page
if($start<12){
 echo '<div id="pagination"> Pages : <span class="active">1</span>'; 
}else{
  echo '<div id="pagination"> Pages : <a href="index.php">1</a>'; 
}//condition pour la première page
while($i<$total){
  $j++;
  $next=$i+$quantite-1;//-1 car on commence a l'enregistrement 0
  if($next>$total){
  $next=$total;
  }//$next ne peut pas être supérieur au $total
 echo '<a href="ma-page-'.$i.'.html">'.$j.'</a>';
  $i=$next+1;
}
Seulement voila j'aimerais appliquer ma class Active quand le visiteur se trouve sur la page ou il à cliqué.

Exemple actuellement j'ai :

1 2 3 4 ... Mais quand je suis sur la page 2 ou 3 ou 4... Celles-ci restent actives.

J'ai cherché un peu sur le web et j'ai trouvé une façon de faire mais avec la boucle for et non while et c'est la que j'aurais besoin de vos lumières, je n'arrive pas à mettre mon code en forme avec une boucle for.

Est-ce que quelqu'un parmi vous pourrais m'envoyer sur une piste ou une explication ?

Merci d'avance de votre lecture.

Soyez indulgent avec mon code je suis un débutant.

Cdt

ViPHP
xTG
ViPHP | 7331 Messages

17 janv. 2011, 17:08

$i = 12;
$total = 46;
while( $i < $total )
{
  $i = $i + 1;
}

// se transforme en :
for( $i = 12 ; $i < $total ; $i = $i + 1)
{

}
:)

Petit nouveau ! | 4 Messages

17 janv. 2011, 17:32

Merci pour cette réponse rapide !

Seulement ca je l'avais compris mais le problème c'est pour mettre mon code en forme à chaque fois je fais une boucle infini

Je ne sais pas comment placer ca dans la boucle for :
 $j++;
  $next=$i+$quantite-1;//-1 car on commence a l'enregistrement 0
  if($next>$total){
  $next=$total;
  }//$next ne peut pas être supérieur au $total
  $i=$next+1;
Je vais faire des test

Merci encore de ta réponse rapide :wink:

Cdt

ViPHP
AB
ViPHP | 5818 Messages

17 janv. 2011, 17:58

$resultat = mysqli_query($bdd,$sql);
$i=12; // ici je commence ma deuxième page à 12
$j=1; // je déclare mon numéro de page
if($start<12){
 echo '<div id="pagination"> Pages : <span class="active">1</span>'; 
}else{
  echo '<div id="pagination"> Pages : <a href="index.php">1</a>'; 
}//condition pour la première page
while($i<$total){
  $j++;
  $next=$i+$quantite-1;//-1 car on commence a l'enregistrement 0
  if($next>$total){
  $next=$total;
  }//$next ne peut pas être supérieur au $total
 echo '<a href="ma-page-'.$i.'.html">'.$j.'</a>';
  $i=$next+1;
}
Je vois pas trop comment cela peut fonctionner...

normalement pour faire afficher la page active cela devrait être l'algorithme

Si la page est égale à la page active
alors
j'affiche le span avec la classe active.


On peut avoir le nombre de pages en faisant par exemple ceci
$nb_page = ceil($nb_prod_tot/$nb_prod_page);//nombre de page
avec $nb_prod_tot = nombre de produits total;
et $nb_prod_page = nombre de produits par page;

Et l'on peut obtenir le numéro de la page actuelle en faisant ceci
$page_actuelle = ceil(($limite + 1)/$nb_prod_page);
où $limite est le nombre que tu passe dans la clause limit de ta requête, typiquement :

Code : Tout sélectionner

$query = "SELECT ... WHERE ... LIMIT ".$limite.", ".$nb_prod_page." ";
Bon je te laisse un moment voir ce que tu pourrais faire avec ces infos....

Petit nouveau ! | 4 Messages

17 janv. 2011, 19:27

Bonjour AB,

oui je sais la tu me sort le tuto de navigation page par page que l'on trouve partout sur internet qui fais ?p=1 = page 1 / ?p=2= page 2.....

Mais moi je ne fonctionne pas comme cela j'affiche de page 0 à 12 = page 1 / de 12 à 24 =page 2...

Et le code fonctionne mais le problème c'est que moi je les affiche comme cela :

echo '<a href="ma-page-'.$i.'.html">'.$j.'</a>'; donc 2-3-4-5-6....

et je ne peu pas faire la condition dans mon while pour lui dire quad c'est la page ou je me trouve je voudrais la rendre inactif.

Mais tu as raison j'ai vraiment l'impression que je ne peut pas le faire codé comme ceci :(

merci pour ta réponse

cdt

Petit nouveau ! | 4 Messages

17 janv. 2011, 21:15

Ok c'est bon j'ai réussi :)

Je clos le sujet

merci de vos réponses

@++