2

mysql を使用して PHP でログイン スクリプトを作成しています (はい、非推奨であることはわかっています) が、データベースから情報を取得する際に問題が発生しています。情報を入力する別のスクリプトがあり、それは完全にうまく機能しましたが、取得に関しては機能していないようです。

機能していないというのは、データベースから情報を取得するために使用している取得機能が、情報を正しく渡していないように見えるか、正しく渡されたものを使用していない可能性があるということです。いずれにせよ、問題は、電子メール、パスワード、ファーストネーム、ラストネームを含むタイプ User のオブジェクトを取得することになっていることです。

以下は、すべての作業を行う PHP ファイルの簡略化されたバージョンです。これを実行すると、保存されている名を表示する代わりに、「名は」と表示されるページだけが表示されます。

トラブルシューティングに関する限り:

  • get_firstname() 関数が動作することを確認しましたが、以下の場合は何も返されません。
  • また、他のゲッター関数についても同じことが当てはまることを確認しました。
  • 取得関数が「何か」を返すことを確認しました。ユーザーではなく文字列を返すようにしてテストしたところ、期待どおりに返され、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 を返さず、文字列を 1 回だけエスケープしてもエラーは解消されず、表示される「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

編集:

私が抱えている問題の原因を突き止めました。エラーは私のフォームにあります。なぜ機能しないのかはまだよくわかりませんが、何らかの理由で、送信時にフォームが変数を正しく POST していないようです。とにかく私のコードを見てくれてありがとう!

于 2013-01-14T05:04:55.387 に答える