0

ユーザーが存在するかどうかを確認し、検証も行うメソッドを作成しようとしています。

これまでのコードは次のとおりです。

public function checkUsername(){
            if((strlen($_POST['register-username']) > 2) && (strlen($_POST['register-username']) < 16)){
                $stmt = $this->dbh->prepare("SELECT username FROM adrenaline_junkies_uk_users WHERE username = ?");
                $stmt->bindParam(1, $this->post_data['register_username'], PDO::PARAM_STR);
                $stmt->execute();
                if($stmt->rowCount() != 0){
                        return TRUE;
                }else{
                    return $this->error .= '<span style="color:red;">Username already exists.</span>';
                }
            }else{
                return $this->error .= '<span style="color:red;">Username must be between 3 and 15 characters.</span>';
            }

    }

これは、私がそれを呼び出そうとする方法です:

if( isset($_POST['register-submit'])){

        $error = '';
        $register = new register($_POST, $dbh);
            if(!$error .= $register->checkUsername()){

                    //continue

            }else{
                $error .= $register->checkUsername();
            }
    }

それをテストするために、最初のエラーが返されるように入力フィールドに何も入力せず、Web ページに正しくエコーアウトします。しかし、何も表示されていません。

これはこれを行う正しい方法ですか?申し訳ありませんが、クラスでメソッドを使用することにあまり慣れていません。呼び出しプログラムの最初のステートメントで何か間違ったことをしているifと思いますが、そのメソッドを2回実行する必要がありますか?

4

1 に答える 1

1

を使用しExceptionsます。お気に入り:

public function checkUsername(){
    if((strlen($_POST['register-username']) > 2) && (strlen($_POST['register-username']) < 16)){
        $stmt = $this->dbh->prepare("SELECT username FROM adrenaline_junkies_uk_users WHERE username = ?");
        $stmt->bindParam(1, $this->post_data['register_username'], PDO::PARAM_STR);
        $stmt->execute();
        if($stmt->rowCount() != 0){
                return TRUE;
        }else{
            throw new Exception("Username already exists.");
        }
    }else{
        throw new Exception("Username must be between 3 and 15 characters.");
    }

}

if( isset($_POST['register-submit'])){

    $error = '';
    $register = new register($_POST, $dbh);
    try {
        if($register->checkUsername()){
            //continue
        }
    } catch ($e) {
        $error .= '<span style="color:red;">' . $e->getMessage() . '</span>';
    }
}

次のようなサブクラス化を行うことができます。

class UsernameException extends Exception {}

try {
    throw new UsernameException("Your username is too awesome");
} catch (UsernameException $e) {
    exit($e->getMessage());
} catch (SomeOtherException $e) {
    exit("500");
} catch (Exception $e) {
    exit("que?");
}
于 2013-09-16T15:31:15.690 に答える