Как создать форму для самостоятельной публикации / самостоятельной подачи, т. Е. Форму, которая представляет результаты для себя, а не для отправки в другую форму?
Правильный способ – использовать $_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; ?>
Думаю, вы имеете в виду $_SERVER['PHP_SELF']
. И если это так, вы действительно не должны использовать его, не дезинфицируя его в первую очередь. Это позволяет вам открывать атаки XSS.
Условие if(isset($_POST['submit']))
должно быть выше всего вывода HTML и должно содержать функцию header()
с повторным перенаправлением на текущую страницу (только теперь, с некоторым замечанием, что «электронные письма имеют был отправлен ".. или что-то). Для этого вам придется использовать $_SESSION
или $_COOKIE
.
И, пожалуйста. Прекратите использование $_REQUEST
. Это также создает угрозу безопасности.
Это будет работать, только если register_globals
включен, и он никогда не должен быть включен (если, конечно, вы не определяете эту переменную где-то еще).
Попробуйте установить атрибут action
?
…
<form method="post" action="?"> ... </form>
Вы также можете установить его как пустую ( ""
), но старые версии WebKit имели ошибку .
У вашей кнопки отправки нет имени. Добавьте имя = "отправить" на кнопку отправки.
Если вы просмотрите источник в форме в браузере, вы увидите, как он подчиняется себе: атрибут действия формы будет содержать имя текущего скрипта – поэтому, когда форма отправляется, она отправляется сама по себе. Править ради суеты!
изменение
<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
только когда он будет отправлен. Попробуй это
<form method="post" id="reg" name="reg" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"
Работает хорошо 🙂