【问题标题】:Undefined Variable MySQL PHP未定义变量 MySQL PHP
【发布时间】: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 区域所做的编辑:)

标签: php mysql


【解决方案1】:

似乎 user_data 变量没有初始化。所以你需要在“header.php”文件中运行sql查询并初始化user_data变量。

【讨论】:

  • header.php 包含在 index.php 文件中,因此不需要它,因为在 index.php 中已经需要初始化文件
  • 但是您的查询变量没有被调用,因此这是错误。
【解决方案2】:

在您的 init.php 中,您仅在用户登录时才初始化 user_data。 根据你的 header.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 !-->

如果用户未登录,您是否希望显示登录/注册按钮,而不是相反的方式正确?

【讨论】:

  • 我已经解决了这个问题(在上面的评论中,你会看到)
  • 您能否编辑您的问题并应用您实际使用的代码,但您是否仍然遇到同样的错误?
  • @RalphMelham 我刚刚这样做了 :) 是的,我仍然遇到错误。看来我的login 功能不起作用,原因是它没有显示用户名 e.t.c。你觉得你能帮上忙吗?谢谢
  • @nerdtweak 当然,我可以帮助您排除故障并修复它。您是否收到特定错误?你怎么知道你的问题出在登录功能上?
  • 好吧,它实际上并没有输出错误,但是,当用户登录时,它应该显示用户名而不是“用户”。因此,实际的登录功能不起作用,否则,logged_in 将返回 user_id 而不是 false(如果有意义的话)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 2020-10-22
  • 2019-09-18
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
相关资源
最近更新 更多