Souci en php demande de fonction

Fermé
Anto - 10 sept. 2009 à 17:02
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 6 nov. 2009 à 18:38
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

74 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 sept. 2009 à 17:35
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
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 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
10 sept. 2009 à 17:40
avec un peu de javascript ça devrait aller^^ mais le php est absolument pas fait pour ça (php=serveur=données!=forme)
0
Oki Merci :)

Des pistes pour un eventuel javascript tout beau qui extrayerait entrée par entrée ?
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
10 sept. 2009 à 17:56
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 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
10 sept. 2009 à 17:56
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 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
10 sept. 2009 à 17:56
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 sept. 2009 à 17:51
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
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 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
10 sept. 2009 à 18:06
je doute, mais tiens nous au courant^^ (sait on jamais, et désolé pour les doublons, CCM plantait -_-)
0
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
j'ai l'impression que mon code devient un peu du bidouillage :p
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 sept. 2009 à 18:11
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 sept. 2009 à 18:15
heu une petite erreur il faut comme ça je crois:

setTimeout("affiche_texte(i)",10000);
0
Genial ! merci beaucoup pour ce code!
Je vais essayer ca tout de suite !
0
Mince ca ne marche pas j'ai juste une page blanche avec ecrit : undefined :/
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 sept. 2009 à 18:28
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
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 sept. 2009 à 18:38
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
Pareil ca compte toujours de un à quatre :/
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 sept. 2009 à 18:46
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
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 sept. 2009 à 19:07
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
Je suis désolé de t'embeter avec ca :/
Toujours le même message...

Undefined....


:-(

c'est une erreur javascript alors?
0