这篇文章主要介绍了php+ajax发起流程和审核流程(以请假为例) ,需要的朋友可以参考下
上一篇随笔中已经提到如何新建流程,那么现在我们就来看一下如何发起一个流程和审核流程~~~
先说一下思路:
(1)登录用session获取到用户的id
(2) 用户发起一个流程
注意:需要写申请事由
(3)处于节点的审核人去依次审核
注意:每审核通过一个,对应towhere字段要加1; 审核到最后时,对应的isok字段要变为1(此处1表示结束,0表示未结束)
共用到三张表:
第一步:先做一个简单的登录页面,用session获取用户名:
denglu.php页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form method="post" action="denglu-cl.php"> 用户名:<input type="text" name="uid" /><br /> 密码:<input type="password" name="pwd" /><br /> <input type="submit" value="登录" /> </form> </body> </html>
denglu-cl.php页面
<?php session_start(); require "../DB.class.php"; $db = new DB(); $uid = $_POST["uid"]; $pwd = $_POST["pwd"]; $sql = "select pwd from users where uid='{$uid}'"; $mm = $db->strquery($sql); if($pwd==$mm && !empty($pwd)) { $_SESSION["uid"]=$uid; header("location:liucheng.php"); } else { echo "密码或登录名输入错误"; } ?>
效果图:
第二步:做个简单的注页面:liucheng.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> #body{ height: 200px; width: 300px; background-color: gainsboro; margin: 200px auto; text-align: center; vertical-align: middle; line-height: 30px; } </style> </head> <body> <p id="body"> <h2>主页面</h2> <p> <a href="faqi.php" rel="external nofollow" >发起流程</a><br /> <a href='shenhe.php'>审核流程</a> </p> </p> </body> </html>
效果图:
第三步:发起流程页面faqi.php
(1)先将所有流程用下拉列表显示
(2)发起流程事由需要由登录用户填写
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> #body{ height: 250px; width: 300px; background-color: gainsboro; margin: 200px auto; text-align: left; vertical-align: middle; line-height: 30px; padding-left: 30px; } </style> </head> <body> <p id="body"> <form method="post" action="faqi-cl.php"> <h2>发起流程页面</h2> <select id="lc"> <?php require "../DB.class.php"; $db = new DB(); $sql = "select * from liucheng"; $arr = $db->query($sql); foreach($arr as $v) { echo "<option value='{$v[0]}'>{$v[1]}</option>"; } ?> </select><br /> 发起流程事由: <textarea class="nr"> </textarea><br /> <input type="button" value="确定发起" /> </form> </p> </body> </html>
第四步:写发起流程的处理页面fq-cl.php
<?php session_start(); require "../DB.class.php"; $db = new DB(); $code = $_POST["lc"]; $nr =$_POST["nr"]; $uid = $_SESSION["uid"]; $time = date("Y-m-d H:i:s",time()); $sql = "insert into liuchengpath values ('','{$code}','{$uid}','{$nr}',0,'{$time}',0)"; $db->query($sql,0); header("location:liucheng.php"); ?>
点击“确认发起”,数据库中就会添加此条数据
第五步:流程审核页面shenhe.php
用到知识点:子查询:无关子查询(子查询和父查询可以独立执行); 相关子查询(子查询里的条件使用到了父查询的某个东西 )
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> #body{ height: 450px; width: 800px; background-color: gainsboro; margin: 200px auto; text-align: left; vertical-align: middle; line-height: 30px; padding-left: 30px; } </style> </head> <body> <p id="body"> <h2>流程审核页面</h2> <?php session_start(); $uid = $_SESSION["uid"]; require "../DB.class.php"; $db = new DB(); //先取该用户参与的所有流程 //并且取流程步骤到达该用户或已经被改用户审核通过的记录 $sql="select * from liuchengpath a where code in(select code from liuchengjiedian where uids='{$uid}') and towhere >=(select orders from liuchengjiedian b where b.code = a.code and b.uids = '{$uid}')"; $arr = $db->query($sql); //var_dump($arr); echo "<table border='1' width='100%' cellpadding='0' cellspacing='0'> <tr> <td>流程代号</td> <td>发起者</td> <td>发起内容</td> <td>发起时间</td> <td>是否结束</td> <td>操作</td> </tr>"; foreach($arr as $v){ //操作最后一列 //设置默认项 $zt = "<a href='tongguo-cl.php?code={$v[0]}'>审核未通过</a>"; $sql = "select orders from liuchengjiedian where code ='{$v[1]}' and uids ='{$uid}'"; $wz = $db->strquery($sql); if($v[6]>$wz) { $zt = "<span style='color:green'>审核已通过</span>"; } echo "<tr> <td>{$v[1]}</td> <td>{$v[2]}</td> <td>{$v[3]}</td> <td>{$v[4]}</td> <td>{$v[5]}</td> <td>{$zt}</td> </tr>"; } echo "</table>"; ?> </p> </body> </html>
第六步:写tongguo-cl.php页面(重要)
<?php $ids = $_GET["code"]; require "../DB.class.php"; $db = new DB(); //点击审核后,towhere列加1,目的是使流程向下走 $sql = "update liuchengpath set towhere = towhere+1 where ids ='{$ids}' "; $db->query($sql,0); //当流程走到最后一个审核的人时,流程要结束 //获取该流程最大的orders $sql =" select max(orders) from liuchengjiedian where code = (select code from liuchengpath where ids ='{$ids}')"; $maxorders = $db->strquery($sql); //获取该用户处于哪个位置,也就是towhere等于多少 $sql ="select towhere from liuchengpath where ids ='{$ids}'"; $towhere = $db->strquery($sql); //判断是否已到达最后一个审核的人 if($towhere>$maxorders) { $sql = "update liuchengpath set isok=1 where ids='{$ids}'"; // var_dump($sql); $db->query($sql,0); } header("location:shenhe.php"); ?>
当写好这一步时,点击“审核未通过”则会变成“审核已通过”;
我们从头来验证一下效果:
首先:发起一个新的请假流程:
其次:zhangsan是第一个要审核人
点击“审核未通过后“,
最后:zhaoliu是最后一个审核人
点击“审核未通过”后,是否结束变为 1 ;操作变为绿色的 “审核已通过”~~~
以上是分享用php+ajax发起流程和审核流程实例的详细内容。更多信息请关注PHP中文网其他相关文章!

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1
功能强大的PHP集成开发环境