Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php oop检查用户是否存在?_Php_Mysql_Pdo - Fatal编程技术网

php oop检查用户是否存在?

php oop检查用户是否存在?,php,mysql,pdo,Php,Mysql,Pdo,如果用户名存在,我想显示一个错误,但是没有抛出错误 该函数位于User.php上,我试图显示该函数的错误 我引用了,但是它与OOP方式无关 User.php public function check_user_exists($username) { try{ $stmt = $this->db->prepare("SELECT user_name FROM users WHERE user_name=:username"); $stmt-&g

如果用户名存在,我想显示一个错误,但是没有抛出错误

该函数位于User.php上,我试图显示该函数的错误

我引用了,但是它与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>

已在此处成功注册
注册
电子邮件地址
用户名
密码
提交

函数实际上不会返回或执行任何操作。返回
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\u log()

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

您的函数不会返回任何内容。警告:不要在保存到数据库中的用户输入上使用
htmlentities
。此函数仅用于在HTML上下文中显示用户数据,而不是任意显示。您希望保存在记录中的数据尽可能中性和原始。如果在HTML中显示,请在该内容上调用
htmlentities
。如果在JavaScript或JSON上下文中显示,也会有特定的转义函数。这很有效,谢谢,我真的不知道返回true或false或etc是如何工作的,但现在我知道了……我认为没有魔法,只有表达式求值。这是
return$row['user\u name']=$username;
是espression的返回值
$row['user\u name']==$username;
,这是一个布尔值。您输入if语句的只是具有布尔值的表达式。如果您有数据值,您可以返回它。您实际上不需要执行
返回$row['user\u name']=$username;
尽管如此。当您将输入与查询结果进行比较时,您可以获得相同的效果,但您只需检查是否提取了某些内容。
fetch()
如果没有返回行,则返回false。@IlarioPierbatista感谢您的解释maan@Qirel很好,我已经更新了我的解决方案来实现这一点。我还没有尝试过你的解决方案,但我不想评估
获取的结果。
。根据文档()它似乎只在失败的情况下返回
FALSE
,您不需要检查
$row['user\u name']=$username;
(就像另一个答案所建议的那样),
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->fetchColumn() > 0;  // fetchColumn return the number of rows selected
    }

    catch(PDOExeception $e)
    {
        echo $e->getMessage();
    }
}
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();
}