簡體   English   中英

在php中包含數據庫連接文件

[英]Including database connection file in php

我正在為我的網站在php中創建一個簡單的登錄功能,現在我已經嘗試了所有內容並且它運行良好,然后我決定通過將所有功能組合在一個文件,我的數據庫設置和另一個文件中的連接以及我的組合來重新組織我的文件另一個文件中的會話配置(用於在我的localhost上運行)。

我這樣做的目的只是為了讓我的代碼在將來保持整潔有序,易於理解。

這是我的登錄頁面:

<?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 . ']');
    }
?>

正如您所看到的,我在login.php中包含了dbconnection.php文件,但每當我嘗試調用authenticate()函數時,都會返回此錯誤:

注意:未定義的變量:第27行的C:\\ xampp \\ htdocs \\ xxxxxxxx \\ login.php中的db

致命錯誤:在第27行的C:\\ xampp \\ htdocs \\ xxxxxxx \\ login.php中調用非對象的成員函數query()

現在我對此有點困惑,因為我在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();
    ...

添加global $db; 到驗證功能的開頭。

但是,我強烈建議您了解PDO: http//wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

您的代碼目前不安全

檢查您的數據庫是否已連接。 使用這樣的連接代碼:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

這是你可以用phpmyadmin連接的php代碼。

<?php
$hostname_db = "your host name";
$userid_db = "database name";
$userpwd_db = "database password";
$db_name = "database name";
$conn = mysqli_connect($hostname_db,$userid_db,$userpwd_db,$db_name);
if(!$conn)
{
    $conn = mysqli_connect($hostname_db,$userid_db,$userpwd_db,$db_name);
    if(!$conn)
    {
        echo "Database connection failed...";
    }
}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM