我正在用 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/