Как получить доступ к переменной формы 'name' из PHP
Я пытаюсь создать калькулятор BMI. Это должно позволить людям использовать метрические или имперские измерения.
Я понимаю, что я мог использовать скрытые теги для решения моей проблемы, но это меня прослушивало раньше, поэтому я подумал, что попрошу: я могу использовать $_POST['variableName']
для поиска переданного значения переменной variableName; но... я не знаю или вижу, как проверить, какая форма была использована для отправки переменных.
Мой код ниже (хотя я не уверен, что это строго относится к вопросу):
<?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
}
?>
Я проверил, что он работал (хотя без проверки на данный момент - я не хотел слишком много толковать мой вопрос) с метрикой; Я добавил форму, но не обработку для имперских.
Ответы
Ответ 1
Чтобы идентифицировать представленную форму, вы можете использовать:
- Скрытое поле ввода.
- Имя или значение кнопки отправки.
Имя формы не отправляется на сервер как часть данных POST.
Вы можете использовать следующий код
<form name="myform" method="post" action="" enctype="multipart/form-data">
<input type="hidden" name="frmname" value=""/>
</form>
Ответ 2
Вы можете сделать это следующим образом:
<input type="text" name="myform[login]">
<input type="password" name="myform[password]">
Проверить опубликованные значения
if (isset($_POST['myform'])) {
$values = $_POST['myform'];
// $login = $values['login'];
// ...
}
Ответ 3
Имя формы не отправляется. Вы должны просто добавить скрытое поле в каждую форму и называть его днем.
Ответ 4
В форме кнопки отправки (метод id формы post
):
<input type="submit" value="save" name="commentData">
В файле PHP:
if (isset($_POST['commentData'])){
// Code
}
Ответ 5
По какой-то причине имя кнопки отправки не передается суперглобальному $_POST
при отправке с помощью Ajax/jQuery.
На всякий случай это помогает кому-то...
Ответ 6
Как отметил petervandijck.com, этот код может быть восприимчив к атак XSS, если у вас есть какая-то система входа в систему или она встроена в другие код.
Чтобы предотвратить атаку XSS, где вы написали:
<?php echo "$weight"; ?>
Вместо этого вы должны написать:
<?php echo htmlentities($weight); ?>
Что может быть лучше написано как:
<?=htmlentities($weight); ?>
Ответ 7
Вы можете использовать GET в параметре действия формы, который я использую всякий раз, когда я делаю комбинированную страницу входа/регистрации.
Например: action="loginregister.php?whichform=loginform"
Надеюсь, это поможет!
Ответ 8
Используйте уникальное значение на кнопке отправки для каждой формы, например, так
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;
}
}
?>
Ответ 9
Представлены только имена полей формы, а имя самой формы - нет. Но вы можете установить скрытое поле с именем в нем.
Ответ 10
Вы понимаете, что с эхом $height; вы открываете очень серьезное отверстие для безопасности в своем приложении, не так ли?
Ответ 11
Вы можете просто указать имя кнопке отправки и сделать то, что должно быть сделано на основе этого. У меня есть несколько форм на странице и делаю именно это. Передайте имя кнопки, а затем, если имя кнопки = имя кнопки сделайте что-нибудь.
Ответ 12
У меня была похожая проблема, которая привела меня к этому вопросу. Я просмотрел все предыдущие ответы, но в итоге я нашел свое собственное решение. Я надеюсь, что это поможет кому-то еще с этой же проблемой:
<form name="ctc_form" id="ctc_form" action='' method='get'>
<input type="hidden" name="form_nm" id="form_nm">
<button type="submit" name="submit" id="submit" onclick="document.getElementById('form_nm').value=this.closest('form').name;">Submit</button>
</form>
Это эффективно и эффективно выполняет следующее:
- Передает атрибут имени формы через скрытое поле ввода, без использования ошибочного атрибута значения кнопки отправки.
- Работает с методами GET и POST.
- Не требует дополнительного, независимого JavaScript.