我最近创建了一个注册/登录系统,我希望每个用户都有一个个人资料页面。如果我查看这个用户,我想让这个用户拥有它自己的信息,其他人也可以看到。我已经有了这种布局,但是如果有人搜索了不在数据库中的用户名怎么办?页面应为空。
这是我的尝试,这是正确的吗?我从我的注册页面得到了这个,以检查是否使用了用户名。是否仍然适用于在网址上搜索某人?
$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{
}
如果没有,我可以帮忙调整一下吗?
答案 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();
}