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

创建页面:

  • 登录页面(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. iOS中解析Bonjour服务(转)

    服务器端Bonjour服务发布成功之后,客户端可以通过NSNetService解析服务,解析成功后,可以获得通讯的数据细节,如:IP地址.端口等信息. 首先需要实例化NSNetService对象代码如 ...

  2. export,source

    source会把定义在脚本文件中的变量放在当前shell中 export会把变量放在他所在的shell进程以及子进程shell中 子shell进程可以访问父shell进程的export 声明的变量,但 ...

  3. Hibernate使用注意事项

    映射的POJO类型中如果有基本类型最好都是用包装类来代替: 注意关联关系的正确设置,一对一(主键方式.外键外键方式),一对多和多对多的配置,单向.双向的配置: 更新核心配置文件的mapping:如果是 ...

  4. ServletContext与Web应用以及Spring容器启动

    一.ServletContext对象获取Demo Servlet容器在启动时会加载Web应用,并为每个Web应用创建唯一的ServletContext对象. 可以把ServletContext看作一个 ...

  5. 基于AR9331(MIPS架构)分析系统启动过程(uboot)

    前提: 1.AR9331是基于MIPS 24K CPU的一款WIFI1X1芯片,其SDK采用uboot作为引导.AR9331中定义的基地址是:0x9f00,0000 2.MIPS24K芯片,将固定的起 ...

  6. UVA - 11584 划分字符串的回文串子串; 简单dp

    /** 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34398 UVA - 11584 划分字符串的回文串子串: 简单 ...

  7. HashMap? ConcurrentHashMap?

    前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 ...

  8. 受限玻尔兹曼机(RBM, Restricted Boltzmann machines)和深度信念网络(DBN, Deep Belief Networks)

    受限玻尔兹曼机对于当今的非监督学习有一定的启发意义. 深度信念网络(DBN, Deep Belief Networks)于2006年由Geoffery Hinton提出.

  9. 第一百六十八节,jQuery,表单选择器

    jQuery,表单选择器 学习要点: 1.常规选择器 2.表单选择器 3.表单过滤器 表单作为 HTML 中一种特殊的元素,操作方法较为多样性和特殊性,开发者不但可以 使用之前的常规选择器或过滤器,也 ...

  10. try git

    Git allows groups of people to work on the same documents (often code) at the same time, and without ...