0

なぜこれが機能しないのか理解できません。私は新しく、ただ学んでいます。

login.php

<?php

    include 'core/init.php';

    if   (empty($_POST) === false) {
        $username = $_POST['username'];
        $password = $_POST['password'];

        $user = new User();

        if (empty($username) === true || empty($password) === true) {
            echo 'you need to enter a username and password';
        } else if ($user->userExists($username) === false) {
            echo 'we cant find that username. have you registered?';
        } else echo 'ok';
     }

    ?>      <?php

    include 'core/init.php';

    if   (empty($_POST) === false) {
        $username = $_POST['username'];
        $password = $_POST['password'];

        $user = new User();

        if (empty($username) === true || empty($password) === true) {
            echo 'you need to enter a username and password';
        } else if ($user->userExists($username) === false) {
            echo 'we cant find that username. have you registered?';
        } else echo 'ok';
     }

    ?>      <?php

    include 'core/init.php';

    if   (empty($_POST) === false) {
        $username = $_POST['username'];
        $password = $_POST['password'];

        $user = new User();

        if (empty($username) === true || empty($password) === true) {
            echo 'you need to enter a username and password';
        } else if ($user->userExists($username) === false) {
            echo 'we cant find that username. have you registered?';
        } else echo 'ok';
    }

?>  

User.php

<?php
    require_once 'core/classes/Connect.php';

    class User {

        private $db;

        public function __construct() {
            $this->db = new Connect();
            $this->db = $this->db->dbConnect();
        }

        public function userExists($username) {
            $st = $this->db->prepare("SELECT COUNT(user_id) FROM users WHERE username=?");
            $st->bindParam(1, $username);
            $st->execute();

            if ($st->rowCount() == 1) {
                return true;
            } else return false;    
        }    
    }
?>

私はOOPを学ぶために努力してきましたが、誰もが私に学ぶための最良の方法は助けを求めるのではなく試すことだと言っています。単純なログインを作成して、それをより複雑にしようとしています。

正しいユーザー名を入力しても問題ありませんecho。代わりに、echoそのユーザー名が見つかりません。登録しましたか?助けてください。ありがとう

4

1 に答える 1

2

Connect-class(特にメソッド)がどのように機能するかはわかりませんrowCountが、問題は次のように思われます。クエリは指定されたユーザー名のuser_idの数を返しますが、行をカウントします。

交換

$st = $this->db->prepare("SELECT COUNT(user_id) FROM users WHERE username=?");

$st = $this->db->prepare("SELECT user_id FROM users WHERE username=?");

トリックを行う必要があります。

そして、あなたはさらにいくつかのコメントを学んでいるので:

empty($username) === trueに等しいempty($username)。ほとんどのプログラマーは後者を好みます(短いため)。

userExistsまた、メソッドを静的として宣言する方が理にかなっているようです。

于 2013-03-25T23:42:09.933 に答える