J'essaie de créer une calculatrice d'IMC. Cela devrait permettre aux gens d'utiliser des mesures métriques ou impériales.
Je me rends compte que je pourrais utiliser des balises cachées pour résoudre mon problème, mais cela m'ayant déjà posé problème auparavant, je me suis dit: je peux utiliser $_POST['variableName']
pour trouver la valeur de champ variableNameName soumise; mais ... je ne sais pas ou je ne vois pas comment vérifier quel formulaire était utilisé pour soumettre les variables.
Mon code est ci-dessous (même si je ne suis pas sûr que ce soit strictement pertinent pour la question):
<?php
$bmiSubmitted = $_POST['bmiSubmitted'];
if (isset($bmiSubmitted)) {
$height = $_POST['height'];
$weight = $_POST['weight'];
$bmi = floor($weight/($height*$height));
?>
<ul id="bmi">
<li>Weight (in kilograms) is: <span><?php echo "$weight"; ?></span></li>
<li>Height (in metres) is: <span><?php echo "$height"; ?></span></li>
<li>Body mass index (BMI) is: <span><?php echo "$bmi"; ?></span></li>
</ul>
<?php
}
else {
?>
<div id="formSelector">
<ul>
<li><a href="#metric">Metric</a></li>
<li><a href="#imperial">Imperial</a></li>
</ul>
<form name="met" id="metric" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="form/multipart">
<fieldset>
<label for="weight">Weight (<abbr title="Kilograms">kg</abbr>):</label>
<input type="text" name="weight" id="weight" />
<label for="height">Height (<abbr title="metres">m</abbr>):</label>
<input type="text" name="height" id="height" />
<input type="hidden" name="bmiSubmitted" id="bmiSubmitted" value="1" />
</fieldset>
<fieldset>
<input type="reset" id="reset" value="Clear" />
<input type="submit" id="submit" value="Submit" />
</fieldset>
</form>
<form name="imp" id="imperial" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="form/multipart">
<fieldset>
<label for="weight">Weight (<abbr title="Pounds">lbs</abbr>):</label>
<input type="text" name="weight" id="weight" />
<label for="height">Height (Inches):</label>
<input type="text" name="height" id="height" /
<input type="hidden" name="bmiSubmitted" id="bmiSubmitted" value="1" />
</fieldset>
<fieldset>
<input type="reset" id="reset" value="Clear" />
<input type="submit" id="submit" value="Submit" />
</fieldset>
</form>
<?php
}
?>
J'ai vérifié que cela fonctionnait (bien que sans validation pour le moment - je ne voulais pas trop encombrer ma question) avec métrique; J'ai ajouté le formulaire mais pas le traitement pour l'impériale pour le moment.
Pour identifier le formulaire soumis, vous pouvez utiliser:
Le nom du formulaire n'est pas envoyé au serveur avec les données POST.
Vous pouvez utiliser le code comme suit
<form name="myform" method="post" action="" enctype="multipart/form-data">
<input type="hidden" name="frmname" value=""/>
</form>
Vous pouvez le faire comme ça:
<input type="text" name="myform[login]">
<input type="password" name="myform[password]">
Vérifier les valeurs affichées
if (isset($_POST['myform'])) {
$values = $_POST['myform'];
// $login = $values['login'];
// ...
}
Le nom du formulaire n'est pas soumis. Vous devez simplement ajouter un champ caché à chaque formulaire et l'appeler un jour.
Dans le bouton d'envoi de formulaire (la méthode id de formulaire est post
):
<input type="submit" value="save" name="commentData">
Dans le fichier PHP:
if (isset($_POST['commentData'])){
// Code
}
Pour une raison quelconque, le nom du bouton d'envoi n'est pas transmis au super-global $_POST
lorsqu'il est soumis avec Ajax/jQuery.
Juste au cas où ça aiderait quelqu'un ...
Vous pouvez utiliser GET dans le paramètre d'action du formulaire, que j'utilise chaque fois que je crée une page combinée connexion/enregistrement.
Par exemple: action="loginregister.php?whichform=loginform"
J'espère que cela t'aides!
Comme le souligne petervandijck.com , ce code peut être sujet à des attaques XSS s'il est caché derrière un système de connexion ou s'il est intégré à un autre code.
Pour empêcher une attaque XSS, où vous avez écrit:
<?php echo "$weight"; ?>
Vous devriez écrire à la place:
<?php echo htmlentities($weight); ?>
Ce qui pourrait même être mieux écrit comme:
<?=htmlentities($weight); ?>
Utilisez une valeur unique sur le bouton d'envoi pour chaque formulaire, comme ceci
index.html
<form method="post" action="bat/email.php">
<input type="text" name="firstName" placeholder="First name" required>
<input type="text" name="lastName" placeholder="Last name" required>
<button name="submit" type="submit" value="contact">Send Message</button>
</form>
<form method="post" action="bat/email.php">
<input type="text" name="firstName" placeholder="First name" required>
<input type="text" name="lastName" placeholder="Last name" required>
<button name="submit" type="submit" value="support">Send Message</button>
</form>
email.php
<?php
if (isset($_POST["submit"])) {
switch ($_POST["submit"]) {
case "contact":
break;
case "support":
break;
default:
break;
}
}
?>
Vous pouvez simplement donner un nom au bouton d'envoi et faire ce qui doit être fait en fonction de cela. J'ai plusieurs formulaires sur une page et je ne fais que cela. Transmettez le nom du bouton, puis si nom-bouton = nom du bouton faites quelque chose.
Seuls les noms des champs de formulaire sont soumis, le nom du formulaire lui-même ne l’est pas. Mais vous pouvez définir un champ caché avec son nom.
Vous réalisez cela avec echo $ height; vous ouvrez une faille de sécurité très grave dans votre application, n'est-ce pas?