Problème boucle PHP

Résolu/Fermé
pekwy Messages postés 11 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 4 juin 2012 - Modifié par pekwy le 13/05/2010 à 19:16
pekwy Messages postés 11 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 4 juin 2012 - 13 mai 2010 à 20:04
Bonjour à tous,
J'ai un problème dans une boucle PHP.
La boucle est la suivante :

<? $visibilite = 0 ?>
<? while ($document = tep_db_fetch_array($document))
{
if ($document[visible] == '1')
{
echo date("d/m/Y", strtotime($document[date_de_creation]));
?> - <?
echo $document[nom].'<br/>';
$visibilite = $visibilite + 1;
}
}
?>
Documents visibles : <? echo $visibilite; ?>

Pour le moment le nombre de documents visible s'inscrit en dessous du nom et date de création de chaque document visible et je voudrais que ce soit l'inverse.
En effet, je souhaiterais afficher le nombre de documents visibles ($visibilité) avant le nom ($document[nom]) et la date de création ($document[date_de_creation]) de chaque document visible.

Comment puis-je faire ?
D'avance merci,
Cordialement...

21 réponses

mrgeek Messages postés 23 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 11 juillet 2010 5
Modifié par mrgeek le 13/05/2010 à 19:31
hum ... étant donné que je ne sais pas a quoi sert ta fonction tep_db_fetch_array, mais qu'au nom il doit bien y avoir une correspondance à mysql_num_rows ... en faisant ca et en limitant ta requête SQL avec une condition au select du type "where visible='1'"...

Sinon tel quel (enfin en cleanant un peu ton code) dans un array:
<?  
$visibilite = 0; 
$rst = array(); 
while ($document = tep_db_fetch_array($document)){ 
  if ($document[visible] == '1') { 
   array_push($rst, date("d/m/Y", strtotime($document[date_de_creation])).' - '.$document[nom].'<br/>'); 
   $visibilite ++; 
 } 
} 

foreach($rst as $line){ 
   echo 'Documents visibles :'.$visibilité.' '.$line; 
} 
?> 
0
allyson77 Messages postés 20 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 mai 2010 2
13 mai 2010 à 19:31
Quel format souhaites tu pour tes données?

Pour le moment ca doit être quelque chose du genre :

date1 - nom1
date2 - nom2
date3 - nom3
Documents visibles : 3
0
pekwy Messages postés 11 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 4 juin 2012
Modifié par pekwy le 13/05/2010 à 19:35
@allyson77
Pour l'instant c'est le format qui s'affiche.
Moi je souhaiterais ce format :
Documents visibles : 3
date1 - nom1
date2 - nom2
date3 - nom3

Merci !
0
mrgeek Messages postés 23 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 11 juillet 2010 5
Modifié par mrgeek le 13/05/2010 à 19:36
Bah reprends le même principe que ma première réponse en sortant le Documents visible du foreach:
$visibilite = 0;  
$rst = array();  
while ($document = tep_db_fetch_array($document)){  
  if ($document[visible] == '1') {  
   array_push($rst, date("d/m/Y", strtotime($document[date_de_creation])).' - '.$document[nom].'<br/>');  
   $visibilite ++;  
 }  
}  
echo 'Documents visibles :'.$visibilité.'<br />'; 
foreach($rst as $line){  
   echo $line.'<br />';  
}  
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pekwy Messages postés 11 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 4 juin 2012
13 mai 2010 à 19:37
@mrgeek
Je ne peux pas restreindre ma requête avec visibilite ='1' car cette requête est source de plusieurs traitements dont certains avec visibilite ='0'

Merci !
0
allyson77 Messages postés 20 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 mai 2010 2
13 mai 2010 à 19:38
Remplace

<? $visibilite = 0 ?>
<? while ($document = tep_db_fetch_array($document))
{
if ($document[visible] == '1')
{
echo date("d/m/Y", strtotime($document[date_de_creation]));
?> - <?
echo $document[nom].'<br/>';
$visibilite = $visibilite + 1;
}
}
?>
Documents visibles : <? echo $visibilite; ?> 


Par

<? $visibilite = 0 ?>
<? while ($document = tep_db_fetch_array($document))
{
if ($document[visible] == '1')
{
$visibilite = $visibilite + 1;
}
}
?>
Documents visibles : <? echo $visibilite; ?> 

<? while ($document = tep_db_fetch_array($document))
{
if ($document[visible] == '1')
{
echo date("d/m/Y", strtotime($document[date_de_creation]));
?> - <?
echo $document[nom].'<br/>';

}
}
?>
0
mrgeek Messages postés 23 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 11 juillet 2010 5
13 mai 2010 à 19:38
Utilise le code donné 8-) y'a aucune restriction c'est le même code que celui que tu as fourni mais corrigé
0
allyson77 Messages postés 20 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 mai 2010 2
13 mai 2010 à 19:40
A part si tu as une méthode du genre rep_db_nb_rows($document);
Tu devra faire deux boucles, la première qui compte puis affiche le total, la deuxième qui affiche les lignes.
0
pekwy Messages postés 11 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 4 juin 2012
13 mai 2010 à 19:43
J'ai remplacé le code par celui donné par allyson77 mais ça ne fonctionne pas, ça ne m'affiche que le nombre de documents visibles
0
pekwy Messages postés 11 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 4 juin 2012
13 mai 2010 à 19:44
effectivement j'ai une méthode du genre rep_db_nb_rows($document);
0
allyson77 Messages postés 20 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 mai 2010 2
13 mai 2010 à 19:45
A cause des noms de variable dupliqués, essaye par ca plutot :

<? $visibilite = 0 ?>
<? while ($documentA = tep_db_fetch_array($document))
{
if ($documentA[visible] == '1')
{
$visibilite = $visibilite + 1;
}
}
?>
Documents visibles : <? echo $visibilite; ?> 

<? while ($documentB = tep_db_fetch_array($document))
{
if ($documentB[visible] == '1')
{
echo date("d/m/Y", strtotime($documentB[date_de_creation]));
?> - <?
echo $documentB[nom].'<br/>';

}
}
?>
0
allyson77 Messages postés 20 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 mai 2010 2
13 mai 2010 à 19:46
Si tu as une as cette méthode, ton code sera le suivant :

Documents visibles : <? echo tep_db_nb_rows($document) ?>

<? while ($documentB = tep_db_fetch_array($document))
{
if ($documentB[visible] == '1')
{
echo date("d/m/Y", strtotime($documentB[date_de_creation]));
?> - <?
echo $documentB[nom].'<br/>';

}
}
?>
0
mrgeek Messages postés 23 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 11 juillet 2010 5
13 mai 2010 à 19:48
@allyson77 : Il ne limite pas sa requête ca affichera le nombre de lignes sortantes de la requête.

@pekwy : Encore une fois essaye la solution donnée 8-) Ca sert à quoi que Ducros se décarcasse
0
allyson77 Messages postés 20 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 mai 2010 2
13 mai 2010 à 19:51
Oui le nb_rows donnera le nombre total de document, que 'visible' soit à 1 ou 0, tu as raison mister geek ;-)
0
pekwy Messages postés 11 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 4 juin 2012
13 mai 2010 à 19:52
J'ai essayé toutes les solutions proposées mais ça ne m'affiche que le nombre de documents visibles. Je n'ai pas le nom et la date de chaque document
0
mrgeek Messages postés 23 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 11 juillet 2010 5
13 mai 2010 à 19:54
Faut savoir ce qu'on veut des fois ...
Tu as dit:

Moi je souhaiterais ce format :
Documents visibles : 3
date1 - nom1
date2 - nom2
date3 - nom3

...

On te donne les solutions selon ce que tu nous demande :)

Peux-tu donner littéralement ce que tu recherche?
0
pekwy Messages postés 11 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 4 juin 2012
13 mai 2010 à 19:55
effectivement je souhaite le format :
Documents visibles : 3
date1 - nom1
date2 - nom2
date3 - nom3

Mais en testant vos solutions j'ai juste :
Documents visibles : 3
0
allyson77 Messages postés 20 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 mai 2010 2
13 mai 2010 à 19:56
Si cette solution là ne fonctionne pas (donné un peu plus haut), j'ai épuisé mais ressource...

<? $visibilite = 0 ?>
<? while ($documentA = tep_db_fetch_array($document))
{
if ($documentA[visible] == '1')
{
$visibilite = $visibilite + 1;
}
}
?>
Documents visibles : <? echo $visibilite; ?> 

<? while ($documentB = tep_db_fetch_array($document))
{
if ($documentB[visible] == '1')
{
echo date("d/m/Y", strtotime($documentB[date_de_creation]));
?> - <?
echo $documentB[nom].'<br/>';

}
}
?>


Faudrait chercher alors a savoir ce que fait ton tep_db_fetch_array...
Essaye de voir ce qu'est contenu dans la variable $document après le passage de la première boucle => var_dump($document);
0
mrgeek Messages postés 23 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 11 juillet 2010 5
13 mai 2010 à 19:57
$visibilite = 0;  

// Créé un array
$rst = array();  

// Boucle sur ton résultat
while ($document = tep_db_fetch_array($document)){  

  // Si le document est visible
  if ($document[visible] == '1') {  

   // On ajoute a l'array Date - nom du document
   array_push($rst, date("d/m/Y", strtotime($document[date_de_creation])).' - '.$document[nom].'<br/>');  

   // On ajoute 1 au compteur visibilité
   $visibilite ++;  
 }  
}  

// On affiche le nombre de documents visibles
echo 'Documents visibles :'.$visibilité.'<br />'; 

// Pour chaque element de l'array
foreach($rst as $line){  
   // On afficher Date - nom du document
   echo $line.'<br />';  
}  
?>


Ca donne exactement ta demande :|
0
allyson77 Messages postés 20 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 mai 2010 2
13 mai 2010 à 19:59
La solution de mrgeek devrait fonctionner aussi.
Tu n'as pas d'erreur PHP je suppose?
0