我有简单的注册表单在php和检查输入与ajax验证和控制提交表单与ajax。 一切都很好。 除了一件事。 问题是:点击submit按钮后,ajax将成功结果加载到相同的注册表单中,并且不会重新加载页面和重定向。
我想用ajax表单提交重新加载register.php
页面并将其重定向到register.php?action=joined
。
在ajax之前,register.php有自己的语句,如果注册成功($_get['action']=='joined'
),它将重定向并销毁注册表单,并显示成功表单。
我给你看了我的密码。 我知道为什么它不起作用,但我不知道如何处理这件事。
RegisterControl.php
<?php
if(isset($_POST['fullname'])){
//fullname validation
$fullname = $_POST['fullname'];
if (! $user->isValidFullname($fullname)){
$infofn = 'Your name must be alphabetical characters';
echo '<p>'.$infofn.'</p>';
}
}
//if form has been submitted process it
if(isset($_POST['submit']) && $_POST['submit'] == 'register'){
//create the activasion code
$activasion = md5(uniqid(rand(),true));
try {
//insert into database with a prepared statement
$stmt = $db->prepare('INSERT INTO members (fullname) VALUES (:fullname, :email, :active)');
$stmt->execute(array(
':fullname' => $fullname,
':email' => $email,
':active' => $activasion
));
$id = $db->lastInsertId('memberID');
//send email
$to = $_POST['email'];
$subject = "Verify Your Account";
$body = "<p>Thank you for registering on the demo site.</p>
<p>Hello ".$fullname.", Please click this link to activate your account: <a href='".DIR."activate.php?x=$id&y=$activasion'>".DIR."activate.php?x=$id&y=$activasion</a></p>";
$mail = new Mail();
$mail->setFrom(SITEEMAIL);
$mail->addAddress($to);
$mail->subject($subject);
$mail->body($body);
$mail->send();
//redirect to index page
header('Location: register.php?action=joined');
exit;
//else catch the exception and show the error.
} catch(PDOException $e) {
$error[] = $e->getMessage();
}
}
?>
register.php和ajax验证
<script type="text/javascript">
$(document).ready(function(){
$("#fullname").keyup(function(event){
event.preventDefault();
var fullname = $(this).val().trim();
if(fullname.length >= 1){
$.ajax({
url: 'registercontrol.php',
type: 'POST',
data: {fullname:fullname},
success: function(response){
// Show response
$("#vfullname").html(response);
}
});
}else{
$("#vfullname").html("");
}
});
$('#submit').click(function(event){
event.preventDefault();
var formData = $('#register-form').serialize();
console.log(formData);
$.ajax({
url: 'registercontrol.php',
method: 'post',
data: formData + '&submit=register'
}).done(function(result){
$('.hidden').show();
$('#result').html(result);
})
});
});
</script>
<?php
//if action is joined show sucess
if(isset($_GET['action']) && $_GET['action'] == 'joined'){
echo '<div>
<p>Registration is successful, please check your email to activate your account.</p>
</div>';
} else { ?>
<div>
<h1>Create an Account!</h1>
</div>
<form id="register-form" role="form" method="post" action="registercontrol.php" autocomplete="off">
<input type="text" name="fullname" id="fullname" placeholder="Your name" value="" required>
<div id="vfullname"></div>
<input type="email" name="email" id="email" placeholder="Your Email" value="" required>
<input id="submit" type="submit" name="submit" value="Create Account">
<p class="hidden">Please check everything.</p>
<div id="result"></div>
</form>
<?php } ?>
检查done
块并使用JavaScript执行重定向:
$('#submit').click(function(event){
event.preventDefault();
var formData = $('#register-form').serialize();
console.log(formData);
$.ajax({
url: 'registercontrol.php',
method: 'post',
data: formData + '&submit=register'
}).done(function(result){
var url_to_redirect = "register.php?action=joined";
window.location.href = url_to_redirect;
})
});