我正在创建一个登录系统。一切正常,但是当我在不在数据库中的登录名中使用电子邮件(用户名)时,它将转到带有文件名的URL,然后仅是表单数据(电子邮件和密码)。我需要设置标题错误,以便我可以说登录失败。有人看到问题了吗?
<?php
ob_start();
if (isset($_REQUEST['password'])) {
require 'connect.php';
$password = $_REQUEST['password'];
$mail = $_REQUEST['email'];
if (empty($mail) || empty($password)) {
header('location: ../login.php?error=empty');
exit();
} else {
$sql = "SELECT * FROM account WHERE email = ?;";
$stmt = mysqli_stmt_init($connect);
if (!mysqli_stmt_prepare($stmt, $sql)) {
header("Location: ../login.php?error=sqlError");
exit();
} else {
mysqli_stmt_bind_param($stmt, "s", $mail);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($result)) {
$passwordCheck = password_verify($password, $row['wachtwoord']);
if ($passwordCheck == false) {
header("Location: ../login.php?error=passwordWrong");
exit();
} elseif ($passwordCheck == true) {
session_start();
$_SESSION['userId'] = $row['account_id'];
$_SESSION['username'] = $row['gebruikersnaam'];
header("Location: ../index.php?login=succes");
exit();
}
} else {
header("Location login.php?error=noUser");
exit();
}
}
}
} else {
header("Location: ../login.php?error=");
exit();
}
答案 0 :(得分:0)
由于您的登录表单正在运行。 我问你:
您的表单操作是使用get方法还是post方法?
请记住,当您使用GET方法将表单发送到后端(例如到php文件)时,所有表单参数都可以在url中看到。
因此您可以在下面进行检查。
1。)确保您的表单使用的是Post方法,例如method =“ POST”
2)。您为什么使用$_REQUEST[..]
。在PHP中
最好将$_POST
方法用于来自表单输入的http请求
类似
if(isset($_POST['submit'])){
require 'connect.php';
$password = $_POST['password'];
$mail = $_POST['email'];
OR
if (isset($_POST['password'])) {
require 'connect.php';
$password = $_POST['password'];
$mail = $_POST['email'];
注意:$_REQUEST
中的变量通过 GET,POST和COOKIE 输入机制提供给脚本,
因此可以由远程用户修改,并且不能被信任。因此,应进行适当的验证和消毒
在前端和后端都完成了。
最后, 如果上述建议中的任何一项都不适合您,那么您还可以上传所有表单字段,我将为您提供帮助。谢谢