Как создать форму для самостоятельной публикации/самостоятельной отправки, т.е. форму, которая отправляет результаты самому себе, вместо отправки в другую форму?
Как создать форму PHP, которая подчиняется себе?
Ответ 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-код).
- В чем именно заключается ваш вопрос?