Version complète: sur le forum Webmaster Hub : Bouton reset formulaire
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Gribouille26
Bonjour, smile.gif

Je voudrais faire un bouton pour remettre à zero les differents champs d'un formulaire.
CODE
<input type="reset" value="Remise à zero">

J'ai utilisé ça, mais ça ne marche pas. huh.gif

Ca peut être dut au fait que les champs sont remplis par des variables et pas par le visiteur?
Titag
Je crois oui... en fait ca ne vide pas forcément les champs mais les remet dans leur état initial, remplis dans ton cas wink.gif
Gribouille26
Alors, si je commence à comprendre un peu le php, il faut que je déclanche une fonction lorsque je clique sur ce bouton qui fasse que toute mes variables prennent un valeur "", puiqu'elles ne sont pas vident par défaut.
C'est bien ça?
Titag
Oui mais ca implique de recharger la page smile.gif

Le php s'exécute sur le serveur ne l'oublions pas wink.gif
Titag
Pour bien faire la différence entre PHP et HTML/javascript je suis tombé sur un site sympa : Le site du Zéro... ne le prend pas mal smile.gif mais ca éclaire bien les néophytes à mon avis.
Gribouille26
Tiens, c'est drôle! J'ai passé la soirée à lire ses tutoriaux!!! laugh.gif

J'ai essayé d'ecrire cette fonction de remise à zero.
J'ai placé ça sur le bouton:
CODE
<input type="reset" value="Remise à zero" onclick=vide()>

Et cette fonction au début de mon code php:
CODE
function vide($euros,$francs,$marks)
{
$euros="";
$francs="";
$marks="";
}


Ca ne marche pas!
Voyez vous des erreurs? huh.gif
Tizel
Je te conseillerais plutôt de faire ça en Javascript. Voci quelques éléments qui pourront te servir...

CODE
<form name="formulaire">
<input name="champ">
</input>
</form>

document.formulaire.champ.value='';


Tizel
xpatval
Tu peux aussi essayer en php, avec recharchement de la page.

CODE
<?php
if ($reset== true)
{    
    $champ = "";
    
}
?>



<form name="formulaire" action="<?php echo $PHP_SELF;?>" method="post">
<input name="champ">
<input type="submit" value="Validation">
<input type="submit" name="reset"  value="reset">
</form>


A arranger selon tes désidératas.

xpatval
Gribouille26
Je préfererai tout mettre en php.
J'ai essayé:
CODE
if ($reset== true)
{
$euros="";
$francs="";
$marks="";
}

avec:
CODE
<input type="submit" value="Remise à zero" name="reset"></p>

Ca marche mais ça écrit -o! :o

[édit] c'est bon, il fallait mettre un espace entre le guillemets!
MERCI!!! :up: [/edit]
Gribouille26
En fait, ça ne marche plus pour mon autre bouton submit.
CODE
<input type="submit" value="convertir" name="convert">


Il faudrait que je fasse:
CODE
if ($convert== true)
{...}

Mais dans ce nouveau if, je devrai y placer plusieurs autres if que je fait déjà!
Comment écrire ça?
Si je place juste mes anciens if dans {...}, ça ne marche pas!

Concrètement, j'ai ça:

CODE
<?
if ($reset== true)
{
$euros=" ";
$francs=" ";
$marks=" ";
}
if ($convert== true)
{
if(empty($francs) and empty($marks) and isset($euros))
{
$francs= round(100*$euros*6.559-0.01)/100;
$marks= round(100*$euros*1.955-0.01)/100;
}
if(empty($euros) and empty($marks) and isset($francs))
{
$euros= round(100*$francs/6.559-0.01)/100;
$marks= round(100*$francs/3.3538-0.01)/100;
}
if(empty($euros) and empty($francs) and isset($marks))
{
$euros= round(100*$marks*0.5112-0.01)/100;
$francs= round(100*$marks*3.3538-0.01)/100;
}
}
?>
...
<form method="post" action="convert.php">
<p><input type="text" size="10" name="euros" value="<? echo "$euros";?>"> Euros<br></p>
<p><input type="text" size="10" name="francs" value="<? echo "$francs";?>">  Francs<br></p>
<p><input type="text" size="10" name="marks" value="<? echo "$marks";?>">  Marks<br></p>
<p><input type="submit" value="convertir" name="convert">
<input type="submit" value="Remise à zero" name="reset"></p>
</form>


Voyez-vous une erreur expliquant l'interference entre les deux boutons? unsure.gif
(le "convert" ne marche plus depuis que l'autre est devenu type="submit" aussi...)
xpatval
Gromo dosso, cela pourrait donner qlque chose comme ça:

CODE
if ($reset== true)
{
$euros="";
$francs="";
$marks="";
$convert = 0;
}

switch ($convert)
{
  case 0:
  $convert = 1;
  ?>
  <form method="post"action="<?php echo $PHP_SELF;?>" method="post">
  <p><input type="text" size="10" name="euros" value="<? echo "$euros";?">    Euros<br></p>
  <p><input type="text" size="10" name="francs" value="<? echo "$francs";?>">  Francs<br></p>
  <p><input type="text" size="10" name="marks" value="<? echo "$marks";?>">  Marks<br></p>
  <p><input type="submit" value="convertir" name="convert">
  <input type="submit" value="Remise à zero" name="reset"></p>
  </form>
<?php
  break;

  case 1:
    // tu mets tes conditions
  break;
}


xpatval
Gribouille26
Oh! Jamais utliser encore celui-là (switch!) blink.gif

Je comprend pas à quoi servent les case1 et 0? huh.gif
$convert ne peut pas valoir 1...
xpatval
Lorsque $convert vaut 0, tu passes dans le formulaire afin de saisir. Dans ce formulaire, tu valorises $convert à 1.
Lorsque tu soumets, la page se recharge avec, entre autre, la valeur de $convert (1)
Et comme $convert vaut 1, tu ne repasses plus dans le formulaire, mais dans les tests de condition.
Tu peux ainsi continuer comme cel, si tu as d'autres choses à faire.
Dans le case 1: , hormis tes tests, tu valorises $convert à 2, avec un bouton de validation.
Tu recharges ta page, $convert valant deux, tu passeras dans le case2: etc...

xpatval
Gribouille26
CITATION(xpatval @ 20 Oct 2004, 14:29)
Lorsque $convert vaut 0....
*

Déjà, je ne vois pas quand $convert peut bien valoir 0 ou même 1? blink.gif
xpatval
CITATION
Déjà, je ne vois pas quand $convert peut bien valoir 0 ou même 1?


$convert est une variable de positionnement dans ton script.
C'est TOI qui détermine sa valeur, de manière à franchir les différentes étapes que tu souhaites.
C'est toi qui initialise $convert à vide, ou = 0.
C'est TOI qui lui attribue la valeur 1 lorsque tu passes dans la condition où $convert vaut dans un premier temps 0.
C'est Toi qui lui attribue la valeur 2 lorsque tu passes dans la condition où $convert vaut 1 .
Etc...

xpatval
Gribouille26
D'accord, je comprend! (un peu)
Mais ça me paraît bien complexe pour ce que je veux faire...

J'ai essaye comme ça aussi:
<?
CODE
if ($bouton==zero)
{
$euros=" ";
$francs=" ";
$marks=" ";
}

if ($bouton==convertir)
{
if(empty($francs) and empty($marks) and isset($euros))
{
$francs= round(100*$euros*6.55957-0.01)/100;
$marks= round(100*$euros*1.95583-0.01)/100;
}
if(empty($euros) and empty($marks) and isset($francs))
{
$euros= round(100*$francs/6.55957-0.01)/100;
$marks= round(100*$francs/3.353855-0.01)/100;
}
if(empty($euros) and empty($francs) and isset($marks))
{
$euros= round(100*$marks*0.511292-0.01)/100;
$francs= round(100*$marks*3.353855-0.01)/100;
}
}
?>
<form method="post" action="convert.php">
<p><input type="text" size="10" name="euros" value="<? echo "$euros";?>"> Euros<br></p>
<p><input type="text" size="10" name="francs" value="<? echo "$francs";?>">  Francs<br></p>
<p><input type="text" size="10" name="marks" value="<? echo "$marks";?>">  Marks<br></p>
<p><input type="submit" value="convertir" name="bouton">
<input type="submit" value="zero" name="bouton"></p>
</form>


Ca me paraît logique, mais ça marche pas non plus... sad.gif
Titag
Tu es sur de la valeur de $bouton ? Tu devrais l'afficher quelque part pour voir quelle valeur ca te sort...

Et met des guillemets ou des cotes $bouton == "convertir"
Gribouille26
J'avais essayé en premier avec les guillements, mais ça change rien...
J'ai vérifier, elle me sort : convertir et zero... rolleyes.gif
Titag
C'est en ligne quelque part ?
Gribouille26
ici pour voir...
Titag
Oui en fait c'est la conversion qui ne marche pas...

Essaye en changeant les conditions :

empty($francs) && empty($marks) && isset($euros)

je ne sais pas où tu as vu "and" mais je ne suis pas sur que ca marche ainsi... && marche c'est sur.
Gribouille26
Avant de mettre le bouton pour effacer, j'utilisait AND, et ça marchait très bien!!!
J'ai essayé avec &&: pas de différence... sad.gif

Les conversions marchaient très bien avant, c'est ce bouton qui à mit le bazar et qui a fait que le bouton conversion ne marche plus. Si je l'enleve, ça marche...
Titag
Je t'ai envoyé un mp...

Mais huh.gif ca marche q_smallexcla.gif
Titag
Ah ben ca a marché une fois smile.gif
Gribouille26
Mon fichier est là:http://www.webmaster-hub.com/index.php?sho...indpost&p=50772

Ca marche pas chez moi... wacko.gif
Titag
Chez moi ce code marche :

CODE
<?
if ($bouton== "zero") {
 $euros="";
 $francs="";
 $marks="";
}

if ($bouton=="convertir") {
  if(empty($francs) and empty($marks) and isset($euros)) {
      $francs = round(100*$euros*6.55957-0.01)/100;
      $marks = round(100*$euros*1.95583-0.01)/100;
   }
   if(empty($euros) and empty($marks) and isset($francs)) {
      $euros = round(100*$francs/6.55957-0.01)/100;
      $marks = round(100*$francs/3.353855-0.01)/100;
   }
   if(empty($euros) and empty($francs) and isset($marks)) {
      $euros = round(100*$marks*0.511292-0.01)/100;
      $francs = round(100*$marks*3.353855-0.01)/100;
   }
}
?>
<form method="post" action="convert.php">
<p><input type="text" size="10" name="euros" value="<? echo $euros;?>"> Euros<br></p>
<p><input type="text" size="10" name="francs" value="<? echo $francs;?>">  Francs<br></p>
<p><input type="text" size="10" name="marks" value="<? echo $marks;?>">  Marks<br></p>
<p><input type="submit" value="convertir" name="bouton">
<input type="submit" value="zero" name="bouton"></p>
</form>
Titag
Et tu sais pourquoi ?
Parce que tu fait un test en utilisant la fonction empty().

Or sur la remise à zero tu initialise tes variables avec un espace (" ") et non un caractere nul ("")... d'où erreur
Gribouille26
Attends, j'étais en train d'halluciner, vraiment!!! blink.gif wacko.gif

CITATION(Titag @ 20 Oct 2004, 16:26)
Et tu sais pourquoi ?
Parce que tu fait un test en utilisant la fonction empty().
*

Tu veux dire quoi par là? Je veux absolument comprendre, là....
xpatval
Après avoir vu ta page, je réaffirme ce que je disais.

Il te faut plusieurs cas.

cas 0: rien n'ai saisi. donc on saisit.
cas 1: la zone A est saisie, on convertit B et C OU on reset
cas 1: la zone B est saisie, on convertit A et C OU on reset
cas 1: La zone C est saisie, on convertit A et B OU on reset.

Tu dois démarrer l'écriture de ton script en vérifiant si le reset a été activé.
Si c'est le cas, "marqueur" = 0
Si ce n'est pas le cas:
On initialise un "marqueur" si celui-ci n'a pas déjà été valorisé.

switch

Cas 0:

formulaire de saisie. PLUS valorisation du marqueur à 1.
on soumet (en plaçant un <input type="hidden" name="marqueur" value=1>, que j'ai oublié de préciser lors de mon premier post)

Cas 1: Test de la zone saisie, conversion et affichage des zones converties.
avec affichage d'un bouton reset.
Dans ce formulaire, si tu cliques sur le bouton reset, le "marqueur" sera valorisé à 0.
Comme tu réaffiche ta page, tu passes dans le test de condition du reset en tt début de script, et tu repars avec un marqueur = 0, donc, un cas 0.
tu peux ressaisir...
Gribouille26
D'accord, je comprend mieux ce que tu veux dire Xpatval...
On fait la même chose, mais de deux façons différentes, en gros! laugh.gif

Ta solution à l'air plus "conventionnelle", mais comme elle n'est pas encore aussi claire que celle que j'ai utilisée, je crois que je vais garder la mienne pour le moment et me pencher sur le "plus conventionnel" une autre fois... whistling.gif

Merci. p_flower01.gif
Titag
Par exemple :

if(empty($francs) and empty($marks) and isset($euros))

empty "dit" si la variable est vide ou non... or une variable qui contient un espace comme tu l'initialise dans le if ($bouton == "zero") n'est pas vide.

C'est pour ca qu'il fait la conversion qu'une seule fois... au 1er chargement de la page.
Gribouille26
D'accord!!
Merci! p_flower01.gif :up:

Euh...
Si j'ose une question subsidiaire: Je lisais pendant mes recherches qu'il faut mettre ses variables en $_POST['variable'] . C'est plus sécurisé...
Je comprend pas ce qu'il faut faire concrètement.... huh.gif
xpatval
CITATION
Je comprend pas ce qu'il faut faire concrètement....


Tout simplement, depuis une certaine version de php, le paramètre de configuration REGISTER_GLOBALS, qui était à ON, par défaut, a été passé à OFF, par défaut aussi.

Autrefois, et quelque soit la méthode utilisée (post, get, cookie...), tu n'avais pas besoin d'initialiser tes variables. Ce qui avait, entre autre, pour conséquence un risque certain lors de passages de paramètres dans une url (http://www.monsite.com?var1=...&var2=...). N'importe qui pouvait rentrer dans l'url n'importe quel paramètre...

Dorénavant, tu dois initialiser les variables que tu vas utiliser. Si quelqu'un souhaite saisir n'importe quoi dans ton url, le paramètre (sa variable) n'existant pas, le risque est amoindri.

Il te faut faire, pour chaque variable:
CODE
$tavariable = ( isset ( $_POST['tavariable'] ) ) ? $_POST['tavariable'] : '';

ou

$tavariable = ( isset ( $_GET['tavariable'] ) ) ? $_GET['tavariable'] : '';
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.