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> <div id="body"> <h2>主页面</h2> <div> <a href="faqi.php" rel="external nofollow" >发起流程</a><br /> <a href='shenhe.php'>审核流程</a> </div> </div> </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> <div 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> </div> </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> <div 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>"; ?> </div> </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发起流程和审核流程(以请假为例),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

时间: 2024-09-23 12:01:28

php+ajax发起流程和审核流程(以请假为例)的相关文章

云笔记模块ajax和后台交互的流程是什么

问题描述 云笔记模块ajax和后台交互的流程是什么 客户端代码: if(ok){ $.ajax({ url:"http://localhost:8080/note/user/login.do", type:"post", data:{"name":name, "password":password}, dataType:"json", success:function(result){ if(result.

基于开发流程的软件测试流程管理

0.引言 随着软件行业的发展.软件产品已经影响到我们社会的诸多领域,人们对软件作用的期望值也越来越高,对软件质量重要性的认识也逐渐增强. 然而,软件缺陷(bug)是伴随软件产品开发过程而产生的敷衍品,采用新的技术和方法,也不能完全消灭软件缺陷.因此,在软件开发过程中尽早地引入软件测试技术来保证软件质量,降低软件缺陷率,已经得到软件业的认可.软件开发过程中的每-个阶段都会有相应的文档和产品产生,对这些文档和产品进行严格评审和测试,可以尽早发现问题.及时找出与需求分析和项目计划中的不符合项.对软件的

B2C网站设计:用户注册登录流程和购买流程设计

网络购物网站根据买家和卖家的不同形态,主要分为三类商业模式:B2B  B2C  C2C ,这三种商业模式在传统的线下也有相对应的典型形态:  B2B 对应专业的批发市场  B2C 对应购物超市  C2C对应个体摊位组成的市场.所以说网络购物网站并不是完全意义上模式创新,它只是利用了新的媒介和新的平台来承载卖家和买家的商业活动,因此其网络购物购物流程和传统的是一样的,还是有借鉴意义的. 我们可以画出下面这个用户网络购物的基本流程图 这几个步骤是用户网络购物的基础环节,每个网站根据不同的需要增加相应

django通过ajax发起请求返回JSON格式数据的方法

  本文实例讲述了django通过ajax发起请求返回JSON格式数据的方法.分享给大家供大家参考.具体实现方法如下: 这是后台处理的: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 def checkemail(request): user = None if request.POST.has_key('email'): useremail = request.POST['email'] result = {} user = User.objects.filter(usere

java-设计一个 流程执行器,流程需要任意步数,如果中间有任意要出错的,都要回滚?,如何理解设计?

问题描述 设计一个 流程执行器,流程需要任意步数,如果中间有任意要出错的,都要回滚?,如何理解设计? 面试java研发工程师时,面试馆提出来的,需要编码实现!我当时的理解是:1.按照题目中说的流程执行器是,我理解是一个抽象出来,通用的执行器,那么就需要对流程一开始方法的入参还有流程中存在调用的全局变量都需要回退,这样的理解我一时想不出来解决方案,2.如果是工作流模型的我认为建立节点,节点里是 操作对象(也就是方法),数据对象,状态,然后就想使用链表(工作流程)中存储一个操作节点,上一节点操作和下

通过ViewController的关键流程来理解流程建模

在最近解决某个问题的时候,发现在ViewDidDisappear中去获取self.navigationController为空.猛然间意识到,原来在VC的生命周期中存在一些细节问题需要注意.而且,最近一段时间,对基于流程(生命周期是特殊的流程)建模的编程思想也开始有些反思.所以就总结了一下VC生命周期的一些问题. 先说点比较抽象的东西,关于流程建模的.对于同一个对象而言,往往在不同的业务场景中其有不一样的流程.换句话说,对于一个对象而言其可能出在多个流程中.比如我们拿一个VC来说: 每一个OC的

link环境下制作一款《订餐软件》,复单走流程的同时允许不走流程,不走流程的怎么并单?

问题描述 link环境下制作一款<订餐软件>,复单走流程的同时允许不走流程,不走流程的怎么并单? link环境下制作一款<订餐软件>,复单走流程的同时允许不走流程,不走流程的怎么并单? 解决方案 无非就是你的程序中开两个数据库连接,然后执行相同的两次插入动作.

互联网企业安全高级指南3.10 流程与“反流程”

3.10 流程与"反流程" 1. 人的问题 在传统安全领域一直是强调流程的,但是互联网行业有一点反流程,甚至像Facebook这样的公司还表示除非万不得已否则不会新建一条流程来解决问题.那安全建设到底要不要流程.首先有流程肯定能解决问题,但流程化是不是最佳实践则不确定. 于是先解决第一个问题:有没有可能没有流程,什么情况下可能很少或接近于没有流程.假如公司的人很少,从工位上站起来就能看到全公司的人,要发布版本吼一嗓子全员都能听到,这种情况下确实不需要什么流程,不只是安全流程,其他的流程

DinnerNow中的ASP.NET Ajax Extensions应用---选餐流程

继上一篇文章DinnerNow中的WCF应用 --- 首页数据加载,我们大概了解了一些关于DinnerNow的基本项目结构,以及其中比较主要的两个解决方案文件. 接下来我会继续以实际网上选餐流程来说明关于DinnerNow中的ASP.NET Ajax Extensions应用场景及其设计方案. 首先请大家看一下这张图,它标明了在订餐这一业务流程中"查询餐馆"这一用例 DinnerNow所实际执行的方法顺序,因为下文中的一些主要的js方法调用也是以这张图中所标明的流程来顺序处理的. 当然