Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/03/2011, 11h49   #1
Invité de passage
 
Inscription : mars 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 6
Points : 0
Points : 0
Par défaut Probleme input hidden et getElementById().value

Bonjour à tous,

J'ai un ptit probleme qui me rend complément ouf

explication : je veux récuperer la position du scroll de l'utilisateur, la mettre dans un champs input hidden d'un formulaire pour récupérer la variable post dans mon fichier de gestion de formulaires et pouvoir ainsi renvoyer l'utilisateur à la position où il se trouvait avant de soumettre le formulaire.

Voilà comment je my prends (le code est simplifié) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*fichier contenant le form*/
<script type="text/javascript">
	function meuh(qdqdqsdq)
	{
		alert(document.getElementById('positionScroll').value);//=>affiche 333(valeur par defaut)
		var posScroll = document.documentElement.scrollTop;
		document.getElementById('positionScroll').value=posScroll;
		alert(document.getElementById('positionScroll').value);//=>affiche la position du scroll courante (en gros ca marche bien)
		qdqdqsdq.form.submit();
	}
</script>
 
<form method="post" action="index.php?...blablabla" name="formCoordonneesModifier">
 
	<p>
		<input type="hidden" name="positionScroll" id="positionScroll" value="333" />
	</p>
	<div class="formBoutonModifier">
		<input class="bouton" type="button" onclick="meuh(this);return false;" value="Modifier" />
	</div>
</form>


Code :
1
2
3
4
5
6
7
8
9
10
/*fichier de recuperation des variables POST*/
<?php
	//position du scroll
	if(!empty($_POST['positionScroll'])){$positionScroll=htmlspecialchars($_POST['positionScroll']);}else{$positionScroll=0;}
 
	echo $positionScroll;//=> affiche 333 (la valeur par defaut dans le input hidden...)
 
	//placement de la fenetre en fonction du scroll précédent de l'utilisateur(ca marche c'est bon)
	?><script type="text/javascript">$(document).ready(function (){window.scrollTo(0,<?php echo $positionScroll;?>);});</script><?php
?>
Bref on dirait que le formulaire est soumis avant que la modif du input hidden soit effective, meme avec un return:false sur le onclick...

Merci d'avance pour votre aide
riserinard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 12h16   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Il faut enlever les inputs de type submit de ton formulaire et mettre un boutton type button avec en onclick ton traitement sur l'input hidden et ensuite la soumission du formulaire.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 12h57   #3
Invité de passage
 
Inscription : mars 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 6
Points : 0
Points : 0
Citation:
Envoyé par Benjamin Delespierre Voir le message
Il faut enlever les inputs de type submit de ton formulaire et mettre un boutton type button avec en onclick ton traitement sur l'input hidden et ensuite la soumission du formulaire.
Merci pour cette réponse très rapide mais il semble que c'est déjà ce que j'ai fais nan ?
riserinard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 13h55   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Je viens de faire tourner ton bout de code et la valeur de positionScroll à bien été changée à 0.
Code :
1
2
3
4
5
 
Paramètresapplication/x-www-form-urlencoded
positionScroll	0
Source
Content-Type: application/x-www-form-urlencoded Content-Length: 16 positionScroll=0
Je te recommande l'usage de Web Developper Toolbar et de FireBug pour Firefox afin d'identifier les comportements de tes pages.

Par ailleurs
Citation:
explication : je veux récuperer la position du scroll de l'utilisateur, la mettre dans un champs input hidden d'un formulaire pour récupérer la variable post dans mon fichier de gestion de formulaires et pouvoir ainsi renvoyer l'utilisateur à la position où il se trouvait avant de soumettre le formulaire.
Pourquoi ne pas utiliser les ancres ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h19   #5
Invité de passage
 
Inscription : mars 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 6
Points : 0
Points : 0
Citation:
Envoyé par Benjamin Delespierre Voir le message
Je viens de faire tourner ton bout de code et la valeur de positionScroll à bien été changée à 0.
Oui ca marche sans soucis, le probleme est que cette modif n'est pas retenue lors de l'envoi du formulaire.

Citation:
Envoyé par Benjamin Delespierre Voir le message
Pourquoi ne pas utiliser les ancres ?
J'y ai pensé mais je veux que le scroll revienne au pixel près lors du rechargement de la page.

J'espere avoir été plus clair, et merci pour les réponses
riserinard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h23   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
C'est ta vérification qui est en cause:
Code :
1
2
 
if(!empty($_POST['positionScroll']))
Alors que dans l'exemple que j'ai fait tourner, $_POST['positionScroll'] vaut 0 et est donc considéré comme vide.
Il faut utiliser la clause isset à la place:
Code :
1
2
 
if (isset($_POST['positionScroll']) && $_POST['positionScroll'] !== "")
-- Edit

Au passage puisque tu veux un repositionnement au pixel près et quite à utiliser JavaScript, pourquoi ne pas soumettre le formulaire via Ajax ? Ainsi l'utilisateur ne change pas de page et son scroll reste inchangé.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h45   #7
Invité de passage
 
Inscription : mars 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 6
Points : 0
Points : 0
Citation:
Envoyé par Benjamin Delespierre Voir le message
C'est ta vérification qui est en cause:
Code :
1
2
 
if(!empty($_POST['positionScroll']))
Alors que dans l'exemple que j'ai fait tourner, $_POST['positionScroll'] vaut 0 et est donc considéré comme vide.
Il faut utiliser la clause isset à la place:
Code :
1
2
 
if (isset($_POST['positionScroll']) && $_POST['positionScroll'] !== "")
j'ai fais un echo $_POST['positionScroll']; pour verifier, il m'affiche 333 quelle que soit la position verticale de la page quand je clique sur mon bouton. Je ne l'ai pas mentionné, mais mon formulaire s'ouvre dans une fenetre interne de type lightbox quand je clique sur un bouton (par ex "modifier")

Citation:
Envoyé par Benjamin Delespierre Voir le message
Au passage puisque tu veux un repositionnement au pixel près et quite à utiliser JavaScript, pourquoi ne pas soumettre le formulaire via Ajax ? Ainsi l'utilisateur ne change pas de page et son scroll reste inchangé.
Je ne doute pas que ce soit la meilleure solution, mais mon appli est deja codée (~5000 lignes) et en plus j'y connais rien (ou presque) en AJAX , ce que je veux ajouter ici est une fonctionnalité purement pratique pour l'utilisateur, il n'a pas besoin de rescroller pour revenir où il était.

Bref je suis cuit c'est ca ? Merci pour la réponse
riserinard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h49   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<?php
 
var_dump($_REQUEST['positionScroll']);
 
?>
<script type="text/javascript">
	function meuh(qdqdqsdq)
	{
		alert(document.getElementById('positionScroll').value);//=>affiche 333(valeur par defaut)
		var posScroll = document.documentElement.scrollTop;
		document.getElementById('positionScroll').value=posScroll;
		alert(document.getElementById('positionScroll').value);//=>affiche la position du scroll courante (en gros ca marche bien)
		qdqdqsdq.form.submit();
	}
</script>
 
<form method="post" name="formCoordonneesModifier">								
	<p>
		<input type="hidden" name="positionScroll" id="positionScroll" value="333" />
	</p>
	<div class="formBoutonModifier">
		<input class="bouton" type="button" onclick="meuh(this);return false;" value="Modifier" />
	</div>
</form>
Ce bout de code prouve que le fonctionnement est correct sur Firefox. Je pense que ton JS ne doit pas fonctionner correctement sur IE. Je n'ai pas assez de compétences en JS pour l'affirmer mais tu devrais regarder de ce coté là.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 14h53   #9
Invité de passage
 
Inscription : mars 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 6
Points : 0
Points : 0
Mais je suis sous firefox

Bref comme me dit un pote, je vais passer cette variable en cookie, tanpis

edit1 : j'ai jamais dit qu'il y avait une erreur dans le code, ce code marche même si c'est pas jolie (de toute facon je modifierai :p). C'est le fonctionnement qui est bizarre, pourquoi se borne t il à envoyer la valeur de base (333) du input:hidden ?

edit2 : probleme résolu en utilisant les cookies, dommage mais pas plus mal bien que ca ne fait que bypasser le probleme de départ, je ne marque donc pas ce sujet comme résolu.

Merci pour ton aide Benjamin
riserinard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 03h48   #10
Membre à l'essai
 
Inscription : août 2009
Messages : 43
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 43
Points : 22
Points : 22
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<?php
 
var_dump($_REQUEST['positionScroll']);
 
?>
<script type="text/javascript">
	function meuh(qdqdqsdq)
	{
		alert(document.getElementById('positionScroll').value);//=>affiche 333(valeur par defaut)
		var posScroll = document.documentElement.scrollTop;
		document.getElementById('positionScroll').value=posScroll;
		alert(document.getElementById('positionScroll').value);//=>affiche la position du scroll courante (en gros ca marche bien)
		qdqdqsdq.form.submit();
	}
</script>
 
<form method="post" name="formCoordonneesModifier">								
	<p>
		<input type="hidden" name="positionScroll" id="positionScroll" value="333" />
	</p>
	<div class="formBoutonModifier">
		<input class="bouton" type="button" onclick="meuh(this);return false;" value="Modifier" />
	</div>
</form>
Je vais peut être dire n'importe quoi, mais ça me semble logique que ta page affiche tout le temps 333 puisque tu met une value à ton hidden. La c'est ton js qui gère la value donc tu devrais en mettre une vide

Code :
<input type="hidden" name="positionScroll" id="positionScroll" value="" />
Clad3815 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 09h25   #11
Invité de passage
 
Inscription : mars 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 6
Points : 0
Points : 0
Citation:
Envoyé par Clad3815 Voir le message
Je vais peut être dire n'importe quoi, mais ça me semble logique que ta page affiche tout le temps 333 puisque tu met une value à ton hidden. La c'est ton js qui gère la value donc tu devrais en mettre une vide
C'est ce que j'avais fait au départ, j'ai mis 333 pour avoir une valeur de test. Dans les 2 cas, le comportement est le même.
riserinard est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h48.


 
 
 
 
Partenaires

Hébergement Web