经过两天的PHP权限组管理学习,因为使用CLASS 类连接数据库,一直没有解决,后来弃用这个数据库连接方法,成功后,调用session传值,使用var_dump($_session['uid']) 输出 发现结果总是输出NULL ,重点看,index.php ,代码如下:
数据库内容如下:
login.php
<!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>无标题文档</title>
</head>
<body>
<h1>登录界面</h1>
<form action="checklogin.php" method="post">
<div>用户名:<input type="text" name="uid" /></div>
<div>密码: <input type="password" name="pwd" /></div>
<input type="submit" value="登录" />
</form>
</body>
</html>
check.php
<?php
//请config的数组传给一个$arr 变量
$arr=require"../php/config_case.php";
//调用funcion.php 中的数据库连接自定义connect()函数。
include"../php/function_case.php";
//将$arr数组数据传递给数据库连接函数connect(),以实现数据连接代码$link;
$link=connetct($arr);
if (!$link)
{
exit('error('.mysqli_connect_errno.'):'.mysqli_connect_error);//不继续向下执行
//die
}
// 表单提交后...
$posts = $_POST;
// 清除一些空白符号
foreach ($posts as $key => $value) {
$posts[$key] = trim($value);
}
$pwd = $posts["pwd"];
$uid = $posts["uid"];
$query = "SELECT * FROM `roles1_users` WHERE `pwd` = '$pwd' AND `uid` = '$uid'";
// 取得查询结果
$userInfo =mysqli_query($link,$query);
//$res=mysqli_fetch_row($userInfo);
$res = mysqli_fetch_array($userInfo);
//var_dump($res);
//die();
if (!empty($res)) {
// 当验证通过后,启动 Session
// 注册登陆成功的 admin 变量,并赋值 true
session_start();
$_SESSION["admin"] = true;
$_SESSION["uid"] = $res['uid'];
$_SESSION["name"] = $res['name'];
//$_SESSION["admin"]
//echo"<pre>";
//print_r($_SESSION['name']);
//var_dump($_SESSION['uid']);
header("Location: index.php");
} else {
//die("用户名密码错误");
echo "用户名密码错误,请不要尝试登录";
header('location:login.php');
}
?>
index.php
<!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>无标题文档</title>
<style type="text/css">
.list{ width:100px;
height:35px;
border:1px solid #36f;
margin:0px 2px 0px 2px;
text-align:center;
vertical-align:middle;
line-height:35px;}
</style>
</head>
<body>
<h1>主页面</h1>
<?php
// 防止全局变量造成安全隐患
$admin = false;
// 启动会话,这步必不可少
session_start();
// 判断是否登陆
if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true) {
echo "您已经成功登陆";
var_dump($_session["uid"]); // 输出结果为NULL,就因为session 用了小写,前面是大写。
var_dump($_SESSION["uid"]); // 输出了LISI 用户名,输出正常。
} else {
// 验证失败,将 $_SESSION["admin"] 置为 false
$_SESSION["admin"] = false;
//die("您无权访问");
header('location:login.php');
exit();
}
//$uid ="";
/*if(empty($_session["uid"]))//判断session是否为空</code>
{
//header("location:login.php");//空的话就返回登录页面</code>
exit;
}*/
$uid = $_session["uid"];
//请config的数组传给一个$arr 变量
$arr=require"../php/config_case.php";
//调用funcion.php 中的数据库连接自定义connect()函数。
include"../php/function_case.php";
//将$arr数组数据传递给数据库连接函数connect(),以实现数据连接代码$link;
$link=connetct($arr);
if (!$link)
{
exit('error('.mysqli_connect_errno.'):'.mysqli_connect_error);//不继续向下执行
//die
}
$sql = "select * from roles_rules where code in(select distinct ruleid from roles_juesewithrules where jueseid in(select jueseid from roles_userinjuese where userid='{$uid}'))";
$arr = mysqli_query($link,$sql);
foreach($arr as $v)
{
echo "<div code='{$v[0]}' class='list'>{$v[1]}</div>";
}
?>
</body>
</html>
因为网络上很多没有数据库配置文件,对于新手,无法入手,顺便把PHP 数据库连接代码文件付上:
function_cas.php
<?php
function connetct($conf=[])//将$conf[] 数组的值传递给自定义函数CONNETCT(),组成完整的数据库连接代码;
{
$link_code=mysqli_connect($conf['host'],$conf['user'],$conf['pass']); //$link 数据库连接相关取值在config.php 文件中的数据组中取出。
$link_code or die("连接数据库失败,请检查服务器名称、用户名、密码是否有误");// 连接失败返回中止终止程序,并输出自定义“连接数据库失败”。
mysqli_set_charset($link_code,"utf8");//设置字体集为UTF-8 防止乱码。
//选择数据库名称
if(mysqli_select_db($link_code,$conf["db"]))
{
return $link_code;
}
else{
die("数据库名称连接失败");
}
}
?>
config_case.php
<?php
//返回一个数组。
return[
"host"=>"localhost",//服务器名称
"user"=>"root", //用户名
"pass"=>"147071746",//密码
"db"=>"db_tct",//数据库
"prot"=>3306 //端口号,MYSQL默认3306
];
?>
发现重点在这里:
var_dump($_session["uid"]); // 输出结果为NULL,就因为check.php 的,session 保存用了大写,这里使用的小写。
var_dump($_SESSION["uid"]); // 输出了LISI 用户名,输出正常。
总结:PHP 学习。
一、大小写敏感
1. 变量名区分大小写
所有变量均区分大小写,包括普通变量以及$_GET、$_POST、$_REQUEST、$_COOKIE、$_SESSION、$GLOBALS、$_SERVER、$_FILES、$_ENV等预定义变量;
2. 常量名默认区分大小写,通常都写为大写
3. php.ini配置项指令区分大小写
如 file_uploads = 1
不能写成 File_uploads = 1
二、大小写不敏感
1. 函数名、方法名、类名 不区分大小写,但推荐使用与定义时相同的名字
2. 魔术常量不区分大小写,推荐大写
包括:__LINE__、__FILE__、__DIR__、__FUNCTION__、__CLASS__、__METHOD__、__NAMESPACE__。
3. NULL、TRUE、FALSE不区分大小写
4.类型强制转换,不区分大小写
包括
- (int),(integer) – 转换成整型
- (bool),(boolean) – 转换成布尔型
- (float),(double),(real) – 转换成浮点型
- (string) – 转换成字符串
- (array) – 转换成数组
- (object) – 转换成对象