流程:由两个及以上的业务步骤,完成一个完整的业务行为的过程,可称之为流程;注意是两个及以上的业务步骤。事物进行过程中的次序或顺序的布置和安排。
创建页面:
- 登录页面(login.php):

<h1>登录</h1> <form action="loginchuli.php" method="post"> <div>用户名:<input type="text" name="uid" /></div><br /> <div>密码: <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> <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");