PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 23-05-2010 20:27:36

Jean-Laurent Hentz
Membre
Inscription : 23-05-2010
Messages : 2

L'un ou l'autre...

Bonjour,

Nouveau sur ce forum, je remercie par avance les lecteurs de me réorienter si ce type de demande avait déjà été fait.

Dans un formulaire, je souhaite utiliser le php pour avoir deux possibilités d'entrée.

Ma réflexion est la suivante :
" Si ma valeur = un nombre > alors je vois apparaître ce bout de formulaire"
" Autrement > je vois un autre bout de formulaire (par défaut)"

Pour avoir accès, depuis le bout par défaut, à l'autre possibilité, je propose de cliquer sur un bouton, auquel j'associe un bouton caché avec une valeur qui me permet d'afficher le premier bout. Et vice-versa.

Tout ça fonctionne à merveille sauf que ce code est inclus dans un formulaire plus important donc avec un bouton final. Lorsque je clique sur ce dernier, il change ma valeur de bout de code. Lorsque je re-clique, il revient au défaut, et ainsi de suite. Je souhaite pouvoir conserver un valeur sans que le bouton final n'ai une influence...

Voici mon bout de code :


<form action='' method='POST'>
du blabla...

Bout de code qui m'intéresse :
<?php
  if($_POST['pt']=='1'){
    echo "Nouveau : <input type='text' name='nouveau' /> ";
    echo "<input type='submit' name='point' value='Annuler'>";
        echo "<input type='hidden' name='pt' value='0'>";
  }
  else{ //mon bout de code par défaut
    echo "Ancien : <input type='text' name='ancien' /> ";
      echo "<input type='submit' name='point' value='Nouveau'>";
        echo "<input type='hidden' name='pt' value='1'>";
  }
 
?>

<input type='submit' name='final' value='OK'>

</form>

 

Merci pour votre aide,

Cordialement,

Jean-Laurent Hentz

Hors ligne

#2 24-05-2010 08:28:40

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : L'un ou l'autre...

Je n'ai pas tout compris à ton problème. Le fait de passer d'un formulaire à un autre et conserver les valeurs lors du post du second formulaire ?

Sinon d'une page à une autre une bonne méthode pour garder des informations sont les variables de session.

Hors ligne

#3 24-05-2010 08:49:26

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : L'un ou l'autre...

Je n'ai pas vraiment trop compris non plus...
Cependant, une piste peut-être : tester les valeurs des boutons pour savoir lequel a été cliqué et agir en conséquence.
A+


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#4 24-05-2010 09:06:56

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : L'un ou l'autre...

Bonjour,

Une chose que tu dois savoir avec les formulaires surtout si dans ton traitement tu fais une condition 1) si nombre 2) sinon (chaine de caractères). En effet toutes les variables passées en POST ou GET qu'elles soient numériques ou alphanumériques sont transformées en chaines de caractères. Par exemble une variable Nombre1 = 10 dans ton formulaire deviendra Nombre1="10" après un POST ou GET dans ton traitement. Si tu veux donc récupérer et t'assurer que tes variables aient les bons types de valeur lors du traitement du formulaire faut faire en premier lieu:


// on teste au préalable les variables avec isset et empty
$monNombre=intval($_POST['Nombre1']);
$maChaine=strval($_POST['Chaine1']);
 

Ensuite seulement tu peux appliquer ton test.
Cependant dans ton cas, il y a une méthode plus rapide et mieux adaptée à ton algo en testant directement la variable $_POST['pt'] comme suit:


if (is_numeric($_POST['pt'])){
echo "Nouveau : <input type='text' name='nouveau' /> ";
echo "<input type='hidden' name='pt' value='0'>";
echo "<input type='submit' name='point' value='Annuler'>";
} else {
echo "Ancien : <input type='text' name='ancien' /> ";
echo "<input type='hidden' name='pt' value='1'>";      
echo "<input type='submit' name='point' value='Nouveau'>";      
}
 

Au passage j'ai changé l'ordre d'affichage de ton champ hidden car tous les champs à traiter doivent être déclarés avant le champ submit.

A ma connaissance tu ne peux avoir qu'un seul champ submit dans un formulaire. De plus et dans tous les cas, c'est celui qui sera cliqué qui sera pris en compte pour ton formulaire. Donc ton submit final remplacera ceux que tu as défini dans ta condition. Edit: Le comportement changeant de ton formulaire viens donc d'un conflit entre des différents champs submit. Modifie ton code pour n'avoir qu'un seul champ submit d'affiché qui prends en compte l'ensemble de ton traitement.

Dernière modification par Jc (24-05-2010 09:20:45)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 24-05-2010 11:11:40

Jean-Laurent Hentz
Membre
Inscription : 23-05-2010
Messages : 2

Re : L'un ou l'autre...

Bonjour et merci pour vos réponses rapides.

Mon problème est bien la "concurrence" entre les deux boutons submit.

J'utilise deux boutons dans un autre cas :

submit 1 > provoque une action

submit 2 > envoie les données dans une base de donnée

Comme il y avait conflit (le submit 1 envoyait les données dans la base), l'astuce a été de préciser que :
if (isset( submit 1)){
    if(!isset(submit 2)){
on envoie les données dans la base de données
}
}

Ce système fonctionne parfaitement bien.

Dans mon cas présent, c'est l'inverse : je voudrais que le bouton submit 2 n'intervienne pas sur le submit 1...

Cordialement,

Jean-Laurent

Hors ligne

#6 24-05-2010 13:21:20

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : L'un ou l'autre...

Comme je viens de l'écrire, il vous suffit de gérer tous les cas de figure pour avoir selon le cas qu'un seul bouton submit d'actif, car le standard w3c est fait pour que le bouton submit active l'option action de la balise form.
Vous pouvez passer une variable distincte sur un champ hidden et c'est le formulaire de traitement qui gérera les actions à mener si telle ou telle variable est présente. Si c'est le fichier du formulaire qui reçoit la réponse il faut traiter ces variables en amont de l'affichage du formulaire et rendre le contenu du champ hidden et du bouton submit dynamique en fonction des variables passées.

Dernière modification par Jc (24-05-2010 13:22:36)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums