Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP PDO会话将我重定向到登录页面_Php_Mysql_Session_Pdo - Fatal编程技术网

PHP PDO会话将我重定向到登录页面

PHP PDO会话将我重定向到登录页面,php,mysql,session,pdo,Php,Mysql,Session,Pdo,我正在努力提高我的PHP技能。我来自PHP程序,使用PDO转向PHP,这将使我的web应用程序更加安全,以防止SQL注入或XSS攻击。我创建了一个工作正常的登录表单,用户可以输入电子邮件或用户名,然后输入密码以验证后端是否加密。我在注册表中使用密码\u hash()进行加密 下面是我登录PHP中验证用户身份的代码 <?php session_start(); $host = "localhost"; $username = "root"; $password = "

我正在努力提高我的PHP技能。我来自PHP程序,使用PDO转向PHP,这将使我的web应用程序更加安全,以防止SQL注入或XSS攻击。我创建了一个工作正常的登录表单,用户可以输入电子邮件或用户名,然后输入密码以验证后端是否加密。我在注册表中使用密码\u hash()进行加密

下面是我登录PHP中验证用户身份的代码

<?php  
 session_start();  
 $host = "localhost";  
 $username = "root";  
 $password = "";  
 $database = "test";  
 $message = "";  
 try  
 {  
      $connect = new PDO("mysql:host=$host; dbname=$database", $username, $password);  
      $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
      if(isset($_POST["login"]))  
      {  
           if(empty($_POST["username"]) || empty($_POST["password"]))  
           {  
                $message = '
                <script>
                sweetAlert("Incorrect username or password!", "Please try again.", "error");
                </script>;
                ';  
           }  
           else  
           {
                // User login authentication  
                $query = "SELECT * FROM users WHERE user_type = :user_type AND (username = :username OR email = :username) LIMIT 1";  
                $statement = $connect->prepare($query);  
                $statement->execute(  
                     array(  
                          'username'     =>     $_POST["username"],
                          'email'        =>     $_POST["username"],
                          'user_type'    => 'user'
                          // 'archive'      =>     1
                     )  
                );  
                $count = $statement->rowCount();

                // Administrator login authentication
                $query2 = "SELECT * FROM users WHERE user_type = :user_type AND (username = :username OR email = :username) LIMIT 1";  
                $statement2 = $connect->prepare($query2);  
                $statement2->execute(  
                     array(  
                          'username'     =>     $_POST["username"],
                          'email'        =>     $_POST["username"],
                          'user_type'    => 'admin'
                          // 'archive'      =>     1
                     )  
                );
                $count2 = $statement2->rowCount();

                if($count > 0)  
                {  
                     $result = $statement->fetch();

                    //check password
                    if (password_verify($_POST["password"], $result['password'])) {
                        $_SESSION["login_user"] = $_POST["username"];
                        exit(header("location:user/dashboard.php"));
                    } else {
                         $message = '
                          <script>
                          sweetAlert("Incorrect username or password!", "Please try again.", "error");
                          </script>;
                          '; 
                    } 
                }
                else if($count2 > 0)  
                {  
                     $result2 = $statement2->fetch();

                    //check password
                    if (password_verify($_POST["password"], $result2['password'])) {
                        $_SESSION["login_admin"] = $_POST["username"];
                        exit(header("location:admin/dashboard.php"));
                    } else {
                         $message = '
                          <script>
                          sweetAlert("Incorrect username or password!", "Please try again.", "error");
                          </script>;
                          '; 
                    }   
                }

                else  
                {  
                      $message = '
                      <script>
                      sweetAlert("Incorrect username or password!", "Please try again.", "error");
                      </script>;
                      ';  
                }  
           }  
      }  
 }  
 catch(PDOException $error)  
 {  
      $message = $error->getMessage();  
 }  
 ?>

我注意到您在SQL字符串中使用了“:user_check”作为参数,但在execute()函数的数组中使用了“:usercheck”作为索引。您需要在sql字符串和execute函数中的数组索引中使用相同的参数名。

我注意到您在sql字符串中使用了“:user\u check”作为参数,但在数组的execute()函数中使用“:usercheck”作为索引。您需要在sql字符串和execute函数中的数组索引中使用相同的参数名。

您可以尝试提高技能,但请记住,只有当且仅当您使用带有占位符值的准备好的语句,或者当您不能这样做时,对转义非常警惕时,PDO才能保护您免受SQL注入攻击。它不能保护您免受XSS或CSRF攻击,这些是与数据库无关的单独问题。请记住,编写自己的访问控制层并不容易,而且有很多机会会出现严重错误,因此,除非这纯粹是出于学术原因,当任何现代的同类产品都带有强大的内置功能时,不要编写自己的身份验证系统。你可能认为你做得对,但如果你去现场,你可能会发现你错过了什么。谢谢你的提示@tadman我已经开始学习Laravel,并研究了MVC架构和OOP的概念。然而,我想从我现在正在做的过程、OOP和PDO中掌握PHP的基础知识。谢谢你,顺便说一句!我会注意到这一点。别忘了,你可以在框架的上下文中学习基础知识,你可以深入研究代码,看看它是如何实现的,或者编写你自己的低级代码。最后,Laravel仍然是PHP,要有效地使用它,您需要了解PHP核心API。非常感谢!您可以尝试提高自己的技能,但请记住,只有在您使用带有占位符值的准备好的语句,或者在无法做到这一点的情况下,非常警惕地逃避事情时,PDO才能保护您免受SQL注入攻击。它不能保护您免受XSS或CSRF攻击,这些是与数据库无关的单独问题。请记住,编写自己的访问控制层并不容易,而且有很多机会会出现严重错误,因此,除非这纯粹是出于学术原因,当任何现代的同类产品都带有强大的内置功能时,不要编写自己的身份验证系统。你可能认为你做得对,但如果你去现场,你可能会发现你错过了什么。谢谢你的提示@tadman我已经开始学习Laravel,并研究了MVC架构和OOP的概念。然而,我想从我现在正在做的过程、OOP和PDO中掌握PHP的基础知识。谢谢你,顺便说一句!我会注意到这一点。别忘了,你可以在框架的上下文中学习基础知识,你可以深入研究代码,看看它是如何实现的,或者编写你自己的低级代码。最后,Laravel仍然是PHP,要有效地使用它,您需要了解PHP核心API。非常感谢!等等,等我回家后再试试,我会告诉你的。没想到会发生这样的事,它起作用了。我只是懒洋洋地看着我的代码,哈哈。顺便说一句,谢谢你的帮助!等等,等我回家后再试试,我会告诉你的。没想到会发生这样的事,它起作用了。我只是懒洋洋地看着我的代码,哈哈。顺便说一句,谢谢你的帮助!
<?php
    $dbhost     = "localhost";
    $dbname     = "test";
    $dbuser     = "root";
    $dbpass     = "";

    $conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    session_start();
    $user_check=$_SESSION['login_user'];

    $result = $conn->prepare("SELECT * FROM users WHERE email = :user_check OR username = :user_check");
    $result->execute(array(":usercheck"=>$user_check));

    $row = $result->fetch(PDO::FETCH_ASSOC);

    $login_session = $row['username'];
    $ln_session = $row['last_name'];
    $fn_session = $row['first_name'];
    $user_id =$row['id'];
    // $user_passwords = $row['password'];

    if(!isset($login_session))
        {
            $conn = null; 
            header('Location: ../index.php');
        }
?>