0

私は 2 つのファイルを持っています。1 つは reg_db クラスを含み、もう 1 つは reg_db のオブジェクトを呼び出します。データベースのユーザー入力と列をチェックして、一意の値のみであることを確認します。そして、コードを停止するのが固有でない場合は、メッセージで。今のところ、何も得られません。 var_dump($conn -> uniqueInput($_POST['reg_username'], ' username')); NULL を出力します。コードを柔軟にし、どのユーザー入力をデータベースのどの列でチェックするかを設定できるようにしたいと考えています。

//reg_db class
class reg_db{
    private $input;
    private $column;

    public function __construct(){

    }

    public function uniqueInput($reg_input, $reg_column){
        $this -> input = $reg_input;
        $this -> column = $reg_column;
        $pdo = new PDO('mysql:host=localhost;dbname=fail once again;', 'root', '');
        $db_user = $pdo -> prepare('SELECT :column FROM `users` WHERE :column = :input');
        $db_user -> bindParam(':input', $this -> input, PDO::PARAM_STR);
        $db_user -> bindParam(':column', $this -> column, PDO::PARAM_STR);
        $db_user -> execute();
        $row = $db_user -> fetch(PDO::FETCH_ASSOC);
        if($this -> input == $row[$this -> column]){
            die($this -> column . ' ' . $this -> input . ' is already taken');
        }
    }
}

//object of reg_db
$conn = new reg_db();
$conn -> uniqueInput($_POST['reg_username'], '`username`');
4

1 に答える 1

0

ユーザー名でユーザーを取得し、更新しているユーザーではないかどうかを確認できます。

class reg_db{
    private $pdo;

    public function __construct(){
        $this->pdo = new PDO('mysql:host=localhost;dbname=fail once again;', 'root', '');
    }

    public function getUserBy($reg_column, $reg_input){
        $db_user = $this->pdo->prepare("SELECT * FROM `users` WHERE `$reg_column` = :input");
        $db_user->bindParam(':input', $reg_input, PDO::PARAM_STR);
        $db_user->execute();
        return $db_user->fetch(PDO::FETCH_OBJ);
    }
}

$conn = new reg_db();
$user = $conn->getUserBy('username', $_POST['reg_username']);
if ($user && $user->id != $_POST['reg_id']) {
    die("Username '{$_POST['reg_username']}' is already taken");
}
于 2013-02-20T23:47:35.820 に答える