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

Как создать форму PHP, которая подчиняется себе?

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

4b9b3361

Ответ 1

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

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

<?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; ?>

Ответ 2

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

У вашей кнопки отправки нет имени. Добавьте name= "submit" к вашей кнопке отправки.

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

Ответ 6

  • изменение
    <input type="submit" value="Submit" />
    для изображения <input type="submit" value="Submit" name='submit'/>

  • изменение
    <form method="post" action="<?php echo $PHP_SELF;?>">
    для изображения <form method="post" action="">

  • Он выполнит код в if только при его отправке.
  • Он всегда будет показывать форму (html-код).
  • В чем именно заключается ваш вопрос?