Souci en php demande de fonction

Anto -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour!

Je me permets de poster sur ce forum car je ne trouve pas la solution à un de mes problème en php.
Je temporise une boucle while qui affiche entrée par entrée une base de donnée :

$sql = mysql_query("SELECT * FROM ".$base_page." WHERE Ecran='".$ecran." ' OR Ecran='1' ");
//affichage de la page en question :
while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
{

echo $row['Texte'];
echo "<br><hr style='border:1px solid black;'><br>";
sleep(10);
}

jusque là tout va bien ça marche !

Le problème c'est que je souhaiterai que lorsque la boucle while reprend la première entrée de la base de donnée disparaisse pour n'afficher qu'une entrée par entrée... !
Impossible de trouver une solution....

Merci de votre aide si vous trouvez!

Anto
A voir également:

74 réponses

Alain_42 Messages postés 5413 Statut Membre 894
 
Je temporise une boucle while qui affiche entrée par entrée une base de donnée :

Quel intérêt à faire ça ?

le script php vca beuguer très rapidement si tu as beaucoup d'enregistrements car il y a un max execution time en général 30 secondes

si tu as 20 enregistrements ça fera 10 x 20 = 200 secondes

de toute façon le script php attend la fin de son éxécution avant d'envoyer la page vers le navigateur
0
Anto
 
Arf zut je savais pas qu'il y'avait des restrictions de temps d'execution...

En fait je voudrais que chaque entrée de ma base de donnée s'affiche une par une pendant un certain temps sur une page blanche.

Pour faire une sorte de diaporama powerpoint avec mes entrées...

Je ne vois pas comment faire autrement...
0
Smoking bird Messages postés 911 Statut Membre 58
 
avec un peu de javascript ça devrait aller^^ mais le php est absolument pas fait pour ça (php=serveur=données!=forme)
0
Anto
 
Oki Merci :)

Des pistes pour un eventuel javascript tout beau qui extrayerait entrée par entrée ?
0
Smoking bird Messages postés 911 Statut Membre 58
 
va falloir que tu le code à la mimine^^

tu sors toutes les entrées et tu les places dans un conteneur type block (par défaut). Il faut qu'elles aient toutes un id par incrémentation, ce serait tip top. Par défaut, tu mets le display:none; (ou visibility, au choix, c'est un peu brouillon tout ça) et ta fonction javascript contiendra une minuterie avec comme consigne de cacher l'entrée avec l'id courante, incrémenter l'id, monter l'id suivante, laisser filer la minuterie :D. Par contre, je sèche pour le déclenchement de la fonction.... onload peut être, dépend de ta page.
0
Smoking bird Messages postés 911 Statut Membre 58
 
va falloir que tu le code à la mimine^^

tu sors toutes les entrées et tu les places dans un conteneur type block (par défaut). Il faut qu'elles aient toutes un id par incrémentation, ce serait tip top. Par défaut, tu mets le display:none; (ou visibility, au choix, c'est un peu brouillon tout ça) et ta fonction javascript contiendra une minuterie avec comme consigne de cacher l'entrée avec l'id courante, incrémenter l'id, monter l'id suivante, laisser filer la minuterie :D. Par contre, je sèche pour le déclenchement de la fonction.... onload peut être, dépend de ta page.
0
Smoking bird Messages postés 911 Statut Membre 58
 
va falloir que tu le code à la mimine^^

tu sors toutes les entrées et tu les places dans un conteneur type block (par défaut). Il faut qu'elles aient toutes un id par incrémentation, ce serait tip top. Par défaut, tu mets le display:none; (ou visibility, au choix, c'est un peu brouillon tout ça) et ta fonction javascript contiendra une minuterie avec comme consigne de cacher l'entrée avec l'id courante, incrémenter l'id, monter l'id suivante, laisser filer la minuterie :D. Par contre, je sèche pour le déclenchement de la fonction.... onload peut être, dépend de ta page.
0
Alain_42 Messages postés 5413 Statut Membre 894
 
oui tu peux par exemple dans ton script php , dans ta boucle while (sans tempo) generer un array javascript (un peu différent d'un array php)

et ensuite tu envoie ça à la page et dans ton script javascript par une tempo tu viens afficher dans la page les éléments les uns après les autres
0

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

Posez votre question
Anto
 
Merci pour vos reponses :)

J'ai trouvé ca comme code :

<head>
<META HTTP-EQUIV="refresh" CONTENT="5; URL=afficheur2.php">

</head>

et je pense faire l'incrementation pour le changement d'entrée à afficher avec une variable de session!

J'espère que ca va marcher !!
0
Smoking bird Messages postés 911 Statut Membre 58
 
je doute, mais tiens nous au courant^^ (sait on jamais, et désolé pour les doublons, CCM plantait -_-)
0
Anto
 
après un refresh de cette page :



//entete obligatoire pour la suite !!!!!!!!!!!!!

Require("./Include/function.php");
include("./Include/connexion.inc.php");

// selection de l'element a afficher
// la valeur 1 est la valeur pour signaler tout les ecran
$ecran = 'A';//valeur a chager selon l'ecran : voir la base de donnée


$sql = mysql_query("SELECT * FROM ".$base_page." WHERE Ecran='".$ecran." ' OR Ecran='1' ");
//affichage de la page en question :

while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
{

echo $row['Texte'];
echo "<br><hr style='border:1px solid black;'><br>";

}


$_SESSION['defilement'] = $_SESSION['defilement']+1;
echo $_SESSION['defilement'];


ma variable $_SESSION['defilement'] vaut tjr 1 quelque soit le nombre de refresh.... je vois pas pkoi...?
0
Anto
 
j'ai l'impression que mon code devient un peu du bidouillage :p
0
Alain_42 Messages postés 5413 Statut Membre 894
 
Essayes ça, je n'ai pas testé c'est une piste

<?php
//connexion etc..
$sql = mysql_query("SELECT * FROM ".$base_page." WHERE Ecran='".$ecran." ' OR Ecran='1' ");
$tab_php=array();
while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
{
$tab_php[]= $row['Texte']; //on empile dans un array php
}
?>
<html>
<head>
<script type="text/javascript">
function affiche_texte(i){
	<?php
	//on va generer l'array JS a partir de celui en php
	echo 'var tableau_JS = new Array(';
	foreach($tab_php as $valeur) {
	  if(is_int($value)){
		 echo $value.',';
	  }else{
		 echo '"'.$value.'",';
		} 
	}
	echo ');';
	?>
	var obj=document.getElementById('zone_affichage'); //on atteint le div
	obj.innerHTML=tableau_JS[i]; //on y ecrit l'entrée de l'array

	i++;
	if (i < tableau_JS.length) {
		//on boucle tant que le tableau n'est pas fini
		setTimeout(affiche_texte(i),10000);//tempo en milisecondes
	}
}
</script>
</head>
<body onLoad="javascript:affiche_texte('0');">
<div id="zone_affichage">
<!-- ça va s'afficher là -->
</div>
</body>
</html>
0
Alain_42 Messages postés 5413 Statut Membre 894
 
heu une petite erreur il faut comme ça je crois:

setTimeout("affiche_texte(i)",10000);
0
Anto
 
Genial ! merci beaucoup pour ce code!
Je vais essayer ca tout de suite !
0
Anto
 
Mince ca ne marche pas j'ai juste une page blanche avec ecrit : undefined :/
0
Alain_42 Messages postés 5413 Statut Membre 894
 
j'ai fait l'essai effectivement beaucoup de bugs

essayes comme ça (j'ai remplacé ta requette par un array en "dur" un deux trois..)

<?php
//connexion etc..
//$sql = mysql_query("SELECT * FROM ".$base_page." WHERE Ecran='".$ecran." ' OR Ecran='1' ");
$tab_php=array("un","deux","trois","quatre");
/*while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
{
$tab_php[]= $row['Texte']; //on empile dans un array php
}
*/
?>
<html>
<head>
<script type="text/javascript">
var i=0;
function affiche_texte(){
	<?php
	//on va generer l'array JS a partir de celui en php
	$j=0;
	echo 'var tableau_JS = new Array(';
	foreach($tab_php as $value) {
	  if(is_int($value)){
		 echo $value;
	  }else{
		 echo '"'.$value.'"';
		}
			$j++;
			if($j<sizeof($tab_php)) echo ',';
	}
	echo ');';
	?>
	var obj=document.getElementById('zone_affichage'); //on atteint le div
	obj.innerHTML=tableau_JS[i]; //on y ecrit l'entrée de l'array

	i++;
	if (i < tableau_JS.length) {
		//on boucle tant que le tableau n'est pas fini
		setTimeout("affiche_texte()",10000);//tempo en milisecondes
	}
}
</script>
</head>
<body onLoad="javascript:affiche_texte('0');">
<div id="zone_affichage">
<!-- ça va s'afficher là -->
</div>
</body>
</html>
0
Anto
 
Ca fait un script qui compte de 1 à 4 en lettre :p

http://www.lycee-queneau.net/afficheur3.php

Mais il y'a un défilement maintenant !

Merci de ton aide !
0
Alain_42 Messages postés 5413 Statut Membre 894
 
une petite variante: (modif de la ligne setTimeout et suppr va ri=0)

<?php
//connexion etc..
//$sql = mysql_query("SELECT * FROM ".$base_page." WHERE Ecran='".$ecran." ' OR Ecran='1' ");
$tab_php=array("un","deux","trois","quatre");
/*while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
{
$tab_php[]= $row['Texte']; //on empile dans un array php
}
*/
?>
<html>
<head>
<script type="text/javascript">

function affiche_texte(i){
	<?php
	//on va generer l'array JS a partir de celui en php
	$j=0;
	echo 'var tableau_JS = new Array(';
	foreach($tab_php as $value) {
	  if(is_int($value)){
		 echo $value;
	  }else{
		 echo '"'.$value.'"';
		}
			$j++;
			if($j<sizeof($tab_php)) echo ',';
	}
	echo ');';
	?>
	var obj=document.getElementById('zone_affichage'); //on atteint le div
	obj.innerHTML=tableau_JS[i]; //on y ecrit l'entrée de l'array

	i++;
	if (i < tableau_JS.length) {
		//on boucle tant que le tableau n'est pas fini
		setTimeout(function(){affiche_texte(i);},5000);//tempo en milisecondes
		}
	}

</script>
</head>
<body onLoad="javascript:affiche_texte('0');">
<div id="zone_affichage">
<!-- ça va s'afficher là -->
</div>
</body>
</html>
0
Anto
 
Pareil ca compte toujours de un à quatre :/
0
Alain_42 Messages postés 5413 Statut Membre 894
 
oui c'est normal puisque j'ai remplacé ta requette par un array bidon,

le deuxième code est juste un peu "plus propre"

pour avoir ta page normale remplaces:
<?php
//connexion etc..
//$sql = mysql_query("SELECT * FROM ".$base_page." WHERE Ecran='".$ecran." ' OR Ecran='1' ");
$tab_php=array("un","deux","trois","quatre");
/*


par:
<?php
//connexion etc..
$sql = mysql_query("SELECT * FROM ".$base_page." WHERE Ecran='".$ecran." ' OR Ecran='1' ");
$tab_php=array();

0
Anto
 
j'ai mis ca comme ca :


<?php
//connexion etc..
Require("./Include/function.php");
include("./Include/connexion.inc.php");





$sql = mysql_query("SELECT * FROM ".$base_page." WHERE Ecran='".$ecran." ' OR Ecran='1' ");
$tab_php=array();

?>
<html>
<head>
<script type="text/javascript">

function affiche_texte(i){
<?php
//on va generer l'array JS a partir de celui en php
$j=0;
echo 'var tableau_JS = new Array(';
foreach($tab_php as $value) {
if(is_int($value)){
echo $value;
}else{
echo '"'.$value.'"';
}
$j++;
if($j<sizeof($tab_php)) echo ',';
}
echo ');';
?>
var obj=document.getElementById('zone_affichage'); //on atteint le div
obj.innerHTML=tableau_JS[i]; //on y ecrit l'entrée de l'array

i++;
if (i < tableau_JS.length) {
//on boucle tant que le tableau n'est pas fini
setTimeout(function(){affiche_texte(i);},5000);//tempo en milisecondes
}
}

</script>
</head>
<body onLoad="javascript:affiche_texte('0');">
<div id="zone_affichage">
<!-- ça va s'afficher là -->
</div>
</body>
</html>


et meme sorti : page blanche avec undefined :-/
0
Alain_42 Messages postés 5413 Statut Membre 894
 
il manque la boucle while :

<?php
//connexion etc..
Require("./Include/function.php");
include("./Include/connexion.inc.php");

$sql = mysql_query("SELECT * FROM ".$base_page." WHERE Ecran='".$ecran." ' OR Ecran='1' ");
$tab_php=array();
while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
{
$tab_php[]= $row['Texte']; //on empile dans un array php
}

?>
<html>
<head>
<script type="text/javascript">

function affiche_texte(i){
<?php
//on va generer l'array JS a partir de celui en php
$j=0;
echo 'var tableau_JS = new Array(';
foreach($tab_php as $value) {
if(is_int($value)){
echo $value;
}else{
echo '"'.$value.'"';
}
$j++;
if($j<sizeof($tab_php)) echo ',';
}
echo ');';
?>
var obj=document.getElementById('zone_affichage'); //on atteint le div
obj.innerHTML=tableau_JS[i]; //on y ecrit l'entrée de l'array

i++;
if (i < tableau_JS.length) {
//on boucle tant que le tableau n'est pas fini
setTimeout(function(){affiche_texte(i);},5000);//tempo en milisecondes
}
}

</script>
</head>
<body onLoad="javascript:affiche_texte('0');">
<div id="zone_affichage">
<!-- ça va s'afficher là -->
</div>
</body>
</html> 
0
Anto
 
Je suis désolé de t'embeter avec ca :/
Toujours le même message...

Undefined....


:-(

c'est une erreur javascript alors?
0