Подтвердить что ты не робот

Как получить доступ к переменной формы '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
    }
?>

Я проверил, что он работал (хотя без проверки на данный момент - я не хотел слишком много толковать мой вопрос) с метрикой; Я добавил форму, но не обработку для имперских.

4b9b3361

Ответ 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.