2017-10-10 156 views
1

试图创建我的server.php脚本,所以everythning很好,直到现在。我想阻止表单重新提交,并将header('location: index.php');添加到我的脚本中。然后我遇到了这个问题:ERR_TOO_MANY_REDIRECTS。而且你们许多人已经了解我的数据库里充满了垃圾。所以,这里是我的代码:错误太多重定向

<?php 

$username = $email = $password = ""; 
$usernameErr = $emailErr = $passwordErr = ""; 
$servername = 'localhost'; 
$serveruser = 'root'; 
$serverpassword = 'root'; 
$db = 'example'; 

$conn = new mysqli($servername, $serveruser, $serverpassword, $db); 

if($conn->connect_error){ 
    die("Connection failed: " . $conn->connect_error); 
} 

if(isset($_POST['register'])) { 
    $username = mysqli_real_escape_string($conn,$_POST['username']); 
    $email = mysqli_real_escape_string($conn,$_POST['email']); 
    $password = mysqli_real_escape_string($conn,$_POST['password']); 

    if(empty($username)) { 
     $usernameErr = "Username is required"; 
    } else { 
    $username = test_input($_POST["username"]); 

    if(!preg_match("/^[a-zA-z ]*$/", $username)){ 
     $usernameErr = "Only letters and whitespaces allowed"; 
    } 

    } 

    if(empty($email)) { 
     $emailErr = "Email is required"; 
    } else { 
    $email = test_input($_POST["email"]); 

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $emailErr = "Wrong email format"; 
    } 

    } 

    if(empty($password)) { 
     $passwordErr = "Password required"; 
    } else { 
    $password = test_input($_POST["password"]); 
     } 
} 

if ($usernameErr == "" && $emailErr == "" && $passwordErr == "") { 
    $sql = "INSERT INTO users (username, email, password) 
    VALUES('$username','$email','$password')"; 

    if($conn->query($sql) === TRUE) { 
    } else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

    header("location: index.php"); 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = htmlspecialchars($data); 
    $data = stripslashes($data); 
    return $data; 
} 

?> 
+1

是您粘贴index.php的代码吗? – flauntster

+1

是的,就像@flauntster说的那样,如果你的页面在index.php中使用上面的代码,那么它会重定向到同一页面并导致问题 –

+0

伙计,我也尝试了不同的url,那并没有太大的作用 – FeelsBadMan

回答

0

为了防止内

if(isset($_POST['register'])) { //.................} 

TOO MANY重定向把这个代码

if ($usernameErr == "" && $emailErr == "" && $passwordErr == "") { 
$sql = "INSERT INTO users (username, email, password) 
VALUES('$username','$email','$password')"; 

if($conn->query($sql) === TRUE) { 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

header("location: index.php"); 

}

检查错误

并防止再次提交表单的使用后此块在这个问题上接受的答案

Preventing form resubmission

+0

MAN你是王这里,非常感谢。谢谢你们如此快速的回应。祝你好运 – FeelsBadMan

0

你可以做情侣的方式来阻止这样的:

1)你可以写任何的这些,unset($_POST['register']);$_POST = array();只是header('location:index.php');之前,所以它不会通过if(isset($_POST['register']))条件,所以它不会无限循环。

2)或者在标题中使用如下所示的完整URL:header("location: mydomain.com/index.php");它也会停止无限循环。

+0

还没有想法m8?我通过interner进行了大约2小时的冲浪和0进度...... – FeelsBadMan

+0

@FeelsBadMan,我没有注意到你已经在'if'(isset($ _ POST ['register']))'外面写了'header'代码。那是罪魁祸首。 :D –

+0

嘿,你能告诉我这段代码干了什么吗,如果我删除它,用户的数据将不会保存在数据库中。此代码:'if($ conn-> query($ sql)=== TRUE)else else { echo“Error:”。 $ sql。 “
”。 $ conn->的错误; }' – FeelsBadMan

相关问题