Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/10/2006, 11h23   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut [Conception] Je voudrais lire une table en continu

Bonjour à tous,

J'ai crée une boucle while qui parcourt une table. Mais elle s'arrête à la fin et je voudrais qu'elle reparte au début et recommence la lecture indéfiniement. Comment faire ?
Voici mon code

Code :
1
2
3
4
5
6
7
8
 
 
$i = 0;
$sql = mysql_query("SELECT champ1 FROM table order by id");
while($row = mysql_fetch_row($sql)){
$data[$i] = $row[0];
$i++;
}
Merci d'avance.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 11h26   #2
Membre émérite
 
Inscription : juillet 2005
Messages : 775
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juillet 2005
Messages : 775
Points : 858
Points : 858
Envoyer un message via AIM à ouatmad Envoyer un message via MSN à ouatmad Envoyer un message via Yahoo à ouatmad
jette un coup d'oeil a mysql_data_seek. peut etre que ça fera ton affaire
__________________
Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789
ouatmad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 12h13   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
oui merci, j'ai regardé doc et exemples sur mysql_data_seek...mais trop bien capté...
j'ai fait ça...mais ça fonctionne pas

Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
$sql = "SELECT champ1 FROM table order by sid";
$res = mysql_query($sql);
for ($i = mysql_num_rows ($res) - 1; $i >=0; $i--) 
{
	$row = mysql_fetch_row($res);      
	$data[$i] = $row[0];    
	mysql_data_seek ($res, $i);    
 
}
T'as une idée ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 12h26   #4
Membre émérite
 
Inscription : juillet 2005
Messages : 775
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juillet 2005
Messages : 775
Points : 858
Points : 858
Envoyer un message via AIM à ouatmad Envoyer un message via MSN à ouatmad Envoyer un message via Yahoo à ouatmad
essai ce code
Code :
1
2
3
4
5
6
7
8
9
10
11
$sql = "SELECT champ1 FROM table order by sid";
$res = mysql_query($sql);
$i = $nbelt=mysql_num_rows ($res) - 1;
while ($i>-1){
        $row = mysql_fetch_row($res);      
	$data[$i] = $row[0];    
	mysql_data_seek ($res, $i);
       $i--;
       if ($i==-1)
           $i= $nbelt  ;
}
__________________
Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789
ouatmad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 12h30   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
ou la la gros plantage du serveur...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 12h41   #6
Membre émérite
 
Inscription : juillet 2005
Messages : 775
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juillet 2005
Messages : 775
Points : 858
Points : 858
Envoyer un message via AIM à ouatmad Envoyer un message via MSN à ouatmad Envoyer un message via Yahoo à ouatmad
Citation:
Envoyé par renaud26
ou la la gros plantage du serveur...
c'est normal puisque c'est une lecture en boucle. on sort jamais de la boucle en fait. c'est pas ce que tu voulais faire? en fait je me demandais a quoi ça peut bien te servir de faire une boucle infinie
__________________
Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789
ouatmad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 14h14   #7
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
En fait je souhaite créer un affichage d'url selon un timeout javascript. J'ai donc besoin d'un array(), ce que fait ma boucle avec data.
Code :
1
2
3
4
5
6
 
 
while($row = mysql_fetch_row($res)){
$data[$i] = $row[0];
$i++;
}
J'ai donc besoin que, une fois la table parcourue, la boucle ne s'arrête pas, mais que le pointeur revienne au début et relise la table. J'ai cru comprendre que c'est ce que faisait mysql_data_seek, mais je n'ai pas capté comment l'utiliser dans la boucle...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 14h39   #8
Membre éprouvé
 
Homme
Inscription : avril 2005
Messages : 611
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Turquie

Informations forums :
Inscription : avril 2005
Messages : 611
Points : 459
Points : 459
tu est obligé de mettre une condition pour sortir de ta boucle sinon le serveur va forcément planté.

J'ai pas bien compris quel est ton objectif.
maximenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 14h45   #9
Membre émérite
 
Inscription : juillet 2005
Messages : 775
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juillet 2005
Messages : 775
Points : 858
Points : 858
Envoyer un message via AIM à ouatmad Envoyer un message via MSN à ouatmad Envoyer un message via Yahoo à ouatmad
Citation:
Envoyé par renaud26
J'ai donc besoin que, une fois la table parcourue, la boucle ne s'arrête pas, mais que le pointeur revienne au début et relise la table.
le resultat ne peut produire qu'une boucle infinie. Il faut bien sortir de la boucle a un moment ou a un autre. Faudrait peut etre eclaircir tes intentions
__________________
Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789
ouatmad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 14h48   #10
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Merci de ton intêret.
mon objectif est le suivant: je veux afficher des URL dans un iframe. Elles changent automatiquement toutes les X secondes avec un setTimeout qui lit un array().
Pour générer ce tableau, je les ai stockées dans une table. Ma boucle parcourt la table, génère le tableau et affiche les url. A la dernière url, elle s'arrête. Hors je voudrais que le pointeur revienne à 0 et que la boucle recommence. Sûrement que mysql_data_seek est une bonne piste, mais je n'arrive pas à le faire fonctionner...
Euh...je sais pas si je suis bien clair, là ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 15h07   #11
Membre habitué
 
Avatar de SOAD08
 
Inscription : juillet 2004
Messages : 101
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juillet 2004
Messages : 101
Points : 104
Points : 104
Envoyer un message via MSN à SOAD08 Envoyer un message via Skype™ à SOAD08
Je n'ai pas tout compris, essaye tu d'aficher des données venant d'un table SQL après le chargement de la page ? Car le seul moyen pour faire ça est d'utiliser l'objet javascript XmlHttpRequest.
SOAD08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 15h10   #12
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
ok, ok...je vais me renseigner sur l'objet XmlHttpRequest que je ne connais pas du tout...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 15h21   #13
Membre habitué
 
Avatar de SOAD08
 
Inscription : juillet 2004
Messages : 101
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juillet 2004
Messages : 101
Points : 104
Points : 104
Envoyer un message via MSN à SOAD08 Envoyer un message via Skype™ à SOAD08
Tu peux chercher ici : AJAX
SOAD08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 15h57   #14
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
ou la la....ma pauvre tête...

Mais en fait, je ne pense pas que mon problème vienne de là...car j'ai une fonction qui récupère un array() php et me permet de l'interpréter en JS. Ca fonctionne nickel...Simplement cette p... de boucle qui se bloque quand elle a lu la table et ne veut pas relire ensuite. Ca tient qu'à ça.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 16h28   #15
Membre émérite
 
Inscription : juillet 2005
Messages : 775
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juillet 2005
Messages : 775
Points : 858
Points : 858
Envoyer un message via AIM à ouatmad Envoyer un message via MSN à ouatmad Envoyer un message via Yahoo à ouatmad
une question: dans quelle condition on sort de la boucle??
__________________
Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789
ouatmad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 16h33   #16
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Moi je dirais que le code donné plus haut est un bon départ mais l'utilisation de la fonction ne va pas du tout. Enfin ce n'est que mon avis. Moi je proposerai ceci, obtenu avec l'aide de la FAQ (Comment se repositionner sur le premier enregistrement d'une requête Select ?) :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
$i = 0;
$sql = mysql_query("SELECT champ1 FROM table order by id");
$nb_elt = mysql_num_rows($sql);
while($row = mysql_fetch_row($sql)){
$data[$i] = $row[0];
if($i < ($nb_elt - 1))
// On se repositionne sur le premier enregistrement
@mysql_data_seek($sql, 0);
$i++; 
}
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 16h36   #17
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
ben...jamais ! je voudrais que ça "rembobine" à la fin de la lecture...mais peut être qu'il faut pas une boucle while, mais une fonction de tableau...je sais plus, je suis un peu largué, là. Je suis en train de tester une fonction récursive...pas terrible...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 16h40   #18
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Ah zut je me suis trompé entre < et >

Et ca le ferai par contre le problème que dans le cas indéfini il faudrait un compteur qui serait réinitialisé à chaque remise à zéro et là ca devrait fonctionner
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 16h41   #19
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
oui, merci, Kerod, je vais tester ça. En effet, ton premier bout de code faisait "patiner" la boucle sur le 1er enreg...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2006, 16h42   #20
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
En gros quelque chose comme ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
$i = $cpt = 0;
$sql = mysql_query("SELECT champ1 FROM table order by id");
$nb_elt = mysql_num_rows($sql);
while($row = mysql_fetch_row($sql)){
$data[$i] = $row[0];
if($cpt >= ($nb_elt - 1))
{
   // On se repositionne sur le premier enregistrement
   @mysql_data_seek($sql, 0);
   $cpt = 0;
}
else
{   
   $cpt++;
}
$i++; 
}
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h15.


 
 
 
 
Partenaires

Hébergement Web