如果用户名/电子邮件错误,PHP将不执行任何操作

时间:2019-03-11 18:59:24

标签: php mysql login

我正在创建一个登录系统。一切正常,但是当我在不在数据库中的登录名中使用电子邮件(用户名)时,它将转到带有文件名的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();
}

1 个答案:

答案 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 输入机制提供给脚本,  因此可以由远程用户修改,并且不能被信任。因此,应进行适当的验证和消毒 在前端和后端都完成了。

see php manual warnings

最后, 如果上述建议中的任何一项都不适合您,那么您还可以上传所有表单字段,我将为您提供帮助。谢谢