【发布时间】:2016-04-27 04:18:17
【问题描述】:
我的网站上有登录功能(使用 MySQL 和 PHP)。
我遇到的问题是我在不应该出现的错误。
当用户登录时,我希望他们的用户名显示在导航栏中,使用我称为 user_data 的变量,但是,当我尝试运行代码时,我得到 error:
注意:未定义变量:第 31 行 C:\xampp\htdocs\exampledirectory\includes\prefs\header.php 中的 user_data。
现在,我检查了我所有的代码,一切似乎都是正确的......它只是不想工作!
我的index.php 中包含header.php 或导航栏,如下所示:
INDEX.php:
<?php
require_once 'core/init.php'; <!-- notice the init file !-->
?>
<html>
<?php
include 'includes/prefs/header.php';
?>
<!-- body of html !-->
</html>
这是我的HEADER.php:
<li style="cursor:pointer;">
<?php
if(!logged_in()){
?>
<a>USER</a>
<ul>
<li><a href="./login">SIGN IN</a></li>
<li><a href="./register">REGISTER</a></li>
</ul>
<?php
}else{
?>
<a><?php echo $user_data['username']; ?></a> <!-- this is line 31 !-->
<ul>
<li><a href="./profile">PROFILE</a></li>
<li><a href="./settings">SETTINGS</a></li>
</ul>
<?php
}
?>
</li>
现在,一旦用户从我的登录页面上的表单登录,user_data 变量就会发挥作用,该表单会将所有数据重定向到重定向文件夹中的另一个登录页面
LOGIN.php:
<form action="./redir/login" method="post">
<input type="text" class="input-style" placeholder="Username" name="username"><br><br>
<input type="password" class="input-style" placeholder="Password" name="password"><br><br>
<input type="submit" value="Login"><br>
</form>
REDIR/LOGIN.php:
<?php
include 'core/init.php';
if (empty($_POST) === false){
$username = $_POST['username'];
$password = $_POST['password'];
if (empty($username) === true) {
$errors[] = 'That user does not exist.';
} else if (user_exists($username) === false) {
$errors[] = 'That user does not exist.';
} else if (user_active($username) === false) {
$errors[] = 'This user is currently inactive. If you would like to know more, please click <a href="./help/9141320">here.';
} else {
$login = login($username, $password);
if ($login === false) {
$errors[] = 'The username or password you entered are incorrect.';
} else {
// query if credentials = true return (home)
$_SESSION['user_id'] = $login;
header('Location: ../index');
exit();
}
}
} else {
header('Location: index.php');
}
if (empty($errors) === false) {
?>
<!-- error html !-->
所有登录数据都转到我的users.php上的登录功能
USERS.php:
function user_data($user_id) {
$data = array();
$user_id = (int)$user_id;
$func_num_args = func_num_args();
$func_get_args = func_get_args();
if ($func_num_args > 1) {
unset($func_get_args[0]);
$fields = '`' . implode('`, `', $func_get_args) . '`';
$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));
return $data;
}
}
function logged_in() {
return (isset($_SESSION['user_id'])) ? true : false;
}
/* exists */
function user_exists($username){
$username = sanitize($username);
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
return (mysql_result($query, 0) == 1) ? true : false;
}
function email_exists($email){
$email = sanitize($email);
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `email` = '$email'");
return (mysql_result($query, 0) == 1) ? true : false;
}
/* active */
function user_active($username){
$username = sanitize($username);
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `active` = 1");
return (mysql_result($query, 0) == 1) ? true : false;
}
/* misc login */
function user_id_from_username($username) {
$username = sanitize($username);
return mysql_result(mysql_query("SELECT (`user_id`) FROM `users` WHERE `username` = '$username'"), 0, 'user_id');
}
function user_id_from_email($email) {
$email = sanitize($email);
return mysql_result(mysql_query("SELECT (`user_id`) FROM `users` WHERE `email` = '$email'"), 0, 'user_id');
}
function login($username, $password) {
$user_id = user_id_from_username($username);
$username = sanitize($username);
$password = md5($password);
return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) == 1) ? $user_id : false;
}
?>
如果登录详细信息正确,则返回 user_id,否则返回 false。
最后这是我的 INIT.php 文件:
<?php
session_start();
//error_reporting(0);
require 'database/connect.php';
require 'functions/general.php';
require 'functions/users.php';
$current_file = explode('/', $_SERVER['SCRIPT_NAME']);
$current_file = end($current_file);
if (logged_in() === true) {
$session_user_id = $_SESSION['user_id'];
$user_data = user_data($session_user_id, 'username', 'password', 'email', 'first_name', 'last_name', 'CCNo', 'desc', 'avatar', 'type', 'group', 'active');
$errors = array();
?>
INIT.php 是从user_data 函数创建user_data 变量的原因(如果有意义的话)。
我希望我已经解释得足够好,以便人们理解并帮助我。
基本大纲是:我希望我的user_data 变量函数能够工作(这样我就可以用它来回显信息)。
干杯
【问题讨论】:
-
代码是否完全一样?整个过程都存在语法错误。
-
您在
if(logged_in() === true)的else中有echo $user_data['username'];。因此,当用户未登录时,您尝试使用$user_data。 -
@bmcculley 是的,大多数情况下,我遗漏了一些我知道无关紧要的事情。但是你能告诉我这些错误吗?谢谢:)
-
@Sean 啊是的,我这样做是因为当我将它设置为
false时,它什么也没做。相反,无论我是否登录,它都将只是“用户” -
@FuzzyTree 确定!检查我刚刚在
header.php区域所做的编辑:)