php oop检查用户是否存在?

时间:2017-06-01 22:16:40

标签: php mysql pdo

如果存在用户名,我想显示错误,但不会抛出任何错误。

该功能在User.php上,我试图从该功能显示错误。

我引用了this,但它与OOP方式无关。

user.php的

public function check_user_exists($username)
{
    try{
        $stmt = $this->db->prepare("SELECT user_name FROM users WHERE user_name=:username");
        $stmt->execute(array(':username'=>$username));
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        $row['user_name'] == $username;

    }

    catch(PDOExeception $e)
    {
        echo $e->getMessage();
    }
}

的index.php

<?php
session_start();

require_once 'User.php';
$guest = new User();



if($guest->is_logged())
{
    $guest->redirect('profile');
}


if (isset($_POST['btn_signup']) ){

    $username = htmlentities($_POST['txt_username']);
    $unpass = htmlentities($_POST['txt_password']);
    $password = password_hash($unpass, PASSWORD_BCRYPT, ['cost' => 12] );
    $unemail = $_POST['txt_email'];
    $email = filter_var($unemail, FILTER_VALIDATE_EMAIL);

    $guest = new User();


    if($email == ""){
       $errors[]= "Enter a Email";
    }

    if($username == ""){
       $errors[]= "Enter a Username please";

    }

    if($password == ""){
        $errors[]= "Enter a Password";
    }



    if($guest->check_user_exists($username)){
        $errors[]= "Username Already Taken";
    }

    if($guest->signup($email,$password,$username)){
        $guest->redirect('profile');
        die('didnt redirect');       
    }

    else{
      $errors[]= "Invalid Entry";
    }
}

$title = "Home";
require_once 'layouts/header.php';


?>


    <div class="container">
        <div class="row">
            <div class="col-md-6">

            <?php
            if(isset($errors))
            {
               foreach($errors as $error)
               {
                  ?>
                  <div class="alert alert-danger">
                      <i class="glyphicon glyphicon-warning-sign"></i> &nbsp; <?php echo $error; ?>
                  </div>
                  <?php
               }
            }
            else if(isset($_GET['joined']))
            {
                 ?>
                 <div class="alert alert-info">
                      <i class="glyphicon glyphicon-log-in"></i> &nbsp; Successfully registered <a href='index.php'>login</a> here
                 </div>
                 <?php
            }
            ?>

                <h1>Sign Up</h1>




                <form action ="" method="POST">
                  <div class="form-group">
                    <label for="Email">Email address</label>
                    <input type="email" class="form-control" aria-describedby="emailHelp" name="txt_email" placeholder="Enter email">
                  </div>

                  <div class="form-group">
                    <label for="Username">Username</label>
                    <input type="text" class="form-control" aria-describedby="emailHelp" name="txt_username" placeholder="Enter Username">
                  </div>


                  <div class="form-group">
                    <label for="Password">Password</label>
                    <input type="password" class="form-control" aria-describedby="emailHelp" name="txt_password" placeholder="Enter password">
                  </div>


                     <button type="submit" name="btn_signup" class="btn btn-primary">Submit</button>
                </form>

            </div>
        </div>
    </div>


</body>
</html>

3 个答案:

答案 0 :(得分:1)

您的功能实际上并未返回或执行任何操作。返回fetch()的结果,如果返回true,则返回结果。如果返回false,则没有与用户名匹配的行。之后您无需检查任何内容,因为fetch()方法只有在找到结果时才会为真。

调整后,您的功能将如下所示

public function check_user_exists($username) {
    try{
        $stmt = $this->db->prepare("SELECT user_name FROM users WHERE user_name=:username");
        $stmt->execute(array(':username' => $username));
        return $stmt->fetch(PDO::FETCH_ASSOC);
    } catch(PDOExeception $e) {
        echo $e->getMessage();
    }
}

另外,直接输出错误并不是一个好主意(在测试/开发环境中它很好,但在实时环境中你应该记录它(error_log())。

答案 1 :(得分:1)

public function check_user_exists($username)
{
    try{
        $stmt = $this->db->prepare("SELECT user_name FROM users WHERE user_name=:username");
        $stmt->execute(array(':username'=>$username));
        return $stmt->fetchColumn() > 0;  // fetchColumn return the number of rows selected
    }

    catch(PDOExeception $e)
    {
        echo $e->getMessage();
    }
}

答案 2 :(得分:0)

public function ifUserAlreadyExist(string $email):bool{
    $sql = "SELECT 1 FROM users WHERE email= :Email";
    $statment = $this->conn->prepare($sql);
    if (false === $statment) {
        return false;
    }
    $statment->execute([':Email' => $email]);
    return (bool)$statment->fetchColumn();
}

//如果已经存在,您只需要选择1个对象,在这种情况下,函数提示将非常方便,可以将函数设置为布尔值,看看它是否返回true或false。 我希望我能帮上忙。