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

Formulaire avec 2 boutons et liens différents suivant ce que l'on coche

8 réponses
Avatar
elia
Bonjour,
Dans une page .php j'ai un formulaire de commande avec 2 boutons.

Un bouton (calcul) (name=3D=3D"submit")

pour calculer et afficher le montant total des achats suivant la
quantit=E9 choisis des articles (le lien se fait sur la m=EAme page :
commande.php) et

Un bouton (suite) (name=3D=3D"submit2")

pour poursuivre la commande, ...coordonn=E9es de l'Internaute.
Ce deuxi=E8me bouton pose probl=E8me car suivant si l'internaute coche
le bouton radio "Union europ=E9enne" ou pas le lien sera diff=E9rent.
(vers commande1.php ou vers commande2.php).


Dans ma page : commande.php j'ai donc

<script language=3D'Javascript'>
function setAction(name) {

<? $choix =3D$HTTP_POST_VARS['choix'];?>

if (name=3D=3D"submit")
document.forms[0].action=3D "commande.php"
else if (name=3D=3D"submit2")
if ($choix =3D "union")
document.forms[0].action=3D "commande1.php"
else
document.forms[0].action=3D "commande2.php"
}
</script>

Dans mon formulaire j'ai :

<form name=3D"form" method=3D"post" onsubmit=3D'return setAction()'>
.=2E.
<input name=3D"choix" type=3D"radio" value=3D"union" checked=3D"checked" />
<input name=3D"choix" type=3D"radio" value=3D"autre" />
.=2E.
<input name=3D"submit" type=3D"submit" id=3D"submit"
onClick=3D"setAction(this.name)" value=3D"Calculer" /> // le bouton
calculer
.=2E.
<input name=3D"submit2" type=3D"submit" id=3D"submit2"
onClick=3D"setAction(this.name)" value=3D"Suite" /> // le bouton suite

Le r=E9sultat fait que je peux calculer sans probl=E8me mais pour le
bouton =AB suite =BB si je coche le =AB bonton radion =BB =AB autre =BB le
lien ne se fait pas sur la page commande2.php

Ou es le probl=E8me ? Merci de votre aide. Pascal

8 réponses

Avatar
newdb
elia wrote:
Bonjour,
Dans une page .php j'ai un formulaire de commande avec 2 boutons.
Le résultat fait que je peux calculer sans problème mais pour le
bouton « suite » si je coche le « bonton radion » « autre » le
lien ne se fait pas sur la page commande2.php
Ou es le problème ? Merci de votre aide. Pascal


peut-être là :

if ($choix = "union")


remplacer par :
if ($choix == "union")

--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|_ =="

Avatar
elia
Merci mais si je remplace if ($choix = "union") par if ($choix ==
"union") en cliquant sur le bouton commande je ne pars même plus sur
la page commande1.php comme précédemment mais je reste sur ma page.
La question reste donc tjrs de savoir comment partir sur une page
différente avec un choix de bouton radio dans un formulaire. Pascal
Avatar
ASM
Bonjour,


bonjour,

ce n'est pas toi à qui on a dit que calculer via JS était une mauvaise
idée ?

Si à la place tu fais choisir le php du calcul par le JS ...
on en revient à la case départ !

Rien ne t'empeche de faire calculer via JS (cf + bas),
mais ...
il faut que tout fonctionne *sans* JS

donc : tu envoies ton form au php *sans* artifice en javascript

Suivant le bouton submit cliqué sera envoyé ce bouton (sa value)
(pas les autres submits, qui d'ailleurs porteront tous le même nom)
le php par ses HTTP_POST analyse $monSubmit et sait alors réagir comme
tu lui auras expliqué.


============================= idée pour calcul PHP seul
=============================
Ne pas oublier de réaliser une fonction PHP : $checked()
servant à checker le bon radio-bouton.

<form action="commande.php" method="post">
...
<input name="choix" type="radio" value="union" <? $check(); ?> />
<input name="choix" type="radio" value="autre" <? $check(); ?> />

<input name="monSubmit"
type="submit" id="submit1" value="Calculer" />

<input name="monSubmit"
type="submit" id="submit2" value="Suite" />
</form>


================================== une idée pour calcul en local
et compatible calcul sur serveur
==================================
Si JS activé l'appui sur [Calculer] ne va pas envoyer le form
mais montrer le résultat.
Si pas de JS, le form est envoyé au php qui fait le calcul et en
ré-affiche le résultat

Dans les 2 cas, le bouton [Envoyer] fait faire le calcul au PHP

Le JS ne sert qu'à gagner un peu de temps (pas d'A & R au serveur)
et à libérer le serveur (pas de calcul si, finalement, on ne commande pas)


<script type="text/javascript">

var quoi_faire = false;

function setAction() {
if(!quoi_faire)
{
var f = document.forms[0];
var choisi = '';
for(var i=0; i<f.choix.length; i++)
if(f.choix[i].checked) choisi = f.choix[i].value;
if(choisi == 'union')
calcul(); // fabriquer une fonction JS pour calculer
else if(choisi == 'autre')
calcul1(); // fabriquer l'autre fonction JS
else calcul2(); // à fabriquer aussi
}
return quoi_faire;
}

function calcul() { ... }
function calcul1() { ... }
function calcul2() { ... }

</script>

<form name="form" method="post" onsubmit="return setAction()">

<input name="choix" type="radio" value="union" checked="checked" />
<input name="choix" type="radio" value="autre" />

<input name="monSubmit"
type="submit" id="submit1" value="Calculer" />

<input name="monSubmit"
type="submit" id="submit2" value="Suite"
onclick="quoi_faire = true" />

</form>


================= réponse au post
=================
Dans une page .php j'ai un formulaire de commande avec 2 boutons.


Là y a rien qui peut fonctionner si le JS est désactivé.

Il faut virer le onsubmit de la balise form puisque ce sont les boutons
de submit qui font le boulot !

pour poursuivre la commande, ...coordonnées de l'Internaute.
Ce deuxième bouton pose problème car suivant si l'internaute coche
le bouton radio "Union européenne" ou pas le lien sera différent.
(vers commande1.php ou vers commande2.php).

Dans ma page : commande.php j'ai donc

<script language='Javascript'>


Nan ! de nan de non ! c'est :

<script type="text/javascript">

// écriture par PHP du dernier choix envoyé
// que je sais pas à quoi il sert ici ?
// normalement le PHP va simplement servir à checker
// le radio-bouton qu'il faut

var choix = <?= $HTTP_POST_VAR['choix'] ?>;

function setAction(name) {

<? $choix =$HTTP_POST_VARS['choix'];?>


// Je ne comprends pas ce que ce php est censé faire ?
// à supprimer ( mon idée)
// voir correctif + bas

// tu oublies de récupérer la valeur
// choisie (checked) aux boutons radios "choix"

if (name=="submit")
document.forms[0].action= "commande.php"
else if (name=="submit2" && choix == 'union')

document.forms[0].action = "commande1.php" :
}

</script>

Dans mon formulaire j'ai :


<!-- on met au moins un action au form (celui par défaut) -->

<form action="commande2.php" name="form" method="post">

<input name="choix" type="radio" value="union"


<? if($HTTP_POST_VAR['choix'] == 'union') echo "checked"; ?>
/>

<input name="choix" type="radio" value="autre"


<? if($HTTP_POST_VAR['choix'] == 'autre') echo "checked"; ?>
/>

<input name="monSubmit" type="submit" id="submit"
onClick="setAction(this.id)" value="Calculer" />

<input name="monSubmit" type="submit" id="submit2"
onClick="setAction(this.id)" value="Suite" />

</form>

Le résultat fait que je peux calculer sans problème


ben oui piske l'autre truc marche pô.

bouton « suite » si je coche le « bonton radio » « autre » le
lien ne se fait pas sur la page commande2.php

Ou es le problème ? Merci de votre aide. Pascal


il manque la récup de ce choix
(voir la soluce 2 pour savoir comment faire)


--
ASM

Avatar
ASM

Mais à qui et à quoi répons-tu là ?

Merci mais si je remplace if ($choix = "union") par if ($choix = > "union") en cliquant sur le bouton commande je ne pars même plus


--
ASM

Avatar
ASM

une erreur ! :

function calcul2() { ... }

</script>

<form name="form" method="post" onsubmit="return setAction()">


corrigé :

<form action="commande.php"
name="form"method="post" onsubmit="return setAction()">


--
ASM

Avatar
elia
Merci ASM,

Oui, c'est bien moi qui a demandé un calcul en javascript, on m'a
alors conseillé de le faire en php, ce que j'étais déjà fier
d'avoir réussi.

Il s'agissait de faire la somme de 3 produits qui avait chacun un prix
fixe et d'y ajouter les frais de ports que l'on choisissait dans un
menu déroulant.

Cela donnait en retournant sur la même page et ceci avec le bouton
calculer:

<?
// Calcule du Prix
$quantite1 = $HTTP_POST_VARS['quantite1'];
$quantite2 = $HTTP_POST_VARS['quantite2'];
$quantite3 = $HTTP_POST_VARS['quantite3'];

$montant1 = 20 * $quantite1;
$montant2 = 30 * $quantite2;
$montant3 = 40 * $quantite3;
$port = $HTTP_POST_VARS['port'];
$montantfinal = $montant1 + $montant2 + $montant3 + $port;
?>

Suite à cela, dans le formulaire, il y a deux boutons radio, Union
Européenne et Autres destinations, suivant lequel choisi on part en
clicant sur le bouton "Suite" sur une des deux pages avec la variable
php $montantfinal

Maintenant pour le calcul en javascript, cela me pose un autre
problème. Je vais étudier tout cela ce week-end et te remercie
vraiment pour ton aide, pascal
Avatar
ASM
Merci ASM,
[...]

Maintenant pour le calcul en javascript, cela me pose un autre
problème. Je vais étudier tout cela ce week-end et te remercie
vraiment pour ton aide, pascal


Pas besoin de bouton de calcul, un simple envoi doit suffire.
(plus un petit bouton de confirmation ?)


fichier commande.php

<html>

<?
// Calcul du Prix
$prix1 = 20;
$prix2 = 30;
$prix3 = 40;
$quantite1 = $HTTP_POST_VARS['quantite1'];
$quantite2 = $HTTP_POST_VARS['quantite2'];
$quantite3 = $HTTP_POST_VARS['quantite3'];

$montant1 = $prix1 * $quantite1;
$montant2 = $prix2 * $quantite2;
$montant3 = $prix3 * $quantite3;
$port = $HTTP_POST_VARS['port'];
$montantfinal = $montant1 + $montant2 + $montant3 + $port;

// gestion fichier dans action
$url = "commande.php";
$envoi = $HTTP_POST_VARS['envoi'];
if($envoi == 'Envoi') url = "valid_commande.php";
?>

<script type="text/javascript">
var px1 = <?= $prix1 ?>;
var px2 = <?= $prix2 ?>;
var px3 = <?= $prix3 ?>;
function total() {
var f = document.forms[0];
var frais = f.port[0].checked? 20 : 40;
f.total.value = f.montant1.value +
f.montant2.value +
f.montant3.value +
frais;
}
</script>

<form action="<? echo $url ?>" method="post">
<h1>votre commande</h1>
<p>Art 1 :
<input type=text name="quantite1" value="<?= $quantite1 ?>"
onchange="montant1.value = px1*this.value; total();" >
à <?= $prix1 ?>€ piece <input type=text name="montant1" value="<? echo $montant1 ?>" > €

<p>Art 2 :
<input type=text name="quantite2" value="<?= $quantite2 ?>"
onchange="montant2.value = px2*this.value; total();" >
à <?= $prix2 ?>€ piece <input type=text name="montant2" value="<? echo $montant2 ?>" > €

<p>Art 2 :
<input type=text name="quantite3" value="<?= $quantite1 ?>"
onchange="montant3.value = px3*this.value; total();" >
à <?= $prix3 ?>€ piece <input type=text name="montant3" value="<? echo $montant3 ?>" > €

<p>Choix du port
Union Européenne
<input type=radio name="port" value="20" onclick="total();"
<? if(empty($port) || $port!='40') echo "checked" ?> />
Autre
<input type=radio name="port" value="40" onclick="total();"
<? if(!(empty($port)) && $port=='40') echo "checked" ?> />
<hr />
<h3>Total <input type=text name="total" value="<?= $montantfinal ?>" /> Euros
</h3>
<p>Confirmer la commande :
<input type=submit name="envoi"
value="<? if(!empty($envoi)) echo 'Confirmer'; else echo 'Envoi'; ?>">
</form>

</html>

Avatar
elia
Et bien! Un super grand merci à toi. Comme réponse on ne peut
recevoir mieux. C'est vraiment la réponse qui me fallait! Pascal