php - 在php中包含数据库连接文件

标签 php authentication mysqli

我正在用 php 为我的网站创建一个简单的登录功能,现在我尝试了之前的所有方法并且运行良好,然后我决定通过将我的所有功能分组到一个文件中,将我的数据库设置和连接分组到另一个文件中来重新组织我的文件文件和我的 session 配置(用于在我的本地主机上运行)在另一个文件中。

我这样做的目的只是为了让我的代码保持干净、有条理并且便于我将来理解。

这是我的登录页面:

<?php
    include('session-config.php');
    include('dbconnection.php');
    include('functions.php');
    include('password_hash_lib/password.php');

    if (isset($_POST['data']))
    {
        $data = $_POST['data'];
        $auth = json_decode($data);
        $user_email = $auth->Email;
        $user_pass = $auth->Password;
        authenticate($user_email, $user_pass);
    }

    function authenticate($Email, $Password)
    {   
        $HashedPassword = password_hash($Password, PASSWORD_DEFAULT);        
        $sql = "SELECT * FROM app_users WHERE user_email='$Email'"; 
        $result = $db->query($sql);
        $User = $result->fetch_object();

        if ($User->user_email == '')
        {
            header("Location: login-page.html?msg=failed");
        }

        if (password_verify($Password, $User->user_password_hash))
        {
            $_SESSION["user_auth_details"] = $User->user_id . "+" . $User->user_email . '+' . $User->user_name . "+" . $User->user_display_image . "+" . $User->user_display_name;
            header("Location:" . $_SESSION['page_url']);
        }
         else {
            header("Location: login-page.html?msg=failed");

         }
    }

?>

这是我的数据库连接文件:

<?php
    $db = new mysqli("xxxxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxx", "xxxxxxxxxxxxx", "xxxxxxxxxxx");
    if($db->connect_errno > 0){
        die('Unable to connect to database [' . $db->connect_error . ']');
    }
?>

如您所见,我已将 dbconnection.php 文件包含在我的 login.php 中,但每当我尝试调用 authenticate() 函数时,都会返回此错误:

Notice: Undefined variable: db in C:\xampp\htdocs\xxxxxxxx\login.php on line 27

Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\xxxxxxx\login.php on line 27

现在我对此有点困惑,因为我在我的 dbconnection.php 文件中定义了 $db 并且我将该文件包含在我的 login.php 页面中,我希望它能工作还是我错了?

最佳答案

在函数中使用变量之前必须先将变量全局化。
只需在您的函数顶部添加这一行:

function authenticate($Email, $Password)
    {   
         global $db;
         $HashedPassword = password_hash($Password, PASSWORD_DEFAULT);        
         $sql = "SELECT * FROM app_users WHERE user_email='$Email'"; 
         $result = $db->query($sql);
         $User = $result->fetch_object();
    ...

关于php - 在php中包含数据库连接文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20787386/

相关文章:

php - 通过 HTML 表中的 while 循环显示数据库中的信息

php - 使用 MySQLi 时调用非对象的成员函数

php mysql 获取计数 WHERE BETWEEN AND

php - 限制 Laravel 5 加密长度

forms - 我可以使用css3制作这个银色渐变效果的登录表单吗?

php - 是否可以将 Python 与 php 一起使用

php - 不能使用函数返回值

iphone - 用于身份验证的 Cocoa 设计模式

php - 服务器负载 : mySQL vs PHP Functions

php - 如何正确删除重复项?