Как получить доступ к переменной name в форме из PHP - PullRequest
23 голосов
/ 11 мая 2009

Я пытаюсь создать калькулятор ИМТ. Это должно позволить людям использовать метрические или имперские измерения.

Я понимаю, что мог бы использовать скрытые теги для решения своей проблемы, но это уже беспокоило меня, поэтому я подумал, что могу спросить: я могу использовать $_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
    }
?>

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

Ответы [ 11 ]

86 голосов
/ 11 мая 2009

Для идентификации отправленной формы вы можете использовать:

  • Скрытое поле ввода.
  • Имя или значение кнопки отправки.

Имя формы не отправляется на сервер как часть данных POST.

Вы можете использовать следующий код

<form name="myform" method="post" action="" enctype="multipart/form-data">
    <input type="hidden" name="frmname" value=""/>
</form>
14 голосов
/ 19 февраля 2013

Вы можете сделать это так:

<input type="text" name="myform[login]">
<input type="password" name="myform[password]">

Проверьте опубликованные значения

if (isset($_POST['myform'])) {
    $values = $_POST['myform'];

    // $login = $values['login'];
    // ...
}
13 голосов
/ 11 мая 2009

Имя формы не отправлено. Вам нужно просто добавить скрытое поле к каждой форме и назвать его днем.

8 голосов
/ 08 мая 2012

В кнопке отправки формы (метод идентификатора формы post):

<input type="submit" value="save" name="commentData">

В файле PHP:

if (isset($_POST['commentData'])){
    // Code
}
5 голосов
/ 18 января 2014

По какой-то причине имя кнопки отправки не передается суперглобальному $_POST при отправке с помощью Ajax / jQuery.

На всякий случай, если кому-то это поможет ...

2 голосов
/ 25 октября 2015

Вы можете использовать GET в параметре действия формы, который я использую при создании комбинированной страницы входа / регистрации.

Например: action="loginregister.php?whichform=loginform"

Надеюсь, это поможет!

2 голосов
/ 08 сентября 2009

Как указал petervandijck.com , этот код может быть подвержен атакам XSS, если он находится за какой-либо системой входа в систему или встроен в другой код.

Чтобы предотвратить XSS-атаку, где вы написали:

<?php echo "$weight"; ?>

Вы должны написать вместо:

<?php echo htmlentities($weight); ?>

Что может быть лучше записать как:

<?=htmlentities($weight); ?>
1 голос
/ 28 марта 2018

Используйте уникальное значение на кнопке отправки для каждой формы, например,

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;
      }
    }
?>
0 голосов
/ 14 апреля 2016

Вы можете просто дать имя кнопке отправки и сделать то, что нужно сделать, основываясь на этом. У меня есть несколько форм на странице, и я делаю это. Передайте имя кнопки, а затем, если имя кнопки = имя кнопки, сделайте что-нибудь.

0 голосов
/ 11 мая 2009

Вы понимаете это с помощью echo $ height; вы открываете очень, очень серьезную дыру в безопасности вашего приложения, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...