我创建了一个表单,如果用户没有填写所有字段,目的是刷新当前页面的页面。问题在于第七行。
刷新页面并更改网址。代码将%20添加到URL中。有没有办法阻止这个?
表单汇总后,我还想将用户重定向到'thankyou页',以防止他们使用刷新按钮或浏览器后退按钮多次重新提交表单。这是可能的,也是最安全的方式吗? header()函数似乎不起作用
非常感谢,我非常感谢人们的努力
<h2>post a comment</h2>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table width "600" bgcolor="99CCCC">
<tr>
<td>Your Name:</td>
<td><input type="text" name="comment_name"/></td>
</tr>
<tr>
<td>Your email:</td>
<td><input type="text" name="comment_email"/></td>
</tr>
<tr>
<td>Your Comment:</td>
<td><textarea name="comment" cols="35" rows="16"/></textarea></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="postcom"/></td>
</tr>
</table>
</form>
<?php
$errors = [];
if(isset($_POST['submit'] )) {
// php scheck if comment is set
$comment_name = $_POST['comment_name'];
$comment_email = $_POST['comment_email'];
$comment = $_POST['comment'];
$status ="unapprove"; // This is a variable called status
if($comment_name=='' OR $comment_email=='' OR $comment=='') {
$errors[] = 'field is empty!';
// echo "<script>window.open('post_details.php?post=$post_id')</script>";
} else {
header('Location: www.google.com');
exit; // prevents rest of code execute
}
}
if(count($errors) > 0) {
foreach ($errors as $error) {
echo $error . '<br>';
}
}
&GT;
答案 0 :(得分:0)
你想要达到这样的目标吗?
<?php
$errors = [];
if(isset($_POST['submit'])) {
$foobar = $_POST['foobar'];
if(empty($foobar)) {
$errors[] = 'Foobar field is empty!';
} else {
// Do some stuff
header('Location: thankyoupage.php');
exit;
}
}
if(count($errors) > 0) {
foreach($errors as $error) {
echo $error . '<br>';
}
}
?>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="foobar">
<input type="submit" name="submit">
</form>
在exit
调用之后,您应该始终调用header()
构造,以防止进一步执行脚本。
此外,%20
是空间代码。如果你想摆脱它,不要在你的网址中使用空格。