PHP和MySQL - 检查是否已经使用了用户名

时间:2016-07-30 07:46:08

标签: php mysql

现在的问题是,代码无法检查用户名是否已被占用,是否有任何代码可以检查数据库中是否已经使用了用户名?

我正在尝试我的一些代码,然后可能在Stack Overflow中搜索了这个问题。我试过solution,但显然它给了我错误。当我试过它时,警告:

  

mysql_query()期望参数2是资源,对象是给定的   C:......在线...

和问题

  

mysql_num_rows()期望参数1为resource,null为null   C:......在线...

我实际上是在寻找这个问题的解决方案或教程如何解决这个问题。

我的代码:

// The below JS function written outside app.controller
function sendVerifyEmail(firebaseUser){
  firebaseUser.sendEmailVerification();
}

3 个答案:

答案 0 :(得分:3)

在你遇到错误的行中,替换" mysql_query" for" mysqli_query"和" mysql_num_rows" for" mysqli_num_rows"。这是因为你不能将mysql调用与mysli连接混合在一起。

答案 1 :(得分:2)

作为如何使用预准备语句的示例,您可以使用以下内容(未经测试的btw)

在原始代码中,您在输出html代码后发送标题 - 这将导致错误,除非您使用输出缓冲,因此我在生成任何html内容之前移动了所有相关的PHP代码,如果有任何错误后输出它们。

我还注意到mysqli连接的参数没有引用 - 如果这些参数被定义为常量,那就没问题了,否则也会产生错误。

保持mysqlipdo - 因为您可以更好地保护您的网站免受恶意用户的侵害,因为您采用了我试图在此处展示的预备语句。

<?php
    require_once("functions.php");
    require_once("db-const.php");
    session_start();

    if (logged_in() == true) {
        redirect_to("profile.php");
    }

    $errors=array();

    if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

        if( isset( $_POST['username'], $_POST['password'], $_POST['first_name'], $_POST['last_name'], $_POST['email'] ) ) {

            $username   = !empty( $_POST['username'] ) ? $_POST['username'] : false;
            $mainpass   = !empty( $_POST['password'] ) ? $_POST['password'] : false;
            $password   = !empty( $mainpass ) ? hash('sha256', $mainpass) : false;
            $first_name = !empty( $_POST['first_name'] ) ? $_POST['first_name'] : false;
            $last_name  = !empty( $_POST['last_name'] ) ? $_POST['last_name'] : false;
            $email      = !empty( $_POST['email'] ) ? $_POST['email'] : false;

            if( $username && $password ){
                $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME );
                if( $mysqli->connect_errno ) {
                    $errors[]=$mysqli->connect_error;
                } else {

                    /* Assume all is ok so far */
                    $sql='select username from users where username=?';
                    $stmt=$mysqli->prepare($sql);
                    $stmt->bind_param('s',$username);
                    $stmt->execute();

                    $stmt->bind_result( $found );
                    $stmt->fetch();

                    if( !$found ){
                        /* username is not alreday taken */

                        $sql='insert into `users` (`username`,`password`,`first_name`,`last_name`,`email`) values (?,?,?,?,?);';
                        $stmt=$mysqli->prepare( $sql );
                        $stmt->bind_param('sssss',$username,$password,$first_name,$last_name,$email);
                        $stmt->execute();

                        header("Location: checklogin.php?msg=Registered Successfully!");
                    } else {
                        /* username is taken */
                        $errors[]='Sorry, that username is already in use.';
                    }
                }   
            }
        } else {
            $errors[]='Please fill in all details';
        }
    }
?>
<html>
    <head>
        <title>Prospekt Member Area</title>
    </head>
    <body>
        <h1> Register Here </h1>
        <h2>&copy; Kirk Niverba</h2>
        <hr />

        <!-- The HTML registration form -->
        <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
            Username: <input type="text" name="username" /><br />
            Password: <input type="password" name="password" /><br />
            First name: <input type="text" name="first_name" /><br />
            Last name: <input type="text" name="last_name" /><br />
            Email: <input type="type" name="email" /><br />

            <input type="submit" name="submit" value="Register" />
            <a href="login.php">Already have an account?</a>
        </form>
        <?php
            if( !empty( $errors ) ){
                echo implode( '<br />', $errors );
            }
        ?>
        <hr />
    </body>
</html>

答案 2 :(得分:1)

可以很容易地使用 mysql唯一约束

username varchar(50) NOT NULL,
//other fields,
UNIQUE (username)

对于它的php部分,只有当 mysql_num_rows 返回0时,才能使用 mysql_query 选择所需的用户名来验证和发送表单。