Changmnt de la val. d'un tag hidden par un autre fichier php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Changmnt de la val. d'un tag hidden par un autre fichier php

Re: Changmnt de la val. d'un tag hidden par un autre fichier

par sirakawa » 11 févr. 2012, 10:43

Comme quoi, il suffirait parfois de consulter la console d'erreurs javascript du navigateur.

Re: Changmnt de la val. d'un tag hidden par un autre fichier

par fleduc » 09 févr. 2012, 21:31

Ne cherchez plus, la solution a été trouvée sur un autre forum.

Ma proposition originale était adéquate. Le problème principal de celle-ci était cette erreur simple "<script type="text/javascript">".
Après, il n'y avait que du fine tuning à faire...

Voici:

Code : Tout sélectionner

<?php ?> <html> <head> <title>Untitled</title> </head> <body> <input type="hidden" id="test_val" value="0" /> <input type="button" id="btn" name="btn" value="start" onclick="check_state(document.getElementById('test_val'), display)" /> <input type="button" id="btn1" name="btn1" value="change" onclick='change_state()' /> <script type="text/javascript"> //________________________________________________________ // Verify the state of a hidden tag and send the next // procedure when true, else, wait some time //________________________________________________________ function check_state(variable, other_func){ if (variable.value == 1){ other_func(); } else { setTimeout(function() {check_state(variable, other_func);}, 500); } } //________________________________________________________ // Change the state of the hidden tag //________________________________________________________ function change_state(){ document.getElementById('test_val').value = 1 ; } //________________________________________________________ // Display when the state of the hidden tag has changed //________________________________________________________ function display(){ alert('change made'); } </script> </body> </html>
Cette solution fonctionne parfaitement, et me permet d'obtenir suffisamment de temps pour permettre au relaod de terminer avant d'évaluer les tag hidden.

Tout de même Merci pour l'aide.

Re: Changmnt de la val. d'un tag hidden par un autre fichier

par sirakawa » 09 févr. 2012, 15:57

/**$cacher est une variable indiquant si on  doit cacher ou non
* soit elle a été précisée quelque part et elle garde cette valeur,
* soit elle n'a jamais été précisée et elle prend la valeur true
*/
$cacher = isset($_POST['cacher']) ? $_POST['cacher'] ? 1;
/* $cachage est une variable qui se substitue à l'attribut type=''*/
$cachage = ($cacher == 1) ? "type = 'hidden'": "type ='text'";
plus loin:
print "<input $cachage ..... />
<!-- ca veut dire que chaque fois que tu passes par là tu rends  les choses visibles -->
         <input type = 'hidden'  name ='cacher' value ='0' />
...

Re: Changmnt de la val. d'un tag hidden par un autre fichier

par fleduc » 08 févr. 2012, 21:54

J'ai un peu de misère à suivre ton approche, pourrais-tu s'il te plait, y mettre un peu plus de détail.

Re: Changmnt de la val. d'un tag hidden par un autre fichier

par sirakawa » 08 févr. 2012, 19:55

Il y a moyen de faire plus simple:
<?PHP
// $cacher est une variable indiquant si on  doit cacher ou non
$cachage = ($cacher == true) ? "type = 'hidden'": "type ='text'";
plus loin:
print "<input $cachage ..... />

Re: Changmnt de la val. d'un tag hidden par un autre fichier

par fleduc » 08 févr. 2012, 16:40

Désolé, c'est un petit typo introduit quand j'ai fais de l'épuration dans le code avant de le poster.
Même une fois corrigé, j'ai le même code d'erreur, "object expected" pour le deuxième <input>...
Je ne comprend plus rien, cette page de test en est une comme j'en ai fais des quantités, mais il y a des moments où on ne voit plus rien :(

J'ai vérifié avec le validateur et il n'a rien trouvé de spécial.

Pour ce qui est de la couleur, merci pour l'info.

Re: Changmnt de la val. d'un tag hidden par un autre fichier

par Calimero » 08 févr. 2012, 11:25

En passant, la couleur, c'est mieux ? :-)
Pour moi oui mais saches que tu as des boutons (au dessus du wysiwyg de ce forum) qui te feront ça encore mieux :)

Dans le dernier code que tu as posté, tu appelle check_stat au lieu de check_state (dans le onclick du bouton), est-ce normal ?

Re: Changmnt de la val. d'un tag hidden par un autre fichier

par fleduc » 08 févr. 2012, 08:05

J'ai trouvé la réponse, enfin, je crois.

Dans la fonction login_clicked(),la commande [buffer.location.replace("check_login.php...] renvoi dans le buffer cette réponse:

print <<<eot
<script language="JavaScript">
parent.document.getElementById('btn_submit').value = 'buz'; //***Juste pour un test
parent.document.getElementById('may_sub').value = '0';
</script>
eot;

Le problème, c'est que l'évaluation du tag [may_sub] est faite trop rapidement, avant même que [buffer.location.replace] ait terminé.
J'ai expérimenté en mettant un autre bouton sur la page qui affichait [alert()] la valeur de [may_sub] après le reload, et elle était bien changée.

Le hic, c'est que javascript exécute les commandes de [function login_clicked()] à la file, sans attendre la terminaison des commandes précédentes, c'est pourquoi ça échoue... :-(

J'ai peux-être trouvé une façon de contourner le problème, (sans ajax) mais encore là, je suis coincé (merde). On pourrait ajouter une fonction qui attendrait un flag avant de poursuivre avec les autres procédures comme suit:


<?php
?>

<html>
<head>
<title>Untitled</title>
</head>
<body>
<input type="hidden" id="test_val" value="0" />
<input type="button" id="btn" name="btn" value="start" onclick="javascript:check_stat(document.getElementById('test_val').value, display())" />
<input type="button" id="btn1" name="btn1" value="change" onclick='change_state()' />

<script type="javascript">
//________________________________________________________
// Verify the state of a hidden tag and send the next
// procedure when true, else, wait some time
//________________________________________________________
function check_state(variable, other_func){
if (variable){
other_func();
} else {
setTimeout('check_state()', 500);
}
}

//________________________________________________________
// Change the state of the hidden tag
//________________________________________________________
function change_state(){
document.getElementById('test_val').value = 1 ;
}

//________________________________________________________
// Display when the state of the hidden tag has changed
//________________________________________________________
function display(){
alert('change made');
}
</script>

</body>
</html>


Le problème, c'est que je coince sur un "object expected" depuis au moins 3 heures sur le deuxième <input>, je ne peux donc pas vérifier si ma nouvelle solution fonctionne. Je suis certain que c'est con comme erreur, mais je n'en peux plus... :oops:

Un coup de main serait bien apprécié... :priere:

En passant, la couleur, c'est mieux ? :-)

Re: Changmnt de la val. d'un tag hidden par un autre fichier

par Calimero » 07 févr. 2012, 03:11

Bonjour,

Déjà tu peux dans le futur utiliser la coloration syntaxique du forum qui ne te causera aucune fatigue, fonctionne très bien et pique moins les yeux de tes lecteurs... (ouch le rose :mrgreen: )
La grande question. pourquoi, je peux changer la valeur d'un input de type button, mais pas celle d'un type hidden...???
Il n'y a aucune raison, ils ne sont pas censés être traités différemment par le navigateur (d'ailleurs lequel utilises-tu pour ton test ?). Si tu transformes ton hidden en button, ou en text (en changeant juste l'attribut type donc) tu en auras le coeur net et tu pourras visualiser si oui ou non ça marche avec ce champ (je soupçonne que ton problème vienne d'ailleurs, un conflit d'id ou un truc du genre).

Comme ton problème est peut-être lié à une version de navigateur, tu peux éventuellement nous donner un lien vers la page si tu veux qu'on puisse tester le souci sur d'autres plate-formes ?

Sinon pense à passer tes pages au validateur html, ça peut aider à détecter le souci : http://validator.w3.org (tes tags input ne sont pas fermés, à moins que tu utilises un vieux doctype cela est invalide, autant tout vérifier).

Changmnt de la val. d'un tag hidden par un autre fichier php

par fleduc » 06 févr. 2012, 22:51

Bonjour.
Dans un fichier index.php, j'ai ces déclarations:

// Sert de variable persistante
<input type="hidden" id="may_sub" name="may_sub" value="0" >
// Sert de tampon pour agir sur les éléments de la fenêtre principale sans utiliser AJAX.
<iframe id="buffer" name="buffer" width="0" height="0" frameborder="0"></iframe>
// Sert à vérifier le login et le cas échéant, se logger
<input type="button" id="btn_submit" name="btn_submit" class="button" value="Login" onclick="login_clicked()">

//Dans la procédure login_clicked(), j'appelle un fichier externe qui fait la vérification des info dans la bd.
//________________________________________________________
// Validation des champs de login sans ajax
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

function login_clicked()
buffer.location.replace("check_login.php?email=" + document.getElementById("email").value +
"&pwd="+ document.getElementById("pwd").value);

stat = document.getElementById("may_sub").value ;

if (stat != 1){
alert("Invalid e-mail or password!");
}

//Dans le cas qui m'intéresse, l'info retourné sur le buffer est ainsi:
else {
print <<<eot
<script language="JavaScript">
parent.document.getElementById('btn_submit').value = 'buz'; //***Juste pour un test
parent.document.getElementById('may_sub').value = '0';
</script>
eot;


//Puisque ces info sont envoyées dans le iframe du fichier index, elles sont automatiquement interprétées, sans rafraîchir la page. Le problème que j'expérimente, est que le tag hidden may_sub n'est jamais mis à jour. J'ai essayer de modifier une autre élément de la page (voir ***) et ça fonctionne.

La grande question. pourquoi, je peux changer la valeur d'un input de type button, mais pas celle d'un type hidden...???