我试图让你重定向到成功注册后的页面,但每当我点击注册按钮,我立即重定向,即使所有的输入是空的
if(isset($_POST["registration"])){
if(!empty($_POST["gender"])
and !empty($_POST["username"])
and !strlen($_POST["username"]) < 3
and !empty($_POST["email"])
and !email($_POST["email"])
and !empty($_POST["emailver"])
and !verification($_POST["email"],$_POST["emailver"])
and !empty($_POST["password"])
and !strlen($_POST["password"]) < 8
and strlen($_POST["password"]) < 25
and checkUppercase($_POST["password"])
and checkLowercase($_POST["password"])
and checkNumber($_POST["password"])
and !empty($_POST["passwordver"])
and !verification($_POST["password"],$_POST["passwordver"])){
if(addgamer($db,$_SESSION["gender"],$_SESSION["username"],$_SESSION["email"],$_POST["password"]) === TRUE){
$url = 'succesfull.html';
header($url);
}
}
}
addgamers的函数
function addgamer($db,$gender,$username,$email,$password){
$sql = "INSERT INTO gamers (`gender`, `username`, `email`, `password`) VALUES('$gender','$username','$email','$password')";
$db -> exec($sql);
if ($db->query($sql) === TRUE) {
$GamerId = $db -> lastInsertId();
$_SESSION['GamerId'] = $GamerId;
return true;
} else {
return false;
}
}
我在这里找到了一些答案,但是所有的答案都是一样的,我没有办法解决这个问题。
GOTO($url);
或
header('location: $url');
或
if(addgamer($db,$_SESSION["gender"],$_SESSION["username"],$_SESSION["email"],$_SESSION["password"]) === FALSE ){
die();
}else{
$url = 'successful.php';
header($url);
}
也尝试过jQuery
echo "<script>window.location = '$url'</script>";
每次点击注册提交按钮,您都会被重定向到成功的页面,但这应该不会发生,直到所有内容都正确填写,如上述代码所示。
正如你所看到的,我想先用php解决这个问题
最好在提交表单之前进行验证。正如@Nicolas D提到的,你还应该知道表单操作是你直接指向的页面。
您可以使用action=""
或action="<?php echo $_SERVER['PHP_SELF']; ?>"
将其设置为当前页面
最后一个可能会有漏洞,你可以使用"htmlentities($_SERVER['PHP_SELF'])"
代替。
您对PHP有误解。如果您的表单使用提交表单,它将自动发送到目标php页面。如果您不想发布到一个新的页面,并且仍然验证您的数据,那么您必须使用jquery中的ajax: http://api.jquery.com/jquery.post/。这样,您就可以捕获数据,而不会出现意外的重定向。在ajax调用期间,一旦php代码验证了所有表单,就可以在jquery中重定向回调函数。
希望这对你有帮助,我经历过这一步,我记得这是痛苦的