Я пытаюсь создать калькулятор BMI. Это должно позволить людям использовать метрические или имперские измерения.
Я понимаю, что я мог использовать скрытые теги для решения моей проблемы, но это меня прослушивало раньше, поэтому я подумал, что попрошу: я могу использовать $_POST['variableName']
чтобы найти переданное значение переменной NameName; но … я не знаю или вижу, как проверить, какая форма была использована для отправки переменных.
Мой код ниже (хотя я не уверен, что это строго относится к вопросу):
<?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 } ?>
Я подтвердил, что он сработал (хотя без проверки на данный момент – я не хотел слишком много толковать мой вопрос) с метрикой; Я добавил форму, но не обработку для имперских.
Чтобы идентифицировать представленную форму, вы можете использовать:
Имя формы не отправляется на сервер как часть данных POST.
Вы можете использовать следующий код
<form name="myform" method="post" action="" enctype="multipart/form-data"> <input type="hidden" name="frmname" value=""/> </form>
Имя формы не отправляется. Вы должны просто добавить скрытое поле в каждую форму и назвать его днем.
Вы можете сделать это следующим образом:
<input type="text" name="myform[login]"> <input type="password" name="myform[password]">
Проверьте опубликованные значения
if (isset($_POST['myform'])) { $values = $_POST['myform']; // $login = $values['login']; // ... }
В форме кнопки отправки (id-метод формы – post
):
<input type="submit" value="save" name="commentData">
В файле PHP:
if (isset($_POST['commentData'])){ // Code }
По какой-то причине имя кнопки отправки не передается в суперглобальное $_POST
при $_POST
с помощью Ajax / jQuery.
На всякий случай это помогает кому-то …
Как отметил petervandijck.com , этот код может быть восприимчив к атак XSS, если у вас есть какая-то система входа в систему или встроена в другой код.
Чтобы предотвратить атаку XSS, где вы написали:
<?php echo "$weight"; ?>
Вместо этого вы должны написать:
<?php echo htmlentities($weight); ?>
Что может быть лучше написано так:
<?=htmlentities($weight); ?>
Вы можете использовать GET в параметре действия формы, который я использую всякий раз, когда я делаю комбинированную страницу входа / регистрации.
Например: action="loginregister.php?whichform=loginform"
Надеюсь это поможет!
Представлены только имена полей формы, имя самой формы – нет. Но вы можете установить скрытое поле с именем в нем.
Вы понимаете, что с эхом $ height; вы открываете очень серьезную дыру в вашем приложении, верно?
Вы можете просто указать имя кнопке отправки и сделать то, что нужно сделать на основе этого. У меня есть несколько форм на странице и делаю именно это. Передайте имя кнопки, а затем, если имя кнопки = имя кнопки, сделайте что-нибудь.