我只是php的新手,几个星期自我教学并制作各种项目来学习如何做事......
我目前正在制作一个由...组成的基本项目 索引(登录页面) 寄存器 家(用户级别) 管理员(管理员级别) 登出 DBCONNECT
我的数据库中有一个名为userlevel的列,默认为0,管理员帐户我将更改为1。
此时登录的任何用户都可以访问home.php页面,因为会话变量是“user”,因此只要有任何用户登录,他们就会转到home.php,否则如果登录不是则返回索引有效....就像我说我是非常新的PHP,只开始学习今天的会议,所以它有点压倒...基本上我只是粘贴从家到管理员的相同页面开始编辑会话详细信息,以便它将只允许userlevel 1的用户访问admin else返回索引....相关页面的代码如下.....
index.php(登录页面)
<?php
ob_start();
session_start();
require_once 'dbconnect.php';
// it will never let you open index(login) page if session is set
if ( isset($_SESSION['user'])!="" ) {
header("Location: home.php");
exit;
}
$error = false;
if( isset($_POST['btn-login']) ) {
// prevent sql injections/ clear user invalid inputs
$email = trim($_POST['email']);
$email = strip_tags($email);
$email = htmlspecialchars($email);
$pass = trim($_POST['pass']);
$pass = strip_tags($pass);
$pass = htmlspecialchars($pass);
// prevent sql injections / clear user invalid inputs
if(empty($email)){
$error = true;
$emailError = "Please enter your email address.";
} else if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
$error = true;
$emailError = "Please enter valid email address.";
}
if(empty($pass)){
$error = true;
$passError = "Please enter your password.";
}
// if there's no error, continue to login
if (!$error) {
$password = hash('sha256', $pass); // password hashing using SHA256
$res=mysql_query("SELECT id, fname, pass FROM project WHERE email='$email'");
$row=mysql_fetch_array($res);
$count = mysql_num_rows($res); // if uname/pass correct it returns must be 1 row
if( $count == 1 && $row['pass']==$password ) {
$_SESSION['user'] = $row['id'];
header("Location: home.php");
} else {
$errMSG = "Incorrect Credentials, Try again...";
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sign In</title>
</head>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" autocomplete="off">
<input type="email" name="email" placeholder="Enter Your Email" value="<?php echo $email; ?>" maxlength="40" />
<?php echo $emailError; ?><br>
<br>
<input type="password" name="pass" placeholder="Enter Your Password" maxlength="15" />
<?php echo $passError; ?><br>
<br>
<button type="submit" name="btn-login">Sign In</button><br>
<br>
<br>
<a href="register.php">Register</a> <a href="index.php">Sign in</a> <a href="admin.php">Admin</a>
<br>
<?php
if ( isset($errMSG) ) {
?>
<?php echo $errMSG; ?>
<?php
}
?>
</body>
</html>
<?php ob_end_flush(); ?>
home.php
<?php
ob_start();
session_start();
require_once 'dbconnect.php';
// if session is not set this will redirect to login page
if( !isset($_SESSION['user']) ) {
header("Location: index.php");
exit;
}
// select loggedin users detail
$res=mysql_query("SELECT * FROM project WHERE id=".$_SESSION['user']);
$userRow=mysql_fetch_array($res);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome - <?php echo $userRow['fname']; ?></title>
</head>
<body>
Hello <?php echo $userRow['fname']; ?> you are sucessfully logged in!
<br>Your last name is <?php echo $userRow['lname']; ?>
<br>Your email address is <?php echo $userRow['email']; ?>
<br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br>
<a href="logout.php?logout"></span>Sign Out</a></li>
<br>
<br>
<a href="register.php">Register</a> <a href="index.php">Sign in</a> <a href="admin.php">Admin</a>
</body>
</html>
<?php ob_end_flush(); ?>
admin.php的
<?php
ob_start();
session_start();
require_once 'dbconnect.php';
// if session is not set this will redirect to login page
if( !isset($_SESSION['user']) ) {
header("Location: index.php");
exit;
}
// select loggedin users detail
$res=mysql_query("SELECT * FROM project WHERE id=".$_SESSION['user']);
$userRow=mysql_fetch_array($res);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome - <?php echo $userRow['fname']; ?></title>
</head>
<body>
Hello <?php echo $userRow['fname']; ?> you are sucessfully logged in!
<br>Your last name is <?php echo $userRow['lname']; ?>
<br>Your email address is <?php echo $userRow['email']; ?>
<br><br><br><br><br><br><br><br><br><br>
<h1><?php echo $userRow['userlevel']; ?></h1>
<br><br><br><br><br><br><br><br><br><br>
<a href="logout.php?logout"></span>Sign Out</a></li>
<br>
<br>
<a href="register.php">Register</a> <a href="index.php">Sign in</a> <a href="admin.php">Admin</a>
</body>
</html>
<?php ob_end_flush(); ?>
如果有人可以告诉我如何使会话查看数据库中的userlevel行以获取存储的信息(0或1表示用户或管理员)以及如何相应地更改index.php(登录)页面,以及如何编辑admin.php只允许登录用户使用userlevel 1来查看页面?
对不起,如果这是模糊的或者到处都是,我仍然只是每天都找到新的东西
由于
答案 0 :(得分:0)
如果你将一个is_admin字段添加到你的项目表(我假设你的用户表),那么你可以测试用户是否是管理员,如下所示:
$sql = "SELECT * FROM project WHERE id='" . mysql_real_escape_string($id) . "'";
$res = mysql_query($sql);
$row = mysql_fetch_array($result, MYSQL_ASSOC);
if (!$row || !$row['is_admin']) {
die();
}
(我不使用PHP并且没有测试过这段代码,所以把它想象成伪代码)
答案 1 :(得分:0)
警告
你不应该再使用PHP中的mysql_ *函数了,因为它们已经从php7中删除了,并且不会从我理解的内容中返回。
使用mysqli_ *或pdo *代替。
有人说......
至于将数据库信息存储到用户会话中的解决方案,您可以使用我为此编写的一些函数。
注意:这些函数使用不受支持的mysql_ *函数,如果没有更新到mysqli _ *等受支持的替代函数,则不应进行复制/粘贴。
连接到MySQL数据库
function SQL_LOGIN() {
$servername = "localhost";
$username = "myusername";
$password = "XXXXXXXXXX";
// Create connection
$conn = mysql_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
return $conn;
}
-
执行MySql查找
function SQL_SELECT($inputDB, $inputTable, $inputColumns, $inputParams, $inputConnection) {
$query = "SELECT ".mysql_real_escape_string($inputColumns)." from ".$inputDB.".".mysql_real_escape_string($inputTable)." ".$inputParams."";
$result = mysql_query($query, $inputConnection);
return $result;
}
-
将SQL查询结果转换为数组
function SQL_RESULT_TO_ARRAY($result) {
$endArray = array();
if (mysql_num_rows($result) > 0) {
while($row = mysql_fetch_assoc($result)) {
$endArray[] = $row;
}
} else {
/* blank result */
}
return $endArray;
}
-
如果用户是管理员,则将会话变量is_admin
设置为true
$inputEmail = ""; /* put in your code to get the user's email or whatever */
session_start();
$conn = SQL_LOGIN();
$result = SQL_SELECT("users", "ID,EMAIL,IS_ADMIN", "where EMAIL like '".$inputEmail."'", $conn);
$resultArray = SQL_RESULT_TO_ARRAY($result);
foreach ($resultArray as $idx=>$childArray) {
if ($childArray["IS_ADMIN"] == 1) {
$_SESSION["IS_ADMIN"] = true;
}
}
修改强>
将$_SESSION["IS_ADMIN"]
之类的会话变量设置为true
后,它将一直保留到:
session_destroy()
session_start()
命令(一旦session_start()
被调用,则会话将被恢复,并带来任何$_SESSION[]
个变量)注意所提供的代码旨在成为正确方向的指南,而不是安全的解决方案。代码的某些部分可能会让攻击者入侵您的SQL数据库,进入PHP,甚至进入您的服务器。
不要直接复制/粘贴生产环境