流程:由两个及以上的业务步骤,完成一个完整的业务行为的过程,可称之为流程;注意是两个及以上的业务步骤。事物进行过程中的次序或顺序的布置和安排。

创建页面:

  • 登录页面(login.php):
<h1>登录</h1>
<form action="loginchuli.php" method="post">
<div>用户名:<input type="text" name="uid" /></div><br /> <div>密码:&nbsp;<input type="password" name="pwd" /></div><br /> <input type="submit" value="登录" />
</form>

  • 登录处理页面(loginchuli.php):
<?php
session_start();
$uid = $_POST["uid"];
$pwd = $_POST["pwd"]; include("../DB.class.php");
$db = new DB(); $sql = "select count(*) from Users where Uid='{$uid}' and Pwd = '{$pwd}'"; $z = $db->StrQuery($sql); if($z == 1)
{
$_SESSION["uid"] = $uid;
header("location:main.php");
}
else
{
header("location:login.php");
}
  • 主页面(main.php):
<style type="text/css">
*{ margin:0 auto; padding:0}
#menu{ width:600px; height:50px; line-height:50px; text-align:center; color:#FFF;}
.z{ height:50px; line-height:50px; text-align:center; float:left; margin-right:50px;}
.t{height:50px; line-height:50px; text-align:center; float:right;}
a:link,a:visited{ color:#03C;}
a:hover{ background-color:#930; color:#FFF;}
a:active{ background-color:#900; } </style>
</head> <body>
<?php
session_start();
if(empty($_SESSION["uid"]))
{
header("location:login.php");
}
?><br />
<center><h1>主页面</h1></center><br />
<div id="menu">
<div class="z"><a href="xinjian.php">新建流程</a></div>
<div class="z"><a href="faqi.php">发起流程</a></div>
<div class="z"><a href="shenhe.php">审核流程</a></div>
<div class="t"><a href="tuichu.php">退出系统</a></div> </div>

  • 新建流程页面(xinjian.php):
<script src="../jquery-1.11.2.min.js"></script>
</head> <body>
<?php
session_start();
include("../DB.class.php");
$db = new DB();
$attr = array();
if(!empty($_SESSION["jiedian"]))
{
$attr = $_SESSION["jiedian"];
}
?>
<h1>新建流程</h1>
<div>
请选择节点人员:<br /><br />
<?php
$sry = "select * from Users";
$ary = $db->Query($sry);
foreach($ary as $v)
{
echo "<input type='radio' class='ry' name='ry' value='{$v[0]}'/>{$v[2]}";
}
?>
</div>
<br />
<div>
<input type="button" value="添加节点" id="tjjd" />
</div>
<br />
<div>
<?php
//循环遍历数组key与value值
foreach($attr as $k=>$v)
{
//根据用户名找到Name
$sname = "select Name from Users where Uid = '{$v}'";
$name = $db->StrQuery($sname);
echo "<div>{$k}--{$name}--<input type='button' value='删除' class='sc' bs='{$k}' /></div>";//将数组索引存入自定义属性bs中
}
?>
</div>
<br />
<div>
请输入流程名称:
<input type="text" id="mc" />
</div><br />
<div>
<input type="button" value="添加流程" id="tjlc" />
</div><br />
<a href="main.php">返回主页面</a>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(e) {
//页面加载完成之后,设置显示默认选中第一项
$(".ry").eq(0).prop("checked",true);
//添加节点按钮点击事件
$("#tjjd").click(function(){
//取选中的用户名
var ry = $(".ry");
var uid ="";
for(var i=0;i<ry.length;i++)
{
if(ry.eq(i).prop("checked"))
{
//如果选中,将其value值存入变量uid中
uid = ry.eq(i).val();
}
} $.ajax({ url:"tjjd.php",
data:{uid:uid},
type:"POST",
dataType:"TEXT",
success: function(data){ window.location = "xinjian.php";
}
}); }) //删除节点按钮点击事件
$(".sc").click(function(){
//获取属性bs的值,即数组$attr的索引值
var id = $(this).attr("bs"); $.ajax({ url:"scjd.php",
data:{id:id},
type:"POST",
dataType:"TEXT",
success: function(data){ window.location = "xinjian.php";
}
});
}) //添加按钮点击事件
$("#tjlc").click(function(){
//取出输入的流程名称
var name = $("#mc").val();
$.ajax({ url:"tjlc.php",
data:{name:name},
type:"POST",
dataType:"TEXT",
success: function(data){
//alert(data);
if(data.trim()=="OK")
{
window.location="xinjian.php";
}
else
{
alert("添加失败!");
}
}
}); }) }); </script>

  • 添加节点页面(tjjd.php):
<?php
session_start(); $uid = $_POST["uid"];
//判断是否是第一次点击
if(empty($_SESSION["jiedian"]))
{
//第一次点击,新建一个数组,存入session
$attr = array($uid);
$_SESSION["jiedian"] = $attr;
}
else
{
//第n次点击,n!=1,直接取出数组追加一个传过来的值,存入session
$attr = $_SESSION["jiedian"];
array_push($attr,$uid);
$_SESSION["jiedian"]= $attr;
}

  • 删除节点页面(scjd.php):
<?php
session_start(); $id = $_POST["id"];
$attr = $_SESSION["jiedian"];
//删除数组中的某一个元素
unset($attr[$id]);
//重新索引数组
$attr = array_values($attr);
//将新数组存入session
$_SESSION["jiedian"] = $attr;

  • 添加流程页面(tjlc.php):
<?php
session_start();
include("../DB.class.php");
$db = new DB();
$attr = array();
if(!empty($_SESSION["jiedian"]))
{
$attr = $_SESSION["jiedian"];
}
$name = $_POST["name"];
//向流程表中添加数据
$code = date("YmdHisms");
$slc = "insert into LiuCheng values('{$code}','{$name}')";
//echo $slc;
//判断是否执行成功的变量
$isok = true;
if($db->Query($slc,1))
{
foreach($attr as $k=>$v)
{
$sfl = "insert into FlowPath values('','{$code}','{$v}',{$k})";
$isok = $isok && ($db->Query($sfl,1));
}
}
if($isok)
{
unset($_SESSION["jiedian"]);
echo "OK";
}
else
{
echo "NO";
}
  • 发起流程页面(faqi.php):
<script src="../jquery-1.11.2.min.js"></script>
</head> <body>
<?php
session_start();
if(empty($_SESSION["uid"]))
{
header("location:login.php");
}
include("../DB.class.php");
$db = new DB();
?>
<h1>发起流程</h1>
<div>
请选择流程:
<select id="lc">
<?php
$sql = "select * from LiuCheng";
$attr = $db->Query($sql);
foreach($attr as $v)
{
echo "<option value='{$v[0]}'>{$v[1]}</option>";
}
?>
</select>
</div><br />
<div>
请选择内容:
<textarea class="nr"></textarea>
</div>
<br />
<div>
<input type="button" value="发起流程" id="faqi" />
</div><br />
<a href="main.php">返回主页面</a>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(e) {
$("#faqi").click(function(){ var code = $("#lc").val();
var nr = $(".nr").val();
$.ajax({ url:"faqichuli.php",
data:{code:code,nr:nr},
type:"POST",
dataType:"TEXT",
success: function(data){ if(data.trim()=="OK")
{
alert("发起成功!");
}
else
{
alert("发起失败!");
}
}
});
}) }); </script>

  • 发起流程处理页面(faqichuli.php):
<?php
session_start();
include("../DB.class.php");
$db = new DB();
$code = $_POST["code"];
$nr = $_POST["nr"];
$uid = $_SESSION["uid"];
$riqi = date("Y-m-d H:i:s");
$isok = true?"<span style='color:green'>已完成</span>":"<span style='color:red'>未完成</span>"; $sql = "insert into UserFlow values('','{$code}','{$uid}','{$nr}',false,'{$riqi}',0)"; if($db->Query($sql,1))
{
echo "OK";
}
else
{
echo "NO";
}
  • 审核流程页面(shenhe.php):
<h1>审核流程</h1>
<?php
session_start();
include("../DB.class.php");
$db = new DB();
if(empty($_SESSION["uid"]))
{
header("location:login.php");
}
$uid = $_SESSION["uid"];
?>
<table width="1000" border="1" cellpadding="0" cellspacing="0">
<tr bgcolor="#FFCC66" style="color:#930">
<td>流程名称</td>
<td>发起者</td>
<td>流程内容</td>
<td>是否结束</td>
<td>发起时间</td>
<td>操作</td>
</tr> <?php $suf = "select * from UserFlow order by RiQi desc";
$auf = $db->Query($suf);
foreach($auf as $v)
{
//根据流程代号到flowpath表查询登陆者在流程中的次序
$sfp = "select Code,Orders from FlowPath where Code = '{$v[1]}' and Uids = '{$uid}'";
$cx = $db->Query($sfp);
if($cx)
{
$ucode = $cx[0][0]; //流程代号
$ucx = $cx[0][1]; //次序
//判断该流程是否走到了该用户
if($v[1]==$ucode && ($v[6]>=$ucx))
{
$lname = Lname($db,$v[1]);
$fname = Fname($db,$v[2]);
//处理是否结束
$isok = $v[4]?"<span style='background-color:red'>已结束</span>":"<span style='background-color:green'>处理中</span>";
//处理操作
$chuli = "";
if($v[6]==$ucx)
{
$chuli = "<a href='shenhechuli.php?id={$v[0]}'>审核</a>";
}
else
{
$chuli = "<span style='background-color:green'>已通过</span>";
}
echo "<tr>
<td>{$lname}</td>
<td>{$fname}</td>
<td>{$v[3]}</td>
<td>{$isok}</td>
<td>{$v[5]}</td>
<td>{$chuli}</td>
</tr>";
}
}
} //处理流程名称
function Lname($db,$code)
{
$sql = "select Name from LiuCheng where Code = '{$code}'";
return $db->StrQuery($sql);
}
//处理发起者名
function Fname($db,$uid)
{
$sql = "select Name from Users where Uid = '{$uid}'";
return $db->StrQuery($sql);
}
?>
</table><br /> <a href="main.php">返回主页面</a>&nbsp;<a href="tuichu.php">退出系统</a>
</body>

  • 审核流程处理页面(shenhechuli.php):
<?php
include("../DB.class.php");
$db = new DB();
$id = $_GET["id"]; $sql = "update UserFlow set ToWhere = ToWhere+1 where Ids = '{$id}'"; if($db->Query($sql,1))
{
//查询流程走到哪了
$stw = "select Code,ToWhere from UserFlow where Ids = '{$id}'";
$atw = $db->Query($stw);
$code = $atw[0][0];//流程代号
$tw = $atw[0][1]; //流程到哪了
//查询该流程下的节点数
$sfp = "select count(*) from FlowPath where Code = '{$code}'";
$sl = $db->StrQuery($sfp);
//如果流程走到的位置大于等于了该流程中节点总数
if($tw>=$sl)
{
$ok = "update UserFlow set IsOk = true where Ids = '{$id}'";
$db->Query($ok,1);
} header("location:shenhe.php");
}
else
{
echo "审核失败!";
}
  • 退出系统页面:
<?php
session_start();
unset($_SESSION["uid"]);
header("location:login.php");

php……流程的更多相关文章

  1. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  2. 基于netty http协议栈的轻量级流程控制组件的实现

    今儿个是冬至,所谓“冬大过年”,公司也应景五点钟就放大伙儿回家吃饺子喝羊肉汤了,而我本着极高的职业素养依然坚持留在公司(实则因为没饺子吃没羊肉汤喝,只能呆公司吃食堂……).趁着这一个多小时的时间,想跟 ...

  3. 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?

    在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...

  4. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  5. 8、Struts2 运行流程分析

    1.流程分析: 请求发送给 StrutsPrepareAndExecuteFilter StrutsPrepareAndExecuteFilter 询问 ActionMapper: 该请求是否是一个 ...

  6. Hawk 6. 高级话题:子流程系统

    子流程的定义 当流程设计的越来越复杂,越来越长时,就难以进行管理了.因此,采用模块化的设计才会更加合理.本节我们介绍子流程的原理和使用. 所谓子流程,就是能先构造出一个流程,然后被其他流程调用.被调用 ...

  7. 流程开发Activiti 与SpringMVC整合实例

    流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...

  8. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  9. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  10. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

随机推荐

  1. c++ what happens when a constructor throws an exception and leaves the object in an inconsistent state?

    为什么会想到这个问题?因为我总是不自觉地将c++和java进行对比.java对这种情况的处理方式是constructor返回一个null,然后已经构造的objects交给Garbage Collect ...

  2. python 分支结构

    if 语句 if语句 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = 20 if ag ...

  3. Python、Lua和Ruby之优劣

    Python.Lua和Ruby之优劣 Python Python的优点:1.Python比其它语言有更多扩展模块.2.在网上可以找到很多Python教程.不仅如此,还有大量的英文书籍和资料.Pytho ...

  4. Web services 有两种类型的应用

    可重复使用的应用程序组件 有一些功能是不同的应用程序常常会用到的.那么为什么要周而复始地开发它们呢? Web services 可以把应用程序组件作为服务来提供,比如汇率转换.天气预报或者甚至是语言翻 ...

  5. linq to sql 动态构建查询表达式树

    通过Expression类进行动态构造lamda表达式. 实现了以下几种类型,好了代码说话: public Expression<Func<T, bool>> GetAndLa ...

  6. ng-model ng-show

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Collection Set List 集合二

    Set List 都继承Collection Collection:元素之间没有顺序,允许重复和多个null元素对象. Set:元素之间没有顺序,不允许重复只能存一个null. List:元素之间有顺 ...

  8. PDP2

    1. 程序入口 配置文件config.xml中: 2. index.html中显示,引入的cordova.js 就说明了 cordova apps 3. 看 main.ts

  9. 1603 限高二叉排列树(计数DP)

    1603 限高二叉排列树 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题   作为游戏魔方的编写者和管理员,Bob在很多主存模块中 ...

  10. 1804 小C的多边形

    1804 小C的多边形 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 小C偶然发现了一个奇妙的n个点的多边形.现在你需要给外圈的边标记上1~n-1,里圈的边也标记 ...