如果用户名是真实的,则显示个人资料页面。如果没有,请不要

时间:2017-08-06 02:51:40

标签: php mysqli

我最近创建了一个注册/登录系统,我希望每个用户都有一个个人资料页面。如果我查看这个用户,我想让这个用户拥有它自己的信息,其他人也可以看到。我已经有了这种布局,但是如果有人搜索了不在数据库中的用户名怎么办?页面应为空。

这是我的尝试,这是正确的吗?我从我的注册页面得到了这个,以检查是否使用了用户名。是否仍然适用于在网址上搜索某人?

$sql = "SELECT * FROM users WHERE username = '".$username."'";
    $result = mysqli_query($con,$sql);
    if(mysqli_num_rows($result)>=1){
        $error = true;  
        $username_error ='<div class="error-notice">
                        <div class="oaerror danger">
                        <strong>Uh oh!</strong> - That Username is already taken. Please use a different Username.
                        </div>';


    }else{ 
     }

如果没有,我可以帮忙调整一下吗?

1 个答案:

答案 0 :(得分:0)

我提出的问题是,您希望根据querystring / url中传递的值检查用户是否存在,并显示用户配置文件(或类似信息)(如果找到)。这是一个正确的总结吗?

我在评论中提到代码很容易被sql注入 - 我强烈建议你现在花点时间来掌握prepared statements的基础知识,而不是使用直接嵌入在sql中的变量。

try{

    $validuser = false;

    $dbhost =   'localhost';
    $dbuser =   'xxx'; 
    $dbpwd  =   'xxx'; 
    $dbname =   'xxx';
    $con    =   new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );

    if( !empty( $_GET['username'] ) ){

        $username = filter_input( INPUT_GET, 'username', FILTER_SANITIZE_STRING );


        $sql='select * from users where username=?';
        $stmt=$con->prepare( $sql );

        if( $stmt ){
            /* run the query to check username */

            /* Bind parameters to the placeholders */
            $stmt->bind_param( 's', $username );

            /* execute */
            $result = $con->execute();

            if( $result ){

                $stmt->store_result();
                $stmt->fetch();

                $rows = $stmt->num_rows;
                $validuser = ( $rows == 1 ) ? true : false;

                $stmt->free_result();
                $stmt->close();

            } else {
                throw new Exception('Query failed');
            }

        } else {
            throw new Exception('Failed to prepare sql statement');
        }
    }




    if( $validuser ){
        /* display user profile */
    } else {
        /* display message - user not found etc */
    }




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