0

だから私はログインシステムを持っていて、ログインしている人の名を取得したいのです。これが私のphpです:

function verify_Username_and_Pass($un, $pwd) {
        $query = "SELECT `First Name`, Username, Password
                FROM table
                WHERE Username = :un AND Password = :pwd
                LIMIT 1";

        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':un', $un);
        $stmt->bindParam(':pwd', $pwd);
        $stmt->execute();

        if ($stmt->rowCount() > 0) {
            // User exist
            return true;
            $stmt->close();
        }
        else {
            // User doesn't exist
            return false;
            $stmt->close();
        }
    }

これは、1つのプライベート変数$connを持つクラスの一部です。ログインは完全に機能しますが、私はその人の名を取得したいだけです。それ、どうやったら出来るの?

4

5 に答える 5

1

まず、データベースからパスワードを取得しないでください。これは非常に悪い習慣です。

次に、1行だけが返された場合にのみ、ユーザーを正しいものとして受け入れます。

最後bindColumnにあなたが探しているものです。

<?php
function verify_Username_and_Pass($un, $pwd) {
    $query = "SELECT `First Name`, Username
              FROM table
              WHERE Username = :un AND Password = :pwd";
    // Don't limit the query to only one, if there is a chance that you can
    // return multiple rows, either your code is incorrect, bad data in the database, etc...

    $stmt = $this->conn->prepare($query);
    $stmt->bindParam(':un', $un);
    $stmt->bindParam(':pwd', $pwd);
    $stmt->execute();

    // Only assume proper information if you ONLY return 1 row.
    // Something is wrong if you return more than one row...
    if ($stmt->rowCount() == 1) {
        // User exist
        $stmt->bindColumn('First Name', $firstName);
        $stmt->bindColumn('Username', $username);
        // You can now refer to the firstName and username variables.
        return true;
        $stmt->close();
    } else {
        // User doesn't exist
        return false;
        $stmt->close();
    }
}
?>

それはあなたのために働くはずです。

于 2012-10-02T17:48:12.580 に答える
0

First Nameクエリでのみ選択するには、この行を変更するだけです。

 $query = "SELECT `First Name`, Username, Password
            FROM table
            WHERE Username = :un AND Password = :pwd
            LIMIT 1";` 
     to 

 $query = "SELECT `First Name`
            FROM table
            WHERE Username = :un AND Password = :pwd
            LIMIT 1";`
于 2012-10-02T17:29:35.523 に答える
0

クエリステートメントを変更するだけですか?

    $query = "SELECT `First Name`
            FROM table 
            WHERE Username = :un AND Password = :pwd 
            LIMIT 1"; 

それがエラーをスローする場合は、dbトランザクションを管理するためにクラスが行っていることをもっと表示する必要があります

于 2012-10-02T17:26:56.357 に答える
0

以下のように結果をバインドする必要があります

    if ($stmt->rowCount() > 0) {
        $stmt->bind_result($fname, $uname, $pwd);
        $stmt->fetch()
        echo $fname // here you get firsname

        // either you can return this $fname or store into session variable for further

        // User exist
        return true;
        $stmt->close();
    }
    else {
        // User doesn't exist
        return false;
        $stmt->close();
    }
于 2012-10-02T17:36:39.033 に答える
0

trueを返すセクションでは、代わりに実際のユーザーデータを返すことができます(データを含む配列はとにかくtrueと評価されます)。

警告の言葉、あなたはハッシュされたパスワードを使うべきです。パスワードをプレーンに保存しないでください。

于 2012-10-02T17:37:16.747 に答える