Php 错误:重定向太多
正在尝试创建我的server.php脚本,所以一切都很好,直到现在。我想阻止表单重新提交,并添加了Php 错误:重定向太多,php,http,Php,Http,正在尝试创建我的server.php脚本,所以一切都很好,直到现在。我想阻止表单重新提交,并添加了标题('location:index.php')到我的脚本。然后我遇到了一个问题:错误太多的重定向。你们中的很多人都知道我的数据库里全是垃圾。这是我的代码: <?php $username = $email = $password = ""; $usernameErr = $emailErr = $passwordErr = ""; $servername = 'localhost'; $s
标题('location:index.php')代码>到我的脚本。然后我遇到了一个问题:错误太多的重定向。你们中的很多人都知道我的数据库里全是垃圾。这是我的代码:
<?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) 您可以编写以下任意一项,unset($\u POST['register'])
或$\u POST=array()
就在标题('location:index.php')之前代码>所以它不会通过if(isset($\u POST['register'])
条件,所以它不会进入无限循环
2) 或者在标题中使用完整的URL,如下所示:header(“location:mydomain.com/index.php”)代码>它也将停止无限循环。为了防止太多重定向,请放入此代码
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");
检查错误后,此块将被删除
为防止再次提交表格,请使用此问题的公认答案
是您粘贴index.php的代码吗?是的,正如@flauntster所说,如果您的页面在index.php中使用上述代码,那么它将重定向到同一页面并导致问题,伙计们,我也尝试了不同的url,这不行much@FeelsBadMan,你试过我的建议吗?是的,m8,我试过了,但仍然不起作用?我在interner上浏览了大约2个小时,0个进度…@FeelsBadMan,我没有注意到你在标题之外写了if(isset($\u POST['register'))
。这就是罪魁祸首DHey,你能告诉我这段代码的作用吗?如果我删除它,用户的数据将不会保存在数据库中。此代码:`if($conn->query($sql)===TRUE){}else{echo“Error:$sql.”
“$conn->Error;}`您在if
条件中编写的句子:$conn->query($sql)
将执行查询,如果查询失败,它将返回FALSE
,因此您的if
部分将无法执行。我知道,但是它做什么呢???如果我删除“如果”我的用户数据不会保存在DBMAN中,你就是这里的国王,非常感谢。谢谢你们这么快的回复。祝你好运
if(isset($_POST['register'])) { //.................}