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

Hello !

Tu rentres bientôt chez toi?

Encore merci de ton aide
0
Hello !

Tu rentres quand?
Je reste très intéressé si tu as d'autres solutions...

D'avance merci !!

Anto
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
14 oct. 2009 à 14:54
Je rentre samedi, mais je risque d'etre un peu decalque par le decalage horaire
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
16 oct. 2009 à 16:14
J'ai une idee de script different:

- on ne charge plus les textes dans un array javascript, mais le php a la suite de la requette dans la base va les ecrire dans des div, avec chacun un id different, dans la partie body de la page html
<div id="num a incremeter>contenu texte lu dans la table</div>"


et le role de la fonction javascript sera seulement de masquer / afficher un seul des div les uns apres les autres par la tempo

par style.display='none' / 'block'

donc plus aucun probleme avec les balises html tu pourra mettre celles que tu veux

commence deja a essayer de faire la partie php qui va generer les div dans la partie <body>

une piste: utilise une boucle foreach($tab_php .........)

semaine prochaine on regardera ensemble ce que tu aura fait et on fera la partie fonction javascript

Salut

@lain
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
19 oct. 2009 à 10:14
Bon ben voilà je t'ai fait ça:

J'ai rajouté aussi un peu de CSS pour que tu puisses faire une mise en forme plus commode, chez moi ça marche.
Tu peux mettre toutes les balises HTML que tu veux ça ne gene plus, mais pour la mise en forme regardes du côté du CSS, c'est mieux.

<?php
////initialisation des variables:
$ecran = 'A'; //valeur a chager selon l'ecran : voir la base de donnée
$tab_php=array();
////

//// include:
include("./Include/function.php");
////

/////connexion:
include("./Include/connexion.inc.php");
////

$sql = mysql_query("SELECT * FROM ".$base_page." ") or die ("Pb avec la requette ".mysql_error());
$nbr_enr_trouves=mysql_num_rows($sql);

/* 
///TEST sans BDD
$tab_php=array("<p>Bonjour page1</p>","<b>Page2</b>","Page3<br />avec saut de ligne");
$nbr_enr_trouves=sizeof($tab_php);
///
*/
//le DOCTYPE et meta content ci dessous sont super importants
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" /><title>
<script type="text/javascript">
function affiche_texte(i){
	//on va seulement passer au script JS le nombre de textes a afficher
	var nbr_div = <?php echo $nbr_enr_trouves; ?>;
	
				//partie affichage successif d'un des textes
	// a chaque appel de la fonction a va en afficher un et masquer les autres
	//pour cela on fait une boucle qui les parcours tous et mets seulement celui concerne a display=block et tous les autres a display=none
	for(j=0;j<nbr_div;j++){
		var obj=document.getElementById('id_'+j); //on atteint le div
		if(j==i){
			//si le numero du div est egal a celui que l'on veut afficher 
			if(document.getElementById('id_'+j).style.display=='none'){
				//et si il est masque on l'affiche
				document.getElementById('id_'+j).style.display='block';
			}
		
		}else{
			//pour tous les autres si il sont  affiches on les masque
			if(document.getElementById('id_'+j).style.display=='block'){				
				document.getElementById('id_'+j).style.display='none';
			}
		}
	}

			//  partie gestion de boucle et rebouclage au debut
	i++;
	if (i == nbr_div) i=0; //on a atteint la fin on remet la variable i parametre d'appel de la fonction a 0

			//partie tempo et rappel fonction
	setTimeout(function(){affiche_texte(i);},5000);//tempo en milisecondes
	}
</script>
</head>
<style type="text/css">
	div .afficheur{
		/* ci dessous tu va pouvoir mettre en forme tes blocks d'affichage avec du CSS c'est tres pratique et puissant */
		width: 200px;
		height: auto;
		background-color: #fff999;
		font-family: Arial sans sherif;
		font-size: 0.9em;
		color: #666666;
		text-align: center;
	}
</style>
<body onLoad="javascript:affiche_texte('0');">

<div id="zone_affichage">
<?php
	if($nbr_enr_trouves>0){ //si enr trouves dans la BDD
		//a chaque passage de la boucle on va generer une "boite" div contenant chaque texte 
		foreach($tab_php as $cle=>$value) {
			//$cle= index de l'array c. a. d.  0  1   2 on va s'en servir pour genrer dynamiquement l'id du div
			//$value contient le texte a afficher a chaque fois
			echo '<div id="id_'.$cle.'" class="afficheur" style="display:none;">'.$value.'</div>';
		}
	}else{// si aucun enr trouve
		echo 'Aucun enregistrement, correspondant au crit&egrave;re, trouv&eacute; dans la base !';
	}	
?>
</div>
</body>
</html>
0
Salut Alain !

Bon retour de notre côté de l'atlantique !
J'ai essayé ton script (en mode sans bdd) et ca reste tout blanc!
http://www.lycee-queneau.net/afficheur5.php

et avec la base de donnée :
http://www.lycee-queneau.net/afficheur6.php

la même page blanche :/


Je ois souvent cette ligne : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Qu'est ce que c'est?


Merci de ton aide !!

Anto
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
19 oct. 2009 à 16:27
la ligne <DOCTYPE c'est pour indiquer au navigateur le type de données a traiter, c'est indispensable de le mettre

par contre qd je clique sur le deuxieme lien, celui ou tu dis avec la BDD, j'ai l'affichage qui fonctionne bien chez moi , par contre ce qui s'affiche c'est les valeurs sans BDD c'est a dire avec les valeurs rentrées en dur dans l'array $tab_php

je ne comprend pas

@lain
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
19 oct. 2009 à 16:39
ca y est j'ai trouve j'ai pas encore la tete bien en face j'avais oublie 3 lignes:

<?php
////initialisation des variables:
$ecran = 'A'; //valeur a chager selon l'ecran : voir la base de donnée
$tab_php=array();
////

//// include:
include("./Include/function.php");
////

/////connexion:
include("./Include/connexion.inc.php");
////

$sql = mysql_query("SELECT * FROM ".$base_page." ") or die ("Pb avec la requette ".mysql_error());
$nbr_enr_trouves=mysql_num_rows($sql);
/////il manquait ces lignes
while($row = mysql_fetch_array($sql, MYSQL_ASSOC)){
	$tab_php[]= $row['Texte']; //on empile dans un array php
}
/////

/* 
///TEST sans BDD
$tab_php=array("<p>Bonjour page1</p>","<b>Page2</b>","Page3<br />avec saut de ligne");
$nbr_enr_trouves=sizeof($tab_php);
///
*/
//le DOCTYPE et meta content ci dessous sont super importants
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" /><title>
<script type="text/javascript">
function affiche_texte(i){
	//on va seulement passer au script JS le nombre de textes a afficher
	var nbr_div = <?php echo $nbr_enr_trouves; ?>;
	
				//partie affichage successif d'un des textes
	// a chaque appel de la fonction a va en afficher un et masquer les autres
	//pour cela on fait une boucle qui les parcours tous et mets seulement celui concerne a display=block et tous les autres a display=none
	for(j=0;j<nbr_div;j++){
		var obj=document.getElementById('id_'+j); //on atteint le div
		if(j==i){
			//si le numero du div est egal a celui que l'on veut afficher 
			if(document.getElementById('id_'+j).style.display=='none'){
				//et si il est masque on l'affiche
				document.getElementById('id_'+j).style.display='block';
			}
		
		}else{
			//pour tous les autres si il sont  affiches on les masque
			if(document.getElementById('id_'+j).style.display=='block'){				
				document.getElementById('id_'+j).style.display='none';
			}
		}
	}

			//  partie gestion de boucle et rebouclage au debut
	i++;
	if (i == nbr_div) i=0; //on a atteint la fin on remet la variable i parametre d'appel de la fonction a 0

			//partie tempo et rappel fonction
	setTimeout(function(){affiche_texte(i);},5000);//tempo en milisecondes
	}
</script>
</head>
<style type="text/css">
	div .afficheur{
		/* ci dessous tu va pouvoir mettre en forme tes blocks d'affichage avec du CSS c'est tres pratique et puissant */
		width: 200px;
		height: auto;
		background-color: #fff999;
		font-family: Arial sans sherif;
		font-size: 0.9em;
		color: #666666;
		text-align: center;
	}
</style>
<body onLoad="javascript:affiche_texte('0');">

<div id="zone_affichage">
<?php
	if($nbr_enr_trouves>0){ //si enr trouves dans la BDD
		//a chaque passage de la boucle on va generer une "boite" div contenant chaque texte 
		foreach($tab_php as $cle=>$value) {
			//$cle= index de l'array c. a. d.  0  1   2 on va s'en servir pour genrer dynamiquement l'id du div
			//$value contient le texte a afficher a chaque fois
			echo '<div id="id_'.$cle.'" class="afficheur" style="display:none;">'.$value.'</div>';
		}
	}else{// si aucun enr trouve
		echo 'Aucun enregistrement, correspondant au crit&egrave;re, trouv&eacute; dans la base !';
	}	
?>
</div>
</body>
</html>
0
http://www.lycee-queneau.net/afficheur6.php


et...........................................................................................


ca marche super !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Avec du code html, avec des accents, tout !!!

Si j'ai bien compris le code par contre je ne peux mettre une temporistion differente pour chaque entrée dans la bd par contre? (en fonction de si c'est long ou pas à lire)

en tout cas MERCI MERCI MERCI beaucoup de tout le temps que tu m'as consacré!
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
19 oct. 2009 à 17:25
attention pour les accents codes les en html c'est a dire & suivi de eacute; pour é etc...

par contre pour une tempo differente je vais voir
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
19 oct. 2009 à 17:43
Voilà:

par contre il faut que tu rajoutes un champ Tempo dans ta table tu y mets 5000 10000 etc c'est en milisecondes

<?php
////initialisation des variables:
$ecran = 'A'; //valeur a chager selon l'ecran : voir la base de donnée
$tab_php=array();
$tab_tempo=array();
////

//// include:
include("./Include/function.php");
////

/////connexion:
include("./Include/connexion.inc.php");
////

$sql = mysql_query("SELECT * FROM ".$base_page." ") or die ("Pb avec la requette ".mysql_error());
$nbr_enr_trouves=mysql_num_rows($sql);
/////il manquait ces lignes
while($row = mysql_fetch_array($sql, MYSQL_ASSOC)){
	$tab_php[]= $row['Texte']; //on empile dans un array php
	$tab_tempo[]=$row['Tempo']; //on empile dans un array tempo;
}
/////

/*
///TEST sans BDD
$tab_php=array("<p>Bonjour page1</p>","<b>Page2</b>","Page3<br />avec saut de ligne");
$nbr_enr_trouves=sizeof($tab_php);
$tab_tempo=array("5000","10000","20000");
///
*/

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" /><title>
<script type="text/javascript">
function affiche_texte(i){
	//on va seulement passer au script JS le nombre de textes a afficher
	var nbr_div = <?php echo $nbr_enr_trouves; ?>;
	//on va aussi lui passer l'array tempo
	//on va generer l'array JS a partir de celui en php
<?php
		$j=0;
		echo 'var tableau_tempo = new Array(';
		foreach($tab_tempo as $value) {
		if(is_int($value)){
		echo $value;
		}else{
		echo '"'.$value.'"';
		}
		$j++;
		if($j<sizeof($tab_tempo)) echo ',';
		}
		echo ');';
?> 
	
				//partie affichage successif d'un des textes
	// a chaque appel de la fonction a va en afficher un et masquer les autres
	//pour cela on fait une boucle qui les parcours tous et mets seulement celui concerne a display=block et tous les autres a display=none
	for(j=0;j<nbr_div;j++){
		var obj=document.getElementById('id_'+j); //on atteint le div
		if(j==i){
			//si le numero du div est egal a celui que l'on veut afficher 
			if(document.getElementById('id_'+j).style.display=='none'){
				//et si il est masque on l'affiche
				document.getElementById('id_'+j).style.display='block';
			}
		
		}else{
			//pour tous les autres si il sont  affiches on les masque
			if(document.getElementById('id_'+j).style.display=='block'){				
				document.getElementById('id_'+j).style.display='none';
			}
		}
	}

			//  partie gestion de boucle et rebouclage au debut
	var index_tempo=i;		
	i++;
	if (i == nbr_div) i=0; //on a atteint la fin on remet la variable i parametre d'appel de la fonction a 0

			//partie tempo et rappel fonction
	setTimeout(function(){affiche_texte(i);},tableau_tempo[index_tempo]);//tempo en milisecondes
	}
</script>
</head>
<style type="text/css">
	div .afficheur{
		/* ci dessous tu va pouvoir mettre en forme tes blocks d'affichage avec du CSS c'est tres pratique et puissant */
		width: 200px;
		height: auto;
		background-color: #fff999;
		font-family: Arial sans sherif;
		font-size: 0.9em;
		color: #666666;
		text-align: center;
	}
</style>
<body onLoad="javascript:affiche_texte('0');">

<div id="zone_affichage">
<?php
	if($nbr_enr_trouves>0){ //si enr trouves dans la BDD
		//a chaque passage de la boucle on va generer une "boite" div contenant chaque texte 
		foreach($tab_php as $cle=>$value) {
			//$cle= index de l'array c. a. d.  0  1   2 on va s'en servir pour genrer dynamiquement l'id du div
			//$value contient le texte a afficher a chaque fois
			echo '<div id="id_'.$cle.'" class="afficheur" style="display:none;">'.$value.'</div>';
		}
	}else{// si aucun enr trouve
		echo 'Aucun enregistrement, correspondant au crit&egrave;re, trouv&eacute; dans la base !';
	}	
?>
</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
20 oct. 2009 à 10:21
Petite amélioration, au lieu de rentrer dans ta base les valeurs de tempo en milisecondes, avec cette modif tu pourra les mettre en secondes ce qui est plus parlant

<?php
////initialisation des variables:
$ecran = 'A'; //valeur a chager selon l'ecran : voir la base de donnée
$tab_php=array();
$tab_tempo=array();
////

//// include:
include("./Include/function.php");
////

/////connexion:
include("./Include/connexion.inc.php");
////

$sql = mysql_query("SELECT * FROM ".$base_page." ") or die ("Pb avec la requette ".mysql_error());
$nbr_enr_trouves=mysql_num_rows($sql);
/////il manquait ces lignes
while($row = mysql_fetch_array($sql, MYSQL_ASSOC)){
	$tab_php[]= $row['Texte']; //on empile dans un array php
	$tab_tempo[]=$row['Tempo']; //on empile dans un array tempo;
}
/////


///TEST sans BDD
$tab_php=array("<p>Bonjour page1</p>","<b>Page2</b>","Page3<br />avec saut de ligne");
$nbr_enr_trouves=sizeof($tab_php);
$tab_tempo=array("8","3","20");
///


?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" /><title>
<script type="text/javascript">
function affiche_texte(i){
	//on va seulement passer au script JS le nombre de textes a afficher
	var nbr_div = <?php echo $nbr_enr_trouves; ?>;
	//on va aussi lui passer l'array tempo
	//on va generer l'array JS a partir de celui en php
<?php
		$j=0;
		echo 'var tableau_tempo = new Array(';
		foreach($tab_tempo as $value) {
		if(is_int($value)){
		echo $value;
		}else{
		echo '"'.$value.'"';
		}
		$j++;
		if($j<sizeof($tab_tempo)) echo ',';
		}
		echo ');';
?> 
	
				//partie affichage successif d'un des textes
	// a chaque appel de la fonction a va en afficher un et masquer les autres
	//pour cela on fait une boucle qui les parcours tous et mets seulement celui concerne a display=block et tous les autres a display=none
	for(j=0;j<nbr_div;j++){
		var obj=document.getElementById('id_'+j); //on atteint le div
		if(j==i){
			//si le numero du div est egal a celui que l'on veut afficher 
			if(document.getElementById('id_'+j).style.display=='none'){
				//et si il est masque on l'affiche
				document.getElementById('id_'+j).style.display='block';
			}
		
		}else{
			//pour tous les autres si il sont  affiches on les masque
			if(document.getElementById('id_'+j).style.display=='block'){				
				document.getElementById('id_'+j).style.display='none';
			}
		}
	}

			//  partie gestion de boucle et rebouclage au debut
			var tempo=1000*tableau_tempo[i]; //ca permet de mettre la tempo en secondes dans la base
	i++; //incrementation pour passer au div suivant
	if (i == nbr_div) i=0; //on a atteint la fin on remet la variable i parametre d'appel de la fonction a 0

			//partie tempo et rappel fonction
	setTimeout(function(){affiche_texte(i);},tempo);//tempo en milisecondes
	}
</script>
</head>
<style type="text/css">
	div .afficheur{
		/* ci dessous tu va pouvoir mettre en forme tes blocks d'affichage avec du CSS c'est tres pratique et puissant */
		width: 200px;
		height: auto;
		background-color: #fff999;
		font-family: Arial sans sherif;
		font-size: 0.9em;
		color: #666666;
		text-align: center;
	}
</style>
<body onLoad="javascript:affiche_texte('0');">

<div id="zone_affichage">
<?php
	if($nbr_enr_trouves>0){ //si enr trouves dans la BDD
		//a chaque passage de la boucle on va generer une "boite" div contenant chaque texte 
		foreach($tab_php as $cle=>$value) {
			//$cle= index de l'array c. a. d.  0  1   2 on va s'en servir pour genrer dynamiquement l'id du div
			//$value contient le texte a afficher a chaque fois
			echo '<div id="id_'.$cle.'" class="afficheur" style="display:none;">'.$value.'</div>';
		}
	}else{// si aucun enr trouve
		echo 'Aucun enregistrement, correspondant au crit&egrave;re, trouv&eacute; dans la base !';
	}	
?>
</div>
</body>
</html>
0
Coucou Alain!

Pourrais je avoir ton mail pour que tu m'envoies ton adresse pour que je puise t'envoyer un petit truc pour te remercier??

Merci encore!

à bientot!

Antonin
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
6 nov. 2009 à 18:38
Ca marche le dernier script que je t'ai donné ?

Mais je te remercie, ma première récompense est la satisfaction de ceux que j'ai pu aider, je ne veux donc rien.

Cordialement

@lain
0