Я довольно новичок в PHP. Почему я получаю внутреннюю ошибку на следующий битный коде:Получение HTTP-ошибки 500 по следующему коду
// DB connection (working)
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$arr = array(); // array for errors later used with http_build_query
Синтаксического Имя пользователя:
$username = test_input($_POST["myusername"]);
if (!preg_match("/^[a-zA-Z ]*$/", $username)) {
$arr["userErr"] = "1"; // Invalid username!
} else {
$sql = "SELECT * FROM $tbl_name WHERE username = '$username';";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$arr["userErr"] = "2"; // Username already registered!
} else {
$arr["userErr"] = "0"; // no problems
$ok++;
}
}
Синтаксического пароль:
$password = test_input($_POST["mypassword"]);
if (strlen($password) < 6) {
$arr["passErr"] = "1"; // Password is too short!
} else if (strlen($password) > 30) {
$arr["passErr"] = "2"; // Password it too long!
} else {
$arr["passErr"] = "0"; // no problems
$ok++;
}
Синтаксические электронная почта:
$email = test_input($_POST["myemail"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$arr["emailErr"] = "1"; // Invalid email format
} else {
$sql = "SELECT * FROM $tbl_name WHERE email = '$email';";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$arr["emailErr"] = "2"; // Email already registered!
} else {
$arr["emailErr"] = "0";
$ok++;
}
}
Если все хорошо, мы отправляем d ата в базу данных (если $ ок == 3) и отправить пользователя обратно в индекс с успешным сообщением (находится в index.php):
if($ok == 3) {
$sql = "INSERT INTO $tbl_name (username, password, email)
VALUES ('$username', '$password', '$email');";
$conn->query($sql);
header("location:index.php?" . "good=true");}
В противном случае, мы отправляем пользователю индексировать с сообщением об ошибке содержащий информацию для предупреждений:
} else {
header("location:index.php?" . http_build_query($arr));
}
}
Добавить '' 'в "месте: index.php?". http_build_query ($ arr)) ':' location: index.php? ' –
Ваш' SELECT * FROM $ tbl_name WHERE email = $ email' и 'SELECT * FROM $ tbl_name WHERE username = $ username;' являются недопустимыми и открываются для SQL инъекции. Строки должны быть кавычками в SQL. «Test_input» бесполезен в предотвращении инъекций SQL. – chris85
в любое время, когда вы получаете ошибку 5xx, ваша первая остановка должна быть журналом ошибок веб-сервера. –