2

PHP と SQL は初めてですが、Web アプリケーション用のログイン スクリプトを作成しようとしています。どういうわけか私は立ち往生しています。ユーザー名またはパスワード フィールドが空の場合はアラートが表示されますが、両方が正しいか正しくない場合もアラートは表示されません。

ブラウザー (Chrome) で Web サイトを開いてページを調べると、次のようになります。

「POST ../App/auth.php 500 (内部サーバー エラー)」

サーバーから error.log ファイルを開くと、次のようになります。

「PHP 致命的なエラー: 24 行目の ../App/class.manageUsers.php の非オブジェクトに対するメンバー関数 query() の呼び出し、リファラー: ../App/login.php」

class.manageUsers.php の 24 行目は次のとおりです。

$query = $this->link->query("SELECT * FROM users WHERE username = '$username' AND
password = '$password' LIMIT 1");

class.manageUsers.php:

<?php

include_once('class.database.php');

class ManageUsers{

    protected $link;

    function __construct(){
        $db_conn = new ManageDatabase;
        $this->link = $db_conn->connect();
        return $this->link;
    }
    function addUsers($username,$firstname,$lastname,$email,$password,$user_level){
        $query = $this->link->prepare("INSERT INTO users (username,firstname,lastname,email,password,user_level)
            VALUES (?,?,?,?,?,?)
        ");
        $values = array($username,$firstname,$lastname,$email,$password,$user_level);
        $query->execute($values);
        $rowCount = $query->rowCount();
        return $rowCount;
    }
    function loginUsers($username,$password){
        $query = $this->link->query("SELECT * FROM users WHERE username = '$username' AND password = '$password' LIMIT 1");
        $rowCount = $query->rowCount();
        return $rowCount;           
    }
    function listUsers($user_id = null){
        if(isset($user_id))
        {
        $query = $this->link->query("SELECT * FROM users WHERE id = '$user_id' LIMIT 1");
        }
        else
        {
        $query = $this->link->query("SELECT * FROM users ORDER BY id DESC");
        }
        $rowCount = $query->rowCount();
        if($rowCount >= 1)
        {
            $result = $query->fetchAll();
        }
        else
        {
            $result = 0;
        }
        return $result;
    }

    function editUsers($user_id,$param){
        foreach ($param as $key => $value)
        {
        $query = $this->link->query("UPDATE users SET $key = '$value' WHERE id = '$user_id' LIMIT 1");
        }
        $rowCount = $query->rowCount();
        return $rowCount;
    }

    function deleteUsers($user_id){
        $query = $this->link->query("DELETE FROM users WHERE id = '$user_id' LIMIT 1");
        $rowCount = $query->rowCount();
        return $rowCount;
    }

}

?>

class.database.php:

<?php

class ManageDatabase{

    protected $db_conn;
    protected $db_host = 'localhost';
    protected $db_name = 'jqueryMobile';
    protected $db_user = 'root';
    protected $db_pass = '';

    function connect(){
        try{
            $this->db_conn = new PDO("mySQL:host=$this->db_host;dbname=$this->db_name",$this->db_user,$this->db_pass);
            return $this->db_conn;
        }
        catch(PDOexception $e){
            return $e->getMessage();
        }
    }

}
?>

誰かが間違っていると思われる場所を見つけてくれることを願っています。ありがとう。

4

1 に答える 1

0

私が見る限り、エラーの直接の理由は空の「リンク」プロパティです。db への接続時に dbmanager クラスが失敗したようです。これにより、クエリ メソッドを呼び出せない理由が説明されます。

于 2012-10-30T20:03:01.197 に答える