Как мне сделать форму PHP, которая подчиняется себе? - PullRequest
46 голосов
/ 29 апреля 2011

Как мне сделать самопубликующуюся / самопредставляющуюся форму, т. Е. Форму, которая представляет результаты себе, а не отправляет их в другую форму?

Ответы [ 6 ]

76 голосов
/ 29 апреля 2011

Правильный способ будет использовать $_SERVER["PHP_SELF"] (в сочетании с htmlspecialchars, чтобы избежать возможных эксплойтов).Вы также можете просто пропустить пустую часть action=, которая недопустима для W3C, но в настоящее время работает в большинстве (всех?) Браузеров - по умолчанию отправка для себя, если она пуста.

Вот примерФорма, которая берет имя и адрес электронной почты, а затем отображает значения, которые вы ввели при отправке:

<?php if (!empty($_POST)): ?>
    Welcome, <?php echo htmlspecialchars($_POST["name"]); ?>!<br>
    Your email is <?php echo htmlspecialchars($_POST["email"]); ?>.<br>
<?php else: ?>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
        Name: <input type="text" name="name"><br>
        Email: <input type="text" name="email"><br>
        <input type="submit">
    </form>
<?php endif; ?>
11 голосов
/ 29 апреля 2011

Полагаю, вы имеете в виду $_SERVER['PHP_SELF']. И если так, то вам действительно не следует использовать его без предварительной дезинфекции. Это оставляет вас открытыми для атак XSS.

Условие if(isset($_POST['submit'])) должно быть выше всех выходных данных HTML и должно содержать функцию header() с перенаправлением на текущую страницу снова (только сейчас, с некоторым приятным уведомлением о том, что «электронные письма были отправлены» .. или что-то в этом роде). ). Для этого вам придется использовать $_SESSION или $_COOKIE.

И пожалуйста. Прекратите использовать $_REQUEST. Это также создает угрозу безопасности.

5 голосов
/ 29 апреля 2011

Это будет работать, только если register_globals включено, и никогда не должно быть включено (если, конечно, вы не определяете эту переменную где-то еще).

Попробуйте установить form * action атрибут ? ...

<form method="post" action="?">
   ...
</form>

Вы также можете установить его пустым (""), но в более старых версиях WebKit была ошибка .

4 голосов
/ 27 марта 2015

Попробуйте это

<form method="post" id="reg" name="reg" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"

Хорошо работает:)

3 голосов
/ 29 апреля 2011

Ваша кнопка отправки не имеет имени. Добавить имя = "отправить" на кнопку отправки.

Если вы просматриваете исходный код в форме в браузере, вы увидите, как он отправляется самому себе - атрибут действия формы будет содержать имя текущего сценария - поэтому, когда форма отправляется, она отправляет сама себе. Редактировать ради тщеславия!

2 голосов
/ 29 апреля 2011
  1. изменение
    <input type="submit" value="Submit" />
    до
    <input type="submit" value="Submit" name='submit'/>

  2. изменение
    <form method="post" action="<?php echo $PHP_SELF;?>">
    до
    <form method="post" action="">

  3. Он будет выполнять код в if только после его отправки.
  4. Всегда будет отображаться форма (html-код).
  5. в чем именно твой вопрос?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...