Souci en php demande de fonction
Alain_42 Messages postés 5413 Statut Membre -
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
Configuration: Windows XP Firefox 3.0.1
- Souci en php demande de fonction
- Fonction si ou - Guide
- Expert php - Télécharger - Langages
- Fonction trier excel - Guide
- Fonction excel en anglais - Guide
- Fonction remplacer word - Guide
74 réponses
- 1
- 2
- 3
- 4
Le problème porte sur l'affichage d'une seule entrée à la fois parmi les résultats d'une requête MySQL en PHP, au lieu d'afficher toutes les entrées en boucle avec un délai entre chaque passage. Des solutions consistent à charger les entrées dans un tableau côté serveur, puis à les afficher une par une côté client via JavaScript, en parcourant le tableau avec une minuterie et des appels répétés. Certaines propositions préconisent aussi de regrouper les résultats dans des blocs HTML avec des identifiants et de masquer/afficher via CSS et JavaScript pour éviter les rechargements. En complément, il faut prévoir l’encodage des valeurs côté PHP et les échapper correctement avant de les injecter en JavaScript afin d’éviter les erreurs d’affichage et les failles de sécurité.
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
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...
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.
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.
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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJ'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 !!
//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...?
<?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>
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>
http://www.lycee-queneau.net/afficheur3.php
Mais il y'a un défilement maintenant !
Merci de ton aide !
<?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>
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();
<?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 :-/
<?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>
- 1
- 2
- 3
- 4