我正在为我的网站在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页面中包含了该文件,我希望它能够工作或者我错了?
答案 0 :(得分:5)
在使用函数之前,必须对变量进行全球化 只需在函数顶部添加此行:
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();
...
答案 1 :(得分:4)
将global $db;
添加到身份验证功能的开头。
但是,我强烈建议您了解PDO:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers
您的代码目前不安全
答案 2 :(得分:1)
检查您的数据库是否已连接。使用这样的连接代码:
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>
答案 3 :(得分:0)
这是您可以与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...";
}
}
?>