简体   繁体   English

无法使用正确的用户名和密码 php 和 myql 登录

[英]Unable to login with correct username and password php and myql

Hello every one i'm new to php.大家好,我是 php 新手。 I was just trying to create a multi users login system.我只是想创建一个多用户登录系统。 In the first approach i get what is required but whenever i try to login with wrong username or password.在第一种方法中,我得到了所需的内容,但是每当我尝试使用错误的用户名或密码登录时。 else statement echos multiple times. else 语句多次回显。 but in the second approach i get the last statement executed every time i try to login even with correct username and password.但是在第二种方法中,即使使用正确的用户名和密码,每次我尝试登录时也会执行最后一条语句。

This is the first approach这是第一种方法

    if(isset($_POST['signin'])){
        $username = $_POST['username'];
        $password = $_POST['password'];
        $query = "SELECT * from `users`;";
        if(count(fetchAll($query))>0){
            foreach(fetchAll($query) as $row){
              if($username==$row["username"]&&$password==$row["password"]&&$row["type"]=="admin"){
                  echo  "Admin";
              }elseif($username==$row["username"]&&$password==$row["password"]&&$row["type"]=="teacher"){
                echo "Teacher";
            }elseif($username==$row["username"]&&$password==$row["password"]&&$row["type"]=="student"){
                echo  "Student";
             }else{
                  echo "Username or password not found!";
              }
            }
        }else{
            echo "<script>alert('Unknown Error')</script>";

        }
    }

and this is second one这是第二个

if(isset($_POST['signin'])){
            $username = $_POST['username'];
            $password = $_POST['password'];
            $admin_query = "SELECT * from `users` where username = '$username' and password = '$password' and type = 'admin';";
            $teacher_query = "SELECT * from `users` where username = '$username' and password = '$password' and type = 'teacher';";
            $student_query = "SELECT * from `users` where username = '$username' and password = '$password' and type = 'student';";
            if(performQuery($admin_query==1)){
                echo "Admin";

            }elseif(performQuery($teacher_query==1)){
                echo "Teacher";

            }elseif(performQuery($student_query==1)){
                echo "Student";

            }else{
                echo "No user found ";
            }
}

The performQuery function is performQuery 函数是

function performQuery($query){
    $con = new PDO(DBINFO,DBUSER,DBPASS);
    $stmt = $con->prepare($query);
    if($stmt->execute()){
        return true;
    }else{
        return false;
    }
}
<?php
            $con = mysqli_connect('');// taking as your connection query

            $username = "whatever";//taking as user input
            $password = "Password";//taking as user input

            //By using direct data in SQL login query you are subject to SQL injection. Please Make sure to use prepared statements.

            $admin_query = "SELECT * from `users` where username = '$username' and password = '$password' and type = 'admin';";
            $teacher_query = "SELECT * from `users` where username = '$username' and password = '$password' and type = 'teacher';";
            $student_query = "SELECT * from `users` where username = '$username' and password = '$password' and type = 'student';";

            // by using oop approch
            if($con->query($admin_query)){
                echo "Admin";

            }elseif($con->query($teacher_query)){
                echo "Teacher";

            }elseif($con->query($student_query)){
                echo "Student";

            }else{
                echo "No user found ";
            }

            // by using procedural  approch
            if(mysqli_query($con,$admin_query)){
                echo "Admin";

            }elseif(mysqli_query($con,$teacher_query)){
                echo "Teacher";

            }elseif(mysqli_query($con,$student_query)){
                echo "Student";

            }else{
                echo "No user found ";
            }
?>

Note: Use a prepared statement to avoid SQL injection注意:使用预处理语句避免 SQL 注入

First, when you are using database query try to bind the parameters instead of concatenation to your query because it will lead to SQL Injection首先,当您使用数据库查询时,尝试绑定参数而不是连接到您的查询,因为这会导致SQL 注入

Now as your code state that your are passing boolean to your performQuery function instead of query现在,您的代码声明您将布尔值传递给performQuery函数而不是查询

performQuery($admin_query==1) will lead to performQuery(false) as $admin_query is not equal to 1. That's why your query is failing. performQuery($admin_query==1)将导致performQuery(false)因为$admin_query不等于 1。这就是您的查询失败的原因。

If you print the $query in your function you will find it out.如果您在函数中打印$query ,您会发现它。

So, you have to remove that check inside the param.因此,您必须在参数中删除该检查。 The code will be like this代码将是这样的

        if(performQuery($admin_query)){
            echo "Admin";

        }elseif(performQuery($teacher_query)){
            echo "Teacher";

        }elseif(performQuery($student_query)){
            echo "Student";

        }else{
            echo "No user found ";
        }


        function performQuery($query){
            try {    
                $con = new PDO(DBINFO,DBUSER,DBPASS);
                $stmt = $con->prepare($query);
                if($stmt->execute()){
                    if($stm->fetchColumn()){
                        return true;
                    }
                }else{
                   echo 'Error -> ';
                   var_dump($st->errorInfo());
                   echo '<br/>Query -> ';
                   var_dump($query);
                }
            catch(Exception $e) {
                echo 'Exception -> ';
                var_dump($e->getMessage());
                echo '<br/>Query -> ';
                var_dump($query);
            }
            return false;
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 PHP登录功能找不到正确的用户名和密码 - PHP login function not finding correct username and password 登录PHP脚本用户名和密码正确,但无法登录 - Login PHP script Username and password is correct, but won't login 使用用户名/密码登录PHP - PHP Login with Username/Password Cake php登录显示无效的用户名和密码(即使正确) - Cake php login says invalid username and password even when they are correct 用户名和密码不正确时页面空白-登录-PHP - Page blank while username and password are not correct - login - PHP 尽管用户名和密码正确,PHP和Javascript登录仍无法正常工作 - PHP and Javascript Login doesn't work despite correct username and password 即使字段正确,登录PHP仍会返回无效的用户名或密码? - Login PHP keeps returning invalid username or password even if the fields are correct? 登录页面:跨度文本错误不会出现在 PHP 提示的表格中,并且在给出正确的用户名和密码时无法继续 - Login Page: Span text error does not appear in table upon PHP prompt & Unable to progress when correct username and password given PHP的用户名/密码登录问题 - Username/Password Login Trouble with PHP 用户名和密码正确时无法登录 - cannot login when username and password are correct
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM