简单管理员权限与几个常用的PHP 常用函数,in_array(),explode(),implode(),join(),str_replace()
先把今天要用的几个函数罗列出来:
//explode()转换成数组,implode()转化成字符串
explode("分隔符",需要被分割的字符串或变量)
$priv="product,index";
explode(",",$priv);
//判断一个字符串是否存在于一个数组中
in_array(被判断的,数组)
$now_page="index";
in_array($now_page,$priv);
//将数组用分隔符分成字符串
join("分隔符",数组)
join() 函数是 implode() 函数的别名。
//字符串替换
str_replace(find,replace,string,count)
count是可选的一个变量,对替换数进行计数。
该函数对大小写敏感。请使用 str_ireplace() 执行对大小写不敏感的搜索。
$priv="product,index";
str_replace("product","apple",$priv)
//输出"apple,index"
<?php
$arr = array("blue","red","green","yellow");
print_r(str_replace("red","pink",$arr,$i));
echo "Replacements: $i";
?>
输出:
Array
(
[0] => blue
[1] => pink
[2] => green
[3] => yellow
)
Replacements: 1
<?php
$find = array("Hello","world");
$replace = array("B");
$arr = array("Hello","world","!");
print_r(str_replace($find,$replace,$arr));
?>
输出:
Array
(
[0] => B
[1] =>
[2] => !
)
//string position 字符位置
strpos(字符串,要找的)
return 1.找得到返回字符位置,2.找不到,返回false
$priv = "apple,index";
$i = strpos($priv,"ex");
var_dump($i); //输出9
//file_put_contents() 函数把一个字符串写入文件中。
与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
file_put_contents(file,data,mode,context)
| 参数 | 描述 |
|---|---|
| file | 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。 |
| data | 可选。规定要写入文件的数据。可以是字符串、数组或数据流。 |
| mode |
可选。规定如何打开/写入文件。可能的值:
|
| context |
可选。规定文件句柄的环境。 context 是一套可以修改流的行为的选项。若使用 null,则忽略。 |
//file_get_contents(文件名)
file_get_contents() 函数把整个文件读入一个字符串中。
PHP中file() 函数和file_get_contents() 函数的作用都是将整个文件读入某个介质,其主要区别就在于这个介质的不同。
file() 函数是把整个文件读入一个数组中,然后将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false。
file_get_contents() 函数是把整个文件读入一个字符串中。和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
把文本文件a.txt的内容保存到一个数据下面是a.txt的内容如下.
aaaaaa
bbbbbb
bbbbccc
好了,就这三行,现在看file_get_contents的操作方法.
$content = file_get_content('a,txt');
$temp =str_replace(chr(13),'|',$content);
$arr =explode('|',$temp);
也不多只有三行就完成了,那么我们来看看file函数吧.
$content = file('a.txt');
就完成了,效果与上面完全相同的.
//file_exists(文件名) 判断文件是否存在
//end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功)。
以上基本就是做管理员权限需要用到的函数了,现在把代码贴出来
//admin_group_add。管理员组添加页
//链接数据库
require("config.php");
//检测COOKIE
require("check.php");
//权限添加,修改
//1.在管理员数据表增加权限字段
//2.修改用户界面,增加权限checkbox
//3.接受前台提交POST
//4.把post变成字符串存入数据库
if($_POST)
{
$groupname = $_POST['groupname'];
//由于表单提交的name属性值为$priv,为一个数组,因此将表单提交的数组转变成字符串
$private = join(",",$_POST['priv']);
//将$pri存入数据库里
$sql = "INSERT INTO `admin_group`(`groupname`,`private`) VALUES ('{$groupname}', '{$private}')";
$result = mysql_query($sql);
if(!$result)die(mysql_error());
} $priv = array(
"index" => array(
"index" => "新闻列表",
"add_news" => "新闻添加",
"category_news" => "新闻分类管理",
"edit_news" => "新闻修改",
"message" => "评论管理"
),
"case" => array(
"case" => "案例列表"
),
"product" => array(
"product" => "产品列表管理",
"add_product" => "产品添加",
"edit_product" => "产品修改",
"category_product" => "产品分类管理"
),
"admin" => array(
"admin" => "用户列表管理",
"add_admin" => "用户添加",
"edit_admin" => "用户修改",
"admin_group" => "用户组管理",
"admin_group_add" => "用户组权限添加"
)
);
HTML表单代码:
<form method="post" action="">
<fieldset> <!-- Set class to "column-left" or "column-right" on fieldsets to divide the form into columns -->
用户组名称:<input type="text" name="groupname" /><br />
<p>请选择用户权限:</p>
<?php foreach($priv as $child_priv):?>
<?php foreach($child_priv as $p_key => $p):?>
<input type="checkbox" value="<?php echo $p_key?>" name="priv[]" /><?php echo $p?><br />
<?php endforeach; ?>
<hr />
<?php endforeach; ?>
<input type="button" onclick="setCheck('priv[]',0)" value="全不选" />
<input type="button" onclick="setCheck('priv[]',1)" value="全选" />
<input type="button" onclick="setCheck('priv[]',2)" value="反选" />
<input class="button" type="submit" value="提交新的用户组" />
</fieldset>
<div class="clear"></div><!-- End .clear -->
</form>
//admin_group。管理员组列表页,//admin_group_check。管理员权限检测页
//连接数据库
require("config.php");
//检测COOKIE
require("check.php");
//后台的管理权限检测
//按后台的文件名,作为索引,去判断管理员是否有权限
//index.php,product.php,admin.php,case.php
//总管:ALL,丫鬟:product,index , 苦力:product,case,index , 家丁:case,product, 奶妈:case
//当我们打开页面时,判断当前登录的是哪个账号,找出相应的权限。
//explode()转换成数组,in_array(),判断一个字符串是否存在于一个数组中,
//打开平常页面的处理
//1.读取当前的登录账号
$userid = $_COOKIE["admin_userid"];
//2.按当前登陆账号,获取权限列表
$sql = "SELECT
`admin_group`.`private`
FROM
`admin_member`
JOIN `admin_group` ON `admin_member`.`group` = `admin_group`.`groupname`
where `admin_member`.`id` = '{$userid}' ";
$result = mysql_query($sql);
if(!$result)
{
die(mysql_error());
}
$row = mysql_fetch_assoc($result);
$priv = $row['private'];
$priv_dat = explode(",",$priv);
//3.获取当前页面的文件名
function getNowPageName()
{
//利用超全局变量$_SERVER获取当前文件名
$page_url = $_SERVER['PHP_SELF'];
//用explode()函数将当前页面的名字按'/'分隔成数组,end()函数取最后一组,可得到:XXX.php,XXX代表文件名
$page_name = end(explode('/',$page_url));
//将.php'后缀去掉
$filename = str_replace('.php','',$page_name);
return $filename;
}
$filename = getNowPageName();
//4.没权限跳转到欢迎页面
if(!in_array($filename,$priv_dat))
{
echo "<script>alert('太监不得入内!');location.href='index.php';</script>";
}
$sql = "SELECT * FROM `admin_group` where 1";
$result = mysql_query($sql);
if(!$result)
{
die(mysql_error());
}
//读取数据库里的`admin_group`表格
$sql = "SELECT * FROM `admin_group` where 1 LIMIT $offset,$per_num";
$result = mysql_query($sql);
if(!$result)
{
die(mysql_error());
}
<tbody>
<?php while($row = mysql_fetch_assoc($result)):?>
<tr>
<td><input type="checkbox" /></td>
<td><?php echo $row['id']?></td>
<td><?php echo $row['groupname']?></td>
<?php endwhile; ?>
</tbody>
简单管理员权限与几个常用的PHP 常用函数,in_array(),explode(),implode(),join(),str_replace()的更多相关文章
- WPF + Winform 解决管理员权限下无法拖放文件的问题
wpf,winform混合解决管理员权限无法拖放文件的问题 学习自: https://zhuanlan.zhihu.com/p/343369663 https://zhuanlan.zhihu.com ...
- 远程管理无管理员权限的PC客户端
一.简介 为提高操作系统稳定性.流畅度,分公司同事PC用户没有administrator权限,导致同事不能对系统进行设置.不能自行安装软件.网管使用远程管理软件(如Teamviewer.QQ)为同事提 ...
- vCSA加域&vcenter关联域&设置管理员权限
vCSA 与 Windows vCenter对比 1.部署起来更简单快捷. 2.vCSA基于Linux授权费用节省. 3.功能在6.0之后达到与Windows vCenter一样的功能,之后可能会反超 ...
- golang windows程序获取管理员权限(UAC ) via gocn
golang windows程序获取管理员权限(UAC ) 在windows上执行有关系统设置命令的时候需要管理员权限才能操作,比如修改网卡的禁用.启用状态.双击执行是不能正确执行命令的,只有右键以管 ...
- win7打开或关闭windows功能 提示“出现错误,并非所有的功能被更改”,管理员权限惹的祸
2013-07-25 18:12:06 最近要用到windows的telnet功能,本来是很简单的事情,因为管理员权限的问题,花了不少时间,才发现是管理员权限惹的祸,更滑稽的是,自己一直以来都不是管理 ...
- Delphi在win7/vista下写注册表等需要管理员权限的解决方案
看到论坛好多人问win7下写注册表的问题,我结合自己的理解写了一点东西,首先声明一下,本人初学Delphi,水平有限,大家见笑了,有什么不对之处请老鸟多指点. [背景]win7/Vista提供的UAC ...
- Qt之开机自启动及拥有管理员权限
源地址:http://blog.sina.cn/dpool/blog/s/blog_a6fb6cc90101feia.html Windows开机自启动的程序很多,包括系统软件.杀毒软件.一些其他安装 ...
- MacOS App代码申请管理员权限
原文: https://jacobpan3g.github.io/cn/2018/02/07/gain-root-permission-for-mac-app/,有问题欢迎在原文评论区一起讨论交流,我 ...
- InnoSetup 脚本打包及管理员权限设置
InnoSetup使用教程:InnoSetup打包安装 脚本详细 1. 定义变量 #define MyAppName "TranslationTool" #define MyApp ...
随机推荐
- Python进程池Pool
''' 进程池,启动一个进程就要克隆一份数据,假设父进程1G,那么启动进程开销很大 避免启动太多造成系统瘫痪,就有进程池,即同一时间允许的进程数量 ps:线程没有池,因为线程启动开销小,线程有类似信号 ...
- 关于使用国内dock仓库,网易、DaoCloud
使用国内docker镜像仓库,大大提高镜像的下载速度,从docker hub下载慢的不要不要的,甚至根本下载不了镜像,在docker for windows 18.06中增加一个配置即可,非常简单,具 ...
- SQL NULL 值
NULL 值是遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不 ...
- 《jmeter:菜鸟入门到进阶》系列
jmeter是我从事软件测试工作以来接触的第一个性能测试工具,也是耗费时间精力最多的一个工具,当然,学习jmeter过程中,由于知识储备不够,也顺带学习了很多其他相关的一些知识. 一直有个想法,就是把 ...
- PySocks安装使用方法
PySocks是一个基于Python的SOCKS代理客户端,它是SocksiPy的一个分支,修改了一些bug和增加了一些额外功能. ---------------------------------- ...
- day03(变量,常量,输入输出,注释,基本数据类型,运算符)
一,复习 ''' 1.语言的分类 -- 机器语言:直接编写0,1指令,直接能被硬件执行 -- 汇编语言:编写助记符(与指令的对应关系),找到对应的指令直接交给硬件执行 -- 高级语言:编写人能识别的字 ...
- nginx编译文件配置(原)
1.在根目录的opt下创建文件夹software并wget一个nginx包进行解压,/opt/software/,解压后需要对软件包文件进行授权 2.cd到nginx目录输入id nginx 未安装插 ...
- Java 如何存取MySQL datetime类型
1 在java中只有Date类型,这样数据存储到MySQL会出现问题,前台提交的数据,比如2018-03-20 17:30:59,后台用Date接受的时候,由于Date只精确到天,所以默认接收时间为2 ...
- Windows 与Office 镜像的区别
.SW开头是批量授权的版本. .CN开头是简体中文版镜像文件 零售版本. 其实建议使用 SW开头的镜像 可以直接使用KMS进行激活了. 转帖一个百度知道的内容: 看安装包的名称 cn开头的是零售版的, ...
- 《Effective C++》继承与面对对象设计:条款32-条款40
条款32:确定你的public继承塑模出is-a关系 public继承意味着is-a.适用于base class身上的每一个函数也一定适用于derived class. 条款33:避免遮掩继承而来的名 ...