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を見逃した)、フェッチオプションが正しく機能していないことがわかりました。だから私は関数を次のように変更しました:

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;
    }
}

強調表示された 2 つの項目が変更されました。

この後、ログイン機能はうまく機能しています。

私を助けてくれてありがとう。

于 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 に答える