Un compteur simple

Eléphant du PHP | 214 Messages

14 janv. 2011, 05:36

Bonjour,

En creeant un compteur pour afficher une numerotation de message, je rencontre un petit probleme:
for ($i = 1; $i <= $total; $i++)
    {
//        echo $i.'<br>';
          $msg_num = '<a href="#">#'.$i.'</a>';
    }

while () {
echo $msg_num;
}
si par exemple $total=4, le compteur commence par 4, 5, 6...

Comment faire pour avoir un resultat: 1, 2, 3,..

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 janv. 2011, 08:50

salut,

que fait le code ?
- une boucle de 1 à total dans laquelle j'affecte toujours le même message à la même variable (l'index change c'est tous). Donc à la fin de la boucle for msg_num à pour valeur $msg_num = '<a href="#">#'.$total.'</a>';

donc le while affiche cette valeur au début.

Je suppose que le code n'est pas complet, car celui donnerais au mieux une boucle infinie qui affiche toujours le même message (celui du haut et au pire une erreur de parse (ce que je pense) parce qu'il n'y a pas de condition dans le while. de plus je vois pas l’intérêt de mettre une multitude de lien avec une ancre vide ;)

pourquoi ne pas afficher la chose dans le for ?
<?php
for ($i = 1; $i <= $total; $i++)
    {
         echo  '<a href="#">#'.$i.'</a><br />';
}
?>
va afficher les ancres avec avec pour nom de 1 à total.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 214 Messages

15 janv. 2011, 04:57

J'ai deja essaye le code entre while(), mais ca donne toujours le meme resutat, ca commence a compter du total, par exemple total =3, le compteur commence a 3, 4, 5,..

Eléphant du PHP | 214 Messages

19 janv. 2011, 06:12

J'ai constate que si je mets le code et je fais un echo:
for ($i = 1; $i <= $total; $i++)
    {
//        echo $i.'<br>';
          $msg_num = '<a href="#">#'.$i.'</a>';
    }

echo $msg_num; // ca donne 1, 2, 3...

while () {
echo $msg_num;
}
avant le while tout va bien, mais apres le while ca commence par 3 si total = 3

ViPHP
ViPHP | 4039 Messages

19 janv. 2011, 09:27

J'ai deja essaye le code entre while(), mais ca donne toujours le meme resutat, ca commence a compter du total, par exemple total =3, le compteur commence a 3, 4, 5,..
Essayer, tâter ne suffit pas en programmation.. il faut comprendre ce qui se passe.

En plus, j'ai comme l'impression que le petit bout que tu nous donne est lui-même imbriqué dans une autre boucle.. en tout cas, sans avoir plus de contexte, on a du mal à interpréter ce que tu veux dire.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 214 Messages

19 janv. 2011, 11:19

J'ai deja essaye le code entre while(), mais ca donne toujours le meme resutat, ca commence a compter du total, par exemple total =3, le compteur commence a 3, 4, 5,..
Essayer, tâter ne suffit pas en programmation.. il faut comprendre ce qui se passe.

En plus, j'ai comme l'impression que le petit bout que tu nous donne est lui-même imbriqué dans une autre boucle.. en tout cas, sans avoir plus de contexte, on a du mal à interpréter ce que tu veux dire.
voila le code en entier:
<?php
$menu = $_GET['menu'];

$select_com = 'SELECT * from comments WHERE idcat = 4 AND id_cl = "'.$menu.'"';
$result_com = mysql_query ($select_com) or die ('Erreur de selection de commentaires: ' .mysql_error());
$total_com = mysql_num_rows($result_com);

	echo 'total: '.$total_com;
	echo '<br>';


if($total_com) {  
    
        	while ($row_com = mysql_fetch_array($result_com))
	{  
       extract($row_com);
	   
       
       for ($i = 1; $i <= $total_com; $i++)
    {
        //echo '<b>'.$i.'</b><br>';
        
        $msg_num = '<a href="'.$rub.'-'.$srub.'-'.$cat.'-'.$scat.'-play'.$menu.'.html#'.$idc.'">'.$i.' #</a>';
    }

$select_nick = 'SELECT * from members WHERE idm = "'.$id_pseudo.'"';
$result_nick = mysql_query ($select_nick) or die ('Erreur de selection de commentaires: ' .mysql_error());
$row_nick = mysql_fetch_array($result_nick);

extract($row_nick);

    $country_code = $country;
	
	$select_cou = "SELECT * FROM countries WHERE code='$country_code'";
	$result_cou = mysql_query ($select_cou) or die ('Erreur de selection des pays: ' .mysql_error());
	$row_cou = mysql_fetch_array($result_cou);
		
	$country = $row_cou['country'];
	$code = $row_cou['code'];

			$color = ($total_com % 2) ? $bgcolor1 : $bgcolor2 ;
 
     
			
		$number = array (1, 2);
		$picture_en = array('male', 'female');
			
		
		$gender_en = str_replace ($number, $picture_en, $gender);
		$date_posted = date('Y-m-d', $date_posted);
        $time_posted = date('G:i:s', $date_posted);
		
		//echo '<a name="'.$idc.'">';
		echo '<table width="600" border="0" cellpadding="0">';
		echo '<tr bgcolor="#e0dace">';
        echo '<td width="200" align="right">';
        echo $msg_num;
        echo '&nbsp;&nbsp;';
        echo '<img src="'.$path2flags.'Shadow/'.$code.'.png" title="'.$country.'" align="absmiddle">';
        echo '&nbsp;&nbsp;';
        echo '<img src="'.$path2icons.$gender_en.'.png" title="'.$gender_en.'" align="absmiddle" class="Img02">';
        echo '&nbsp;';
        echo $pseudo;

        echo '</td></tr>';
        echo '</table>';
   $total_com++;

	}
	
	echo '<hr width="400">';

				
}
				else
				{
					echo 'Aucun commentaire';
				}		


?>


ViPHP
ViPHP | 5462 Messages

19 janv. 2011, 11:33

je pense que tu ne comprends pas le while

Eléphant du PHP | 214 Messages

19 janv. 2011, 12:33

je pense que tu ne comprends pas le while
Alors expliquez le moi svp :)

ViPHP
ViPHP | 5462 Messages

19 janv. 2011, 12:38

je pense que tu ne comprends pas le while
Alors expliquez le moi svp :)
mysql_fetch_* récupère le résultat de la ligne de résultat courante a ta requête
tu pourais faire :

$ligne1 = mysql_fetch_assoc($res);
$ligne2 = mysql_fetch_assoc($res);
$ligne3 = mysql_fetch_assoc($res);
.....

quand y'a plus de resultat mysql_fetch_assoc renvoie false

while tourne tant que la condition ne revoie pas false, ici la condition est le retourne de $row_com qui est le retour de mysql_fetch_assoc qui est sois un array sois false

Eléphant du PHP | 214 Messages

20 janv. 2011, 13:25

je pense que tu ne comprends pas le while
Alors expliquez le moi svp :)
mysql_fetch_* récupère le résultat de la ligne de résultat courante a ta requête
tu pourais faire :

$ligne1 = mysql_fetch_assoc($res);
$ligne2 = mysql_fetch_assoc($res);
$ligne3 = mysql_fetch_assoc($res);
.....

quand y'a plus de resultat mysql_fetch_assoc renvoie false

while tourne tant que la condition ne revoie pas false, ici la condition est le retourne de $row_com qui est le retour de mysql_fetch_assoc qui est sois
un array sois false
Et comment puis je l integrer dans mon code, puis qu'on a appris que si on veut afficher des resultats en loop, on utilise while + le tableau + le retour de la requete, qui est en cet exemple:
while ($row_com = mysql_fetch_assoc($result_com))