2

我正在使用 mysql 在 PHP 中编写登录脚本(是的,我知道它已被弃用),但是我在从数据库中检索信息时遇到了问题。我有另一个输入信息的脚本,效果很好,但是在检索时,它似乎不起作用。

当我说它不起作用时,我的意思是我用来从数据库中获取信息的检索函数似乎没有正确传递信息,或者我没有使用它正确传递的内容。无论哪种方式,问题是,它应该检索包含电子邮件、密码、名字和姓氏的 User 类型的对象。

下面是完成所有工作的 PHP 文件的简化版本,以及可能/可能不是问题的检索函数。当我运行它时,我得到的只是一个页面,上面写着“名字是”,仅此而已,而不是显示存储的名字。

至于故障排除:

  • 我已经确认 get_firstname() 函数有效,但在以下情况下它不会返回任何内容。
  • 我还确认我的其他 getter 函数也是如此。
  • 我已经确认检索功能正在返回“某物”。我通过让它返回一个字符串而不是一个用户来进行测试,它按预期返回,并且 PHP 文件能够使用它。
  • 我已经确认数据库确实已经存储了我要求的信息。
  • 我已经运行了一个查询,直接在检索函数中询问完全相同的内容,并让它返回我想要的内容。

这是代码:

<?php
include_once '/home/Databases/User.php';
include_once '/home/Databases/dbUser.php';
include_once '/home/Databases/dbInfo.php';
connect();

$email = mysql_real_escape_string($_GET['email']);
$password = mysql_real_escape_string($_GET['password']);
$rememberme = mysql_real_escape_string($_GET['remember']);

// does this user exist?
$confirm = retrieve_dbUserByEmail($email);
$name = $confirm->get_firstname();

// if they do exist
if($confirm != false) {
    echo "First name is ".$name;
}

// if user doesn't exist
else {
    header('Location: index.php?login=nonexistant');
    exit();
}
?>

这是 retrieve_dbUserByEmail 函数:

function retrieve_dbUserByEmail($email){
    connect();
    $email = mysql_real_escape_string($email);
    $query = "SELECT * FROM dbUser WHERE email = '".$email."' LIMIT 1";
    $result = mysql_query($query);
    if ($result==null ) {
       mysql_close();
       return false;
    }
    $result_row = mysql_fetch_assoc($result);
    $user = new User($result_row['id'], $result_row['email'], $result_row['password'], $result_row['firstname'],$result_row['lastname']);
    mysql_close();
    return $user;
}

要回答一些已经提出的问题,retrieve 函数不会返回 false,只转义字符串一次并不能消除错误,并且看到的“connect()”函数成功连接到 SQL 服务器(已验证)。另外,如果它有用(尽管我无法想象为什么),我将在下面摆出我的 User 对象类。

<?php
class User {
    private $id;            // Unique User ID
    private $email;         // User Email
    private $password;      // Password
    private $firstname;     // First Name
    private $lastname;      // Last Name

    //Constructor Function
    function __construct($id, $email, $password, $firstname, $lastname) {
        $this->id = $id;
        $this->email = $email;
        $this->password = $password;
        $this->firstname = $firstname;
        $this->lastname = $lastname;
    }

    //Getter Functions
    function get_id() {
        return $this->id;
    }
    function get_email() {
        return $this->email;
    }
    function get_password() {
        return $this->password;
    }
    function get_firstname() {
        return $this->firstname;
    }
    function get_lastname() {
        return $this->lastname;
    }
?>
4

2 回答 2

1

print_r($result_row)我会通过在 之前添加一个来调试它,new User(...)以确认你认为你得到的就是你实际得到的。

我也可能在再次print_r($confirm)返回后使用retrieve_dbUserByEmail()来确认您认为您得到的就是您实际得到的。

于 2013-01-14T02:23:34.540 回答
0

编辑:

我找出了我遇到的问题的原因;错误出现在我的表格中。我还没有完全弄清楚为什么它不起作用,但由于某种原因,表单似乎在提交时没有正确地发布变量。感谢所有查看我的代码的人!

于 2013-01-14T05:04:55.387 回答