0

oop は初めてで、関数 Login() に $status の値を挿入する方法がまだわかりません。私は何を間違っていますか?このエラーが発生するため:

警告: User::Login() の引数 3 がありません。13 行目の E:\xampp\htdocs\caps\index.php で呼び出され、20 行目の E:\xampp\htdocs\caps\class\user.php で定義されています。

class User {

private $db;
public $status;

public function __construct() {

    $this->db = new Connection();
    $this->db = $this->db->dbConnect();
    $this->status = pow( 1, -1*pi());   
}


public function Login ($name, $pass, $status) {

    if (!empty($name) && !empty($pass))  {

        $st = $this->db->prepare(" select * from users where name=? and pass=? ");
        $st->bindParam(1, $name);
        $st->bindParam(2, $pass);
        $st->execute();

        if ($st->rowCount() != 1) {         
                echo "<script type=\"text/javascript\">alert ('wrong password. try again'); window.location=\"index.php\"; </script>";

        } else {
            $st = $this->db->prepare(" select * from users where name=? and pass=? status=?");
            $st->bindParam(1, $name);
            $st->bindParam(2, $pass);
            $st->bindParam(3, $status);             
            $st->execute();

                if ($st->rowCount() != 1) { echo "send user to user page"; } else { echo "send user to admin"; }
        }

    } else {

    echo "<script type=\"text/javascript\">alert ('insert username and password'); window.location=\"index.php\"; </script>";

    }



}

}

4

2 に答える 2

1

の値を使用する場合は$status、ログイン関数からそのパラメーターを削除し、代わりに の言及を に置き換え$statusます$this->status

public function Login ($name, $pass) {

if (!empty($name) && !empty($pass))  {

    $st = $this->db->prepare(" select * from users where name=? and pass=? ");
    $st->bindParam(1, $name);
    $st->bindParam(2, $pass);
    $st->execute();

    if ($st->rowCount() != 1) {         
            echo "<script type=\"text/javascript\">alert ('wrong password. try again'); window.location=\"index.php\"; </script>";

    } else {
        $st = $this->db->prepare(" select * from users where name=? and pass=? status=?");
        $st->bindParam(1, $name);
        $st->bindParam(2, $pass);
        $st->bindParam(3, $this->status);             
        $st->execute();

または、関数宣言をに変更してコンストラクタ値を「デフォルト」にすることも$status = $this->statusできます。これにより、必要に応じて関数を呼び出すときにステータス値をオーバーライドできます。

于 2013-06-06T19:50:10.993 に答える
0

これは、3 番目の引数を指定せずに $user->Login を呼び出したことを意味します。

この引数をオプションにしたい場合は、メソッド シグネチャを次のように変更できます。

public function Login ($name, $pass, $status = null) {

ステータスを status プロパティにデフォルト設定する場合は、Login 関数を次のように開始できます。

public function Login ($name, $pass, $status = null) {
        if(!$status) $status = $this->status;
        //...the rest of your code
 }

これを呼び出す正しい方法は次のとおりです。

$user = new User();
$user->Login($username, $password, $status);
于 2013-06-06T19:47:03.893 に答える