Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme de rafraichissement

10 réponses
Avatar
J-F Portala
Bonjour, je travaille en php avec javascript.
J'ai une page qui est rafraichie régulierement pour afficher des valeurs
d'une base de données

Cette page possède aussi un formulaire avec un champ à saisir.
Le probleme est que lorsque l'on saisit le champ et qu'un rafraichissement
survient, tout le champ est efffacé.

Est ce que je m'y prends mal ou peut on contourner le probleme
Merci de votre aide

Jeff

10 réponses

Avatar
SAM
J-F Portala a écrit :
Bonjour, je travaille en php avec javascript.
J'ai une page qui est rafraichie régulierement pour afficher des valeurs
d'une base de données



rafraichissement par meta ?

si rafraichissement par JS,
envoyer en variable attachée le contenu de l'input
et au PHP de le remettre

Cette page possède aussi un formulaire avec un champ à saisir.
Le probleme est que lorsque l'on saisit le champ et qu'un rafraichissement
survient, tout le champ est efffacé.



Ce n'est pas normal. si ?

Est ce que je m'y prends mal ou peut on contourner le probleme



avoir une iframe où la page mentholée est affichée ?

cookie ?

--
sm
Avatar
J-F Portala
Merci de ta réponse qui me fait me poser pas mal de questions.

"SAM" a écrit dans le message
de news: 47e2b33b$0$888$
J-F Portala a écrit :
Bonjour, je travaille en php avec javascript.
J'ai une page qui est rafraichie régulierement pour afficher des valeurs
d'une base de données



rafraichissement par meta ?


non par fonction javascript liée à l'événement onload.

si rafraichissement par JS,
envoyer en variable attachée le contenu de l'input



Est ce que cela veut dire que dans la fonction de rafraichissement, je dois
tester le champ de saisie pour vérifier s'il contient quelque chose
et au PHP de le remettre


j'avoue que je ne voie pas le role de PHP ici


Cette page possède aussi un formulaire avec un champ à saisir.
Le probleme est que lorsque l'on saisit le champ et qu'un
rafraichissement survient, tout le champ est efffacé.



Ce n'est pas normal. si ?


si si

Est ce que je m'y prends mal ou peut on contourner le probleme



avoir une iframe où la page mentholée est affichée ?


j'ai entendu dire qu'il fallait éviter les frames (iframe = frame?)

cookie ?


Je ne vois pas comment utiliser un cookie
désolé de mon inculture.

Jeff

--
sm
Avatar
Olivier Miakinen
Le 20/03/2008 21:38, J-F Portala a écrit :

si rafraichissement par JS,
envoyer en variable attachée le contenu de l'input



Est ce que cela veut dire que dans la fonction de rafraichissement, je dois
tester le champ de saisie pour vérifier s'il contient quelque chose



Je ne dirais pas « tester » car cela suppose que tu veuilles faire une
chose différente selon que le contenu est vide ou pas. Il te suffit,
dans la nouvelle requête faite par Javascript, d'envoyer le contenu du
champ quel qu'il soit (donc, qu'il soit vide ou non).

et au PHP de le remettre


j'avoue que je ne voie pas le role de PHP ici



N'est-ce pas avec PHP que tu génères la page ? Si oui, c'est donc bien
à lui d'envoyer une page qui contiendra déjà le contenu qui avait été
saisi par l'utilisateur.
Avatar
SAM
J-F Portala a écrit :

si rafraichissement par JS,
envoyer en variable attachée le contenu de l'input



Est ce que cela veut dire que dans la fonction de rafraichissement, je dois
tester le champ de saisie pour vérifier s'il contient quelque chose



non, on s'en moque
on envoie la donnée vide et elle revient vide, pas plus.

et au PHP de le remettre


j'avoue que je ne voie pas le role de PHP ici



<?php

$chp = truc machin php de récup de la variable de l'url;

# les trucs via base de donnée
# et autre codes php nécessaires
?>

<body onload="setTimeout(function(){
self.location=self.location+'?chp='+
document.monForm.monChp.value+'&+'v='+
Math.random();}
,5000);">

<form name="monForm" action="truc.php">
Pseudo : <input name="monChp" value="<?php echo $chp ?>">
</form>


rafraichissement survient, tout le champ est efffacé.


Ce n'est pas normal. si ?


si si



Non, avec une page normale rafraichie par meta, les contenus des champs
sont gardés (en tous cas avec les brouteurs que je pratique)

Est ce que je m'y prends mal ou peut on contourner le probleme


avoir une iframe où la page mentholée est affichée ?


j'ai entendu dire qu'il fallait éviter les frames (iframe = frame?)



Pour le référencement, et pour la mise en favoris ce n'est pas recommandé.
Tu a besoin que ta page rafraichissante soit connue du monde ?

Et puis d'abord, elle sert à quoi ?
La BdD évolue tout le temps ? à chaque instant ?

cookie ?


Je ne vois pas comment utiliser un cookie



on remplit le champ,
on en sort,
le JS crée ou renseigne un ccokie (qui est gardé sur le DD du visiteur)

à l'ouverture de la page le JS interroge le cookie et va re-remplir le champ

C'est quand même plus propre que ce soit le php qui remplisse le champ.

désolé de mon inculture.



c'est un peu compliqué juste pour une valeur d'un champ
<http://fr.selfhtml.org/javascript/objets/document.htm#cookie>
<http://fr.selfhtml.org/javascript/exemples/visites_pages.htm>


--
sm
Avatar
SAM
SAM a écrit :

<body onload="setTimeout(function(){
self.location=self.location+'?chp='+
document.monForm.monChp.value+'&+'v='+
Math.random();}
,5000);">



correctif :

<body onload="setTimeout(function(){
self.location=self.location+'?chp='+
document.monForm.monChp.value+'&v='+
Math.random();}
,5000);">



&v = Math.random()

ne sert qu'à avoir une url différente à chaque appel
(afin de forcer le rechargement depuis le serveur et non depuis le cache)

--
sm
Avatar
Laurent vilday
SAM a écrit :
<body onload="setTimeout(function(){
self.location=self.location+'?chp='+
document.monForm.monChp.value+'&v='+
Math.random();}
,5000);">



&v = Math.random()

ne sert qu'à avoir une url différente à chaque appel
(afin de forcer le rechargement depuis le serveur et non depuis le cache)



Un chiffre aléatoire pouvant avoir deux fois de suite la même valeur,
j'utiliserais plutôt quelque chose de réellement unique comme le nbr de
millisecondes depuis le 01/01/1970 00:00:00 (new Date().getTime()).
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Date:getTime>

'&v='+(new Date().getTime())

Sinon sans tester, je crois que ça peut "fonctionner" la 1ere fois puis
après c'est tout cassé. Je m'explique :

1) url == foo.php

2) self.location = self.location + '?chp=1'
==> url == foo.php?chp=1

3) self.location = self.location + '?chp=2'
==> url == foo.php?chp=1?chp=2
==> bug

--
laurent
Avatar
SAM
Laurent vilday a écrit :

'&v='+(new Date().getTime())



toutafé c'est bp mieux.

Sinon sans tester, je crois que ça peut "fonctionner" la 1ere fois puis
après c'est tout cassé. Je m'explique :



Merdum ! mais c'est bien vrai !

1) url == foo.php

2) self.location = self.location + '?chp=1'
==> url == foo.php?chp=1

3) self.location = self.location + '?chp=2'
==> url == foo.php?chp=1?chp=2
==> bug



va falloir prévoir une fonction alors
car dans la balise ça finit par faire chargé sinon brouillon

Sauf à mettre en dur l'url kivabien

<body onload="setTimeout(function(){
self.location = 'monFichier.php?chp=' +
document.monForm.monChp.value + '&v=' +
(new Date().getTime()); }
,5000);">

espérons que cette fois ...

--
sm
Avatar
J-F Portala
Merci de vos differentes réponses,
j'ai essayé de mon cote d'empecher le rafrachissement lorsque le champ
est en cours de saisie.

J'ai mis un evenement keyup sur le champ nomchamp qui me lance la fonction
testChamp().
J'utilise la variable globale val.

global val=0 ;
function testChamp()
{
if ( document.form.nomChamp.value.length > 0 )
val = 1;
else
val = 0 ;
}
function refresh1()
{
if ( val == 0 )
self.location=self.location ;
else
refresh() ;
}

function refresh()
{
window.setTimeout("refresh1()",5000) ;
}

Au debut du document.
onload=refresh()

Cela fonctionne. Le rafraichissement s'arret dès que le champ est en cours
de saisie.
Si l'on efface le champ, le rafraichissement recommence.

Cela me parait un peu lourd.
Le champ peut être rempli avec une douchette code barre et là je ne sais pas
si l'evenement keyup est géré.

Comment peut on améliorer ou simplifier ?

emrci de votre aide

Jeff
Avatar
SAM
J-F Portala a écrit :
Merci de vos differentes réponses,
j'ai essayé de mon cote d'empecher le rafrachissement lorsque le champ
est en cours de saisie.

Comment peut on améliorer ou simplifier ?



<input onfocus="val=true"
onblur="if(this.value.length<1)valúlse"
name="monChamp"
blabla >

JS :

var val = false;
function refresh() {
var v = document.monfForm.monChamp.value;
if(!val || v=='' || v.length<1) self.location=self.location;
setTimeout(refresh, 5000); // normalement pas besoin de else
}
onload = function(){setTimeout(refresh, 5000);};


si, du moment que le champ a qque chose ou qu'on vient de cliquer dans
le champ ou qu'il vient d'avoir le focus (par touche tab par exemple),
il n'y a plus à rafraichir

--
sm
Avatar
J-F Portala