【发布时间】:2016-11-26 00:15:10
【问题描述】:
个人资料页面正在使用 PHP 和 MySQL 来显示项目。
我想问两件事
承诺:如果你能帮助我,我会在我的网站上承认你并把你放在学分中;)
问题 1:
如何查看数据库中是否存在用户,如何显示404信息?
问题2:
因此,这里的主要错误是当您搜索用户时,它无法识别用户。
用户“admin01”搜索自己并且个人资料页面正在工作,如果用户 admin01 搜索用户 admin02 ,页面不会提供用户信息。无论如何如何解决这个问题?
附加信息:
该站点将使用GET方法检查url,例如:profile.php?username=admin01,它将显示用户信息。如果用户没有登录,页面将重定向到登录页面。
代码:
<?php
ob_start();
session_start();
require_once 'dbconnect.php';
if( !isset($_SESSION['user']) ) {
header("Location: index.php");
exit;
}
// select loggedin users detail
$res=mysql_query("SELECT * FROM users WHERE userId=".$_SESSION['user']);
$userRow=mysql_fetch_array($res);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome - <?php echo $userRow['userName']; ?></title>
<link rel="stylesheet" href="assets/css/bootstrap.min.css" type="text/css" />
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="http://www.codingcage.com">Prospekt | A Gaming Community</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Dashboard</a></li>
<li><a href="../home.php">Home</a></li>
<li><a href="/forums.php">Forums</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-user"></span> Member - <?php echo $userRow['userName']; ?> <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="logout.php?logout"><span class="glyphicon glyphicon-log-out"></span> Sign Out</a></li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div id="wrapper">
<div class="container">
<div class="page-header">
<h1>Prospekt | A Gaming Community</h1>
<h4> Dashboard | See your live ranking, stats, and more! </h4>
</div>
<?php
$username = $_GET['username'];
if (isset($username) === true && empty($_GET['username']) === false){
echo $username;
} else {
echo "Please search for a valid user!";
}
?>
<div class="row">
<div class="col-lg-12">
</div>
</div>
</div>
</div>
<script src="assets/jquery-1.11.3-jquery.min.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
</body>
</html>
【问题讨论】:
-
附注:您使用的是长期弃用的数据库适配器(旧的
mysql_...()函数),并且您的脚本宽对 sql 注入攻击开放...请移植您的脚本将mysqli或PDO作为数据库适配器。检查官方文档。并了解使用“准备好的语句”和“参数绑定”来保护您的代码的优势。 -
感谢您的提示,这实际上只是本地化的,一旦我将其“在线”移植,这将会改变,然后我将使用 mysqli 或 PDO :)
-
问题 2 的答案显然是:在脚本的开头,您检查是否存在一个会话变量,其名称类似于作为参数指定的用户名。除了当前登录的用户之外,其他用户非常不太可能出现这种情况。所以你实际上阻止了你自己想要达到的目标。
-
关于移植:这是一种完全不切实际的做法。唯一的方法是在您的开发环境中正确编码并仅在代码按需要工作时发布。一“在线移植”就“移植到PDO”是不现实的。立即行动。
-
稍后从 mysql 更改为 pdo 意味着您要完成两次工作。第一次做对。
标签: php mysql dynamic user-profile