我有以下表格可行。但是,如果用户要单击刷新,则会在每次刷新时反复重新发送表单。如何在刷新时清除表单以便再次填写?
由于
PHP
<style>
.error_message{color:#cc0000;}
.form1{}
.form2{display:none;}
#succsess_page h1{background:url('http://example.com/img/ok.png')left no-repeat;padding-left:40px;color:#45a015; }
</style>
<?php
//fields
$honeypot = '';
$error = '';
$name = '';
$email = '';
$comments = '';
if(isset($_POST['contactus'])) {
$honeypot = $_POST['email_confirm'];
$name = $_POST['name'];
$email = $_POST['email'];
$comments = $_POST['comments'];
// honeypot
if($honeypot)
exit(1);
//error messages
if(trim($name) == '') {
$error = '<div class="error_message">Need your name</div>';
} else if(trim($email) == '') {
$error = '<div class="error_message">Need your email</div>';
} else if(!isEmail($email)) {
$error = '<div class="error_message">Need a valid email</div>';
} else if(trim($comments) == '') {
$error = '<div class="error_message">A message is required</div>';
}
if($error == '') {
if(get_magic_quotes_gpc()) {
$comments = stripslashes($comments);
}
//email address
$address = "email@example.com";
//email message
$e_subject = 'Web Message from: ' . $name . '.';
$e_body = "From: $name\nEmail: $email \r\n\nMessage:\n$comments\n\n\n";
$msg = $e_body . $e_content . $e_reply;
if(mail($address, $e_subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n"))
{
//success html page response
echo "<div id='succsess_page'>";
echo "<h1>Email Sent Successfully.</h1>";
echo "<p>Thank you <strong>$name</strong> , your message has been submitted. </p>";
echo "</div>";
} else echo "Error. Mail not sent";
}
}
if(!isset($_POST['contactus']) || $error != '') // Do not edit.
{
?>
<?php echo $error; ?>
<!--form-->
<form method="post" action="">
<p class="form1">Name: <input name="name" type="text" id="name" size="30" value="<?php echo $name; ?>" onblur="toUpper(this.value);" /></p>
<p class="form1">Email: <input name="email" type="text" id="email" size="30" value="<?php echo $email; ?>" /></p>
<p class="form2">Confirm Email: <input name="email_confirm" type="text" id="email_confirm" size="30" value="<?php echo $email_confirm; ?>" /></p>
<p class="form1">Message: <textarea name="comments" cols="40" rows="3" id="comments"><?php echo $comments; ?></textarea></p>
<p class="form1"><input name="contactus" type="submit" class="submit" id="contactus" value="Submit" /></p>
</form>
<!--end form-->
<?php }
function isEmail($email) { // Email address verification, do not edit.
return(preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,12})$/",$email));
}
?>
<!------- capitalize first letter Name input ---->
<script>
function toUpper(mystring) {
var sp = mystring.split(' ');
var wl=0;
var f ,r;
var word = new Array();
for (i = 0 ; i < sp.length ; i ++ ) {
f = sp[i].substring(0,1).toUpperCase();
r = sp[i].substring(1);
word[i] = f+r;
}
newstring = word.join(' ');
document.getElementById('name').value = newstring;
return true;
}
</script>
答案 0 :(得分:1)
您可以在使用以下方法插入数据后重定向页面:
header('Location:'.$_SERVER['PHP_SELF']);
重定向后,将重新加载整个页面,刷新不会导致数据再次插入。
if(isset($_POST['contactus'])) {
$honeypot = $_POST['email_confirm'];
$name = $_POST['name'];
$email = $_POST['email'];
$comments = $_POST['comments'];
// honeypot
if($honeypot)
exit(1);
//error messages
if(trim($name) == '') {
$error = '<div class="error_message">Need your name</div>';
} else if(trim($email) == '') {
$error = '<div class="error_message">Need your email</div>';
} else if(!isEmail($email)) {
$error = '<div class="error_message">Need a valid email</div>';
} else if(trim($comments) == '') {
$error = '<div class="error_message">A message is required</div>';
}
if($error == '') {
if(get_magic_quotes_gpc()) {
$comments = stripslashes($comments);
}
//email address
$address = "email@example.com";
//email message
$e_subject = 'Web Message from: ' . $name . '.';
$e_body = "From: $name\nEmail: $email \r\n\nMessage:\n$comments\n\n\n";
$msg = $e_body . $e_content . $e_reply;
if(mail($address, $e_subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n"))
{
//success html page response
echo "<div id='succsess_page'>";
echo "<h1>Email Sent Successfully.</h1>";
echo "<p>Thank you <strong>$name</strong> , your message has been submitted. </p>";
echo "</div>";
} else echo "Error. Mail not sent";
}
header('Location:'.$_SERVER['PHP_SELF']);
}
答案 1 :(得分:0)
正确答案非常简单,刻板: PHP How to pass error marker after refreshing unsuccesful login 申请您自己的需求。 go_to函数只是对header()的调用;并退出;