php之 常用的 流程管理

摘要:
1、 如果您想拥有数据库的内容,将有表。首先,会有用户表,然后会有流表,然后是用户编写的流表,最后是审阅者的表。数据库完成后,将出现一个用于创建新流程的页面。此页面将包含审阅者、流程名称以及使用提交按钮添加节点的人员。这是为了遍历数据库以了解管理者是什么请选择节点人员:˂?

1.流程管理的用法是什么样的?

2.怎么发起想要的流程?

3.审批的人要是怎么审批通过?

4.流程审核是不是要挨个走过?

一、要有数据库的内容的

肯定会有表的,首先就是用户表了,然后就是流程表,用户编写的流程表,还有审核人员的表

php之 常用的 流程管理第1张   php之 常用的 流程管理第2张   php之 常用的 流程管理第3张   php之 常用的 流程管理第4张

二、数据库结束后,就是新建流程的页面,这页面会有审核人员,还有流程的名字还有提交的按钮

(1)添加节点的人员,这个是要遍历数据库来查看都什么管理人员

<div>
  请选择节点人员:
    
    <?php
	session_start();   //开启session
	include("DBDA.class.php");   //调用封装好的数据库
	$db = new DBDA();  //造新对象
	
	$suser = "select * from users";  //查询用户表中的所有值
	$auser = $db->Query($suser);  //执行查询语句
	foreach($auser as $v)
	{
		echo "<input   type='radio' value='{$v[0]}' name='ck' />{$v[2]} ";  //输出单选按钮,数组中的索引2,也就是用户名,但是它的值是代号
	}
	?>
</div>

查看一下显示结果:

php之 常用的 流程管理第5张

(2)既然后选择审核人员,那么就是有添加的按钮

<input type="button" value="添加节点"   />  //起个名字,便于给它添加单击按钮

php之 常用的 流程管理第6张

(3)对这个按钮添加点击事件

$("#insert").click(function(){
	var ck = $(".ck");  //找到项
	var uid = "";
	for(var i=0;i<ck.length;i++)
	{
		if(ck.eq(i).prop("checked"))  //单选按钮的选中状态
		{
		  uid = ck.eq(i).val();  //单选按钮的值
		}
	}
		
	$.ajax({
		url:"addjd.php",  //添加节点的处理页面
		data:{uid:uid},  //将单选按钮的值传过去
		type:"POST",  //传值方式
		dataType:"TEXT",  //值的返回状态
		success: function(data){
			window.location.href="http://t.zoukankan.com/liucheng_gaunli.php";  //执行处理页面成功后会刷新页面
		  }
		});	
})

(4)添加节点的处理页面

<?php
session_start();  //开启session
$uid = $_POST["uid"];  //接收传过来的值

if(empty($_SESSION["jiedian"]))
{
	$attr = array($uid);  //定义一个数组放用户
	$_SESSION["jiedian"] = $attr; //将第一个用户放入数组中
}
else
{
	$attr = $_SESSION["jiedian"]; //数组中有值
	$attr[] = $uid;  //放入数组中值
	$_SESSION["jiedian"] = $attr;   //将值再交给session
}

(5)在主页面中显示添加的这些节点

<?php
if(empty($_SESSION["jiedian"]))   //如果没有节点值
{
	echo "<div>还没有添加节点</div>";  //输出这句话
}
else
{
	$attr = $_SESSION["jiedian"];  //数组中有了值
	foreach($attr as $k=>$v)  //循环遍历,$v只是名字,还有有所以所以用$k
	{
		$sname = "select name from users where uid='{$v}'";  //编写查询语句
		$name = $db->StrQuery($sname);  //执行查询语句
          //输出索引号还有名字,加一个删除按钮吧,可以吧这个节点删除 echo "<div>{$k}--{$name}--<input type='button' value='删除' sy='{$k}' /></div>"; } } ?>

添加节点看下效果:

1.还没有添加节点的效果图:  

php之 常用的 流程管理第7张

2.随便添加几个审核人员:人员已经显示出来了

php之 常用的 流程管理第8张

(6)这样之后就是对其的删除按钮添加单击事件了

$(".sc").click(function(){
	var sy = $(this).attr("sy");  //点击这个按钮,选中这个的索引号
	$.ajax({
		url:"shanchu.php",   //删除按钮的处理页面
		data:{sy:sy},  //把索引号传到处理页面
		type:"POST",  //传值方式
		dataType:"TEXT",
		success:function(data){
			window.location.href="http://t.zoukankan.com/liucheng_gaunli.php";  //执行处理页面成功后会刷新页面
		}
	});
})

(7)删除按钮的处理页面

<?php
session_start();  //开启session
$attr = $_SESSION["jiedian"];  //节点的数组
$sy = $_POST["sy"];  //接收穿过来的索引号

unset($attr[$sy]); //删除数据
$attr = array_values($attr); //重新索引
$_SESSION["jiedian"] = $attr;

查看下删除节点的效果

1.没有删除之前

php之 常用的 流程管理第8张

2.删除一个节点之后

php之 常用的 流程管理第10张

(8)节点的操作已经结束之后,那么就是流程的名称了,这个简单,写名称的文本框:重要的就是对这个流程的保存了,那么也要有保存按钮

<div>请输入流程名称:<input type="text"   /></div>    //起个名字,下面保存的写个单击事件有用
<div><input type="button" value="保存"   /></div>  //保存按钮要有单击事件的

这样整体的效果图就出来了:  

php之 常用的 流程管理第11张

(9)最后就是保存按钮的单击事件了

$("#save").click(function(){
  var name = $("#name").val();  //取到文本框的值
  $.ajax({
	url:"baocun.php",  //保存的处理页面
	data:{name:name},  //将文本框的值传到处理页面
	type:"POST",  //传值方式
	dataType:"TEXT",
	success: function(data){
		alert("添加成功!");  //执行处理页面成功后会弹出提示框
	  }
  });
})

(10)保存流程的处理页面

<?php
session_start();  //开启session
include("DBDA.class.php");  //调用封装的数据库类
$db = new DBDA();  //造新对象

$name = $_POST["name"];  //接收传过来的值
$code = time();  //代号是时间

$sflow = "insert into flow values('{$code}','{$name}')"; //修改流程表中的值:代号和名字
$db->Query($sflow,0);  //执行语句

$attr = $_SESSION["jiedian"];  
foreach($attr as $k=>$v)
{
	$spath = "insert into flowpath values('','{$code}','{$v}','{$k}')";  //修改流程节点的数值
	$db->Query($spath,0);  //执行语句
}

看下保存效果:

php之 常用的 流程管理第12张

看下数据库,内容也保存数据库了

php之 常用的 流程管理第13张

三、新建流程页面已经结束了,那么就是用户登录页面了,这个页面写了很多遍了,不多说了,直接上代码

(1)登录的基本显示:都是些基本语句

<h1>用户登录</h1>
<div>账号:<input type="text"   /></div> 
<div>密码:<input type="password"   /></div>
<div><input type="button" value="登录"   /></div>

(2)这里登录,我们也用ajax进行登录吧

$("#btn").click(function(){  //对登录按钮添加单击事件
  var uid=$("#uid").val();  //获取用户的值
  var pwd=$("#pwd").val();  //获取密码的值
  $.ajax({
    url:"logincl.php",  //编写登录的处理页面
    data:{uid:uid,pwd:pwd},  //将用户和密码传到处理页面
    type:"POST",
    dataType:"text",
    success: function(data)
    {
      if(data.trim()=="OK")
      {
        window.location.href="http://t.zoukankan.com/main.php";    //处理页面执行成功后,跳转到主页面
      }
      else
      {
        alert("用户名密码输入错误");  //否则就提示错误
      }
    }
  })       
})

(3)看下处理页面的编写

<?php
session_start();  //开启session
include("DBDA.class.php");  //调用封装的类
$db = new DBDA();  //造新对象
//传过来的值
$uid = $_POST["uid"];
$pwd = $_POST["pwd"];<br>//查询语句
$sql = " select pwd from users where uid='{$uid}' and pwd='{$pwd}' ";
//执行语句
$attr = $db->Query($sql);
if(!empty($pwd) && !empty($attr) && $attr[0][0]==$pwd)
{
    $_SESSION["uid"] = $uid; //session接收用户值
    echo "OK"; 
}
else
{
    echo "ON"; 
}
?>

最后,我们看下最后结果,登录成功就会进入主页,登录失败会提示错误

php之 常用的 流程管理第14张   php之 常用的 流程管理第15张

四、节点用户的审核处理界面了(对于这个审核界面有很多需要注意的地方)

(1)登录成功界面的显示部分:并不是每个人登录成功界面是一样的,还有就是如果这个人员不参与审核的话,也应该是没有信息的才对

想要显示的表头,也就是一行:我们可以用表来显示

<tr>
   <td>流程代号</td>
   <td>发起者</td>
   <td>发起内容</td>
   <td>是否结束</td>
   <td>发起时间</td>
   <td>操作</td>
</tr>

先看下表头的显示:

php之 常用的 流程管理第16张

(2)开启一下session这样登录者的信息就会保存下来

session_start();
include("DBDA.class.php");  //会用到数据库,所以可以调用一下数据库的类
$db = new DBDA();  //造新对象
$uid = "";
if(empty($_SESSION["uid"]))  //判断保存的session值是不是为空
{
  header("location:login.php");  //为空就返回登录页面
}
else
{
  $uid = $_SESSION["uid"];  //不为空就输保存一下用户
}

(3)接下来就是用户这是不是和流程有关系?流程走到哪了(分情况)?还有就是有没有通过

//查询登录者参与的所有流程
$su_flow = "select * from userflow where code in(select code from flowpath where uids='{$uid}')";
$au_flow = $db->Query($su_flow);  //执行查询语句
				
foreach($au_flow as $vu_flow)
{
  $towhere = $vu_flow[6]; //流程走到哪里了
					
  //找到登录者在该流程中的位置
  $s_weizhi = "select orders from flowpath where code='{$vu_flow[1]}' and uids='{$uid}'";
  $wezhi = $db->StrQuery($s_weizhi); //该人员在流程中的位置
					
  if($towhere>=$wezhi)
  {
    $caozuo = "";
    if($towhere==$wezhi)
    {
	  //流程正好走到登录者位置
	  $caozuo="<a href='http://t.zoukankan.com/tongguo.php?ids={$vu_flow[0]}'>通过</a>"; //get方式传过处理页面
    }
    else
    {
	  //流程走过登录者
	  $caozuo = "<span style='background-color:green; color:white'>已通过</span>";
    }
    echo "<tr><td>{$vu_flow[1]}</td><td>{$vu_flow[2]}</td><td>{$vu_flow[3]}</td><td>{$vu_flow[4]}</td><td>{$vu_flow[5]}</td><td>{$caozuo}</td></tr>";
  }
  else
  {     //流程未走到登录者   } }

(4)通过的处理页面

<?php
include("DBDA.class.php");  //调用封装好的数据库类
$db = new DBDA();  //造新对象
$ids = $_GET["ids"]; //将代号传过来 $sql = "update userflow set towhere=towhere+1 where ids='{$ids}'"; //修改towhere的值看已经执行到哪了 $db->Query($sql,0); //执行修改语句 $swhere = "select * from userflow where ids='{$ids}'"; $attr = $db->Query($swhere); $towhere = $attr[0][6]; //走到哪了 $code = $attr[0][1]; //流程代号 $ssl = "select count(*) from flowpath where code='{$code}'"; //查询总数 $pcount = $db->StrQuery($ssl); //该流程节点人员数量 if($towhere>=$pcount) {
  $sql = "update userflow set isok=true where ids='{$ids}'"; //修改是不是已经通过了   $db->Query($sql,0); } header("location:main.php");

因为还没有写发起流程界面,那么先从数据库中添加几条数据看看:

(1)我们先要新建个流程,这是第一个页面,我们就用新建流程

看下结点还有流程名称php之 常用的 流程管理第17张   来看下数据库中结点的表   php之 常用的 流程管理第18张  

根据这些我们在流程表中自己先添加信息吧,等后来再通过发起流程添加,现在只看下效果

php之 常用的 流程管理第19张

登录审核人员的账号看下:

第一个人是李四:

php之 常用的 流程管理第20张

我们点击通过,继续往下走

第二个人是马七,我们不点通过,看下下一个人员(王五)有没有这个通过的操作:是没有这个操作的

php之 常用的 流程管理第21张

我们让马七通过审核,再看下王五的界面

php之 常用的 流程管理第22张  王五的界面就是:php之 常用的 流程管理第23张就发现有了这个操作,继续下去,我们看下最后这个通过会不会变成1

最后审核人员张三    php之 常用的 流程管理第24张

看下结果是否会结束:php之 常用的 流程管理第25张

再看下数据库中towhere中的数值是不是已经结束了:php之 常用的 流程管理第26张

这个就剩下发起流程的步骤了,可以先看下效果:

(1)发起流程有个链接页面,单击这个,可以链接到发起流程页面

php之 常用的 流程管理第27张  

(2)这个及时发起流程的页面了

php之 常用的 流程管理第28张

 这个挺简单的了,后面再更新吧~~~

至此,这个流程管理就结束了~~

免责声明:文章转载自《php之 常用的 流程管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android自定义View研究(六)View中的原点坐标相关问题angularJS的插件使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php中session_start()相关问题分析与解决办法

介绍下,在php中使用session时遇到的一些问题,与相关解决方法。1.错误提示Warning: Cannot send session cookie - headers already sentWarning: Cannot send session cache limiter - headers already sent分析及解决办法这一类问题,的原...

Memcached内存缓存技术

Memcached是什么,有什么作用? Memcached是一个开源的、高性能的内存缓存软件,从名称上看Mem就是内存的意思,而Cache就是缓存的意思。 Memcached通过在事先规划好的内存空间中临时缓存数据库中的各类数据,以减少业务直接对数据库的访问,从而减轻数据库的访问压力和网站集群的响应速度。 Memcached服务在企业集群架构中应用场景 1...

ASP操作COOKIE

◆什么是 Cookie?Cookie 其实是一个标签,经常可能听到的中文翻译:小舔饼。当你访问一个需要唯一标识你的站址的 WEB 站点时,它会在你的硬盘上留下一个标记,下一次你访问同一个站点时,站点的页面会查找这个标记。每个 WEB 站点都有自己的标记,标记的内容可以随时读取,但只能由该站点的页面完成。每个站点的Cookie与其他所有站点的Cookie存在...

详解Session分布式共享(.NET CORE版)

一、前言&回顾        在上篇文章Session分布式共享 = Session + Redis + Nginx中,好多同学留言问了我好多问题,其中印象深刻的有:nginx挂了怎么办?采用Redis的Session方案与微软Session方案相比,有什么优势呢?Cookie也可以取代Session的,采用Redis的Session方案优势在哪...

Java Servlet 中文API说明

JavaServlet中文API说明 这份文档描述了Java Servlet API的最新版本2.1版。所以,这本书对于Servlet的开发者及servlet引擎的开发者同样适用。 Java Servlet API的组成 Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包。这两个软件包的同时...

Cookie和Session详解

Session和Cookie详解 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。 Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 1.1  Cookie机制   在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都...