0

我做了一个登录功能,但我得到一个内部服务器错误。我已经检查了功能,但我没有看到问题。

如果我使用这个:

function login($username, $password) {
    if (!isset($username) || !isset($password)) {
        return false;
    }
    if ($this->db->selectOne('r_users', array('username' => trim($username), 'password' => md5(trim($password))))) {
            $_SESSION['username'] = $_POST['username'];
            $_SESSION["ipaddr"] = $_SERVER["REMOTE_ADDR"];

        return true;
    } else {
        return false;
    }
}

我可以登录网站

但我想扩展它以从数据库中获取更多信息以创建会话,所以我创建了这个:

function login($username, $password) {
    if (!isset($username) || !isset($password)) {
        return false;
    }
    if ($this->db->selectOne('r_users', array('username' => trim($username), 'password' => md5(trim($password))))) {
            $data = array();
            $ps = $this->db->prepare('SELECT * FROM `r_users` WHERE `username` = :username');
            $ps->bindParam(':username', $_POST['username'], PDO::PARAM_STR);
            $ps->execute();
            $result = $ps->fetchAll(PDO::FETCH_ASSOC);
            foreach($result as $row) {
                    $data[] = $row;
            }
            $_SESSION['username'] = $data['username'];
            $_SESSION["ipaddr"] = $_SERVER["REMOTE_ADDR"];

        return true;
    } else {
        return false;
    }
}

但这给了我一个内部服务器错误( 500 ),但我看不出问题出在哪里。有人有想法吗?

该站点建立在 smarty/slim 框架基础上,我通过 jquery/php 形式调用此函数

*更新:将 FROM 添加到查询中,请参阅解决方案 1

4

3 回答 3

1

我发现了问题。

因为我没有看到任何错误,所以我发现在更改查询后(我错过了 Yogesh Suthar 所说的 FROM),我发现 fetch 选项无法正常工作。所以我将功能更改为:

function login($username, $password) {
    if (!isset($username) || !isset($password)) {
        return false;
    }
    if ($this->db->selectOne('r_users', array('username' => trim($username), 'password' => md5(trim($password))))) {
            $ps = $this->db->prepare('SELECT * FROM `r_users` WHERE `username` = :username');
            $ps->bindParam(':username', $_POST['username'], PDO::PARAM_STR);
            **$ps->setFetchMode(PDO::FETCH_ASSOC);**
            $ps->execute();
            **$data = $ps->fetch();**

            $_SESSION['username'] = $data['username'];
            $_SESSION["ipaddr"] = $_SERVER["REMOTE_ADDR"];

        return true;
    } else {
        return false;
    }
}

我更改了两个突出显示的项目。

在此之后,登录功能运行良好。

谢谢你们帮助我。

于 2013-03-01T20:37:01.053 回答
0

你忘from了查询

$ps = $this->db->prepare('SELECT * FROM `r_users` WHERE `username` = :username');
                                   ^ here is problem
于 2013-03-01T09:14:33.900 回答
0

internal server error ( 500 )意思是“查看服务器错误日志”。
因此,您必须找到错误日志并阅读错误消息。

于 2013-03-01T09:43:56.103 回答