如何显示php登录错误?

如何显示php登录错误?,php,Php,我正在开发一个简单的登录系统来提高我的知识,我想知道如果用户输入错误的密码或用户名,或者他没有填写任何字段,我如何显示警报消息,我已经开始做了一些事情,但我不确定这是否是正确的方式,我不知道如何在带有登录表单的页面中显示消息。非常感谢您的帮助:) 这是我的登录控制器 <?php /** * Nome File : ctrl_login.php * Descrizione: File che gestisce i dati inseriti nella pagina di login

我正在开发一个简单的登录系统来提高我的知识,我想知道如果用户输入错误的密码或用户名,或者他没有填写任何字段,我如何显示警报消息,我已经开始做了一些事情,但我不确定这是否是正确的方式,我不知道如何在带有登录表单的页面中显示消息。非常感谢您的帮助:)

这是我的登录控制器

<?php
/**
 * Nome File : ctrl_login.php
 * Descrizione: File che gestisce i dati inseriti nella pagina di login
 */

include('../config/konasi.php');
include('functions.php');

$user_name   = check_input($_POST['username']);
$user_password = check_input($_POST['userpassword']);

if (!$user_name || !$user_password) {
    echo "Non hai inserito username o password";
    exit();
}

if ($stmt = mysqli_prepare($conn, "SELECT user_password FROM users WHERE user_name= ? ")) {
    /* Bind parameters: s - string, b - blob, i - int, etc */
    $stmt -> bind_param("s", $user_name);
    /* Execute it */
    $stmt -> execute();
    /* Bind results */
    $stmt -> bind_result($result);
    /* Fetch the value */
    $stmt -> fetch();
    /* Close statement */
    $stmt -> close();
}

if(password_verify($user_password, $result)) {    
    echo "you are connected!";    
} else {        
    echo "Ops, wrong password";
}

mysqli_close($conn);

只需使用此功能检查登录:

function login_check($username,$pwd){

    if ($stmt = mysqli_prepare($conn, "SELECT COUNT(id) FROM `users` WHERE `user_name`=? AND `user_password`=? ")) {
        /* Bind parameters: s - string, b - blob, i - int, etc */
        $stmt -> bind_param("ss", $user_name,,$pwd);
        /* Execute it */
        $stmt -> execute();
        /* Bind results */
        $stmt -> bind_result($result);
        /* Fetch the value */
        $login_row=$stmt -> fetch();

        if($login_row[0]>=1) {
            echo "You are connected";
        } else {
            echo "Ops, wrong password";
        }

        /* Close statement */
        $stmt -> close();
    }   
}

其中一种方法是在控制器中设置会话变量,并将它们重定向到登录页面,然后在登录页面中显示它们

在登录页面和控制器上方放置以下行

session_start();
在您的登录表单页面中添加以下行

<p><?=$_SESSION['error_msg']?></p>

我希望这能有所帮助。

嗨,萨拉,非常感谢你的回答。我在一本php书中读到,我不应该在SELECT查询中使用变量来避免SQL注入。此外,如果我使用此功能,我是否可以在登录表单所在的页面中显示消息?这是一个不同于php控制器的文件。这里与OP代码的不同之处在于,OP似乎用php的密码散列来散列用户密码。因此正在检索一行并验证密码。那很好。这段代码看起来好像密码未被删除,或者您必须首先生成哈希。mysqli_stmt::fetch返回true、false或null。没有争吵。不知道你在那里做什么。或者使用mysql_stmt::bind_参数。因此,这个答案毫无用处。你有很多可能。在
ctrl\u login.php
上,您可以将用户重定向到表单登录,并在查询字符串中传递错误(如
your\u form\u page.php?errors=Non-hai inserito username o password
),然后在需要的地方显示消息。这是一个主要基于观点的问题,真的。选择最适合你的。再见,再见,非常感谢你的回答。我会试试看,然后告诉你;)grazieHi Reza非常感谢您的支持,我使用会话成功地传递了错误消息。现在,我想使用会话创建一个重定向,这样,如果用户是admin,将转到admin仪表板,如果是client,将转到client仪表板。我在数据库中创建了一个新表,并将其命名为user_role,在这里我可以设置int为1或0。您能帮我吗?在成功验证后。检查数据库中的用户角色。然后放入if(user=='admin')头(“location:admin.php”);else标题(“location:user.php”);
session_start();
<p><?=$_SESSION['error_msg']?></p>
$_SESSION['error_msg'] = 'Ops, wrong password';
header("location: link_to_login_form");
exit();