核心邏輯:流程管理,在各種系統中扮演很重要的地位,可以把設定好的流程放入系統中,規定好幾個節點,只要所有節點都通過,就可以通過。
建立四張資料庫表:
1.我們首先做一個建立流程頁面 flow.php,先把節點做好
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> </head> <body> <h2>管理員建立流程</h2> <p><select id="users" name="users"> <? "./DBDA.class.php" = = "select * from users" = ->query(,0( "<option value='{[0]}'>{[2]}</option>"?> </select> <input type="button" value="添加" id="add" /> </p> <br /> <p> <?((["jd" "還未添加節點人員!" = ["jd"]; ( =>){ = "select name from users where uid='{}'" = ->StrQuery(,0); "<p>{}--{}--<input type='button' value='刪除' class='del' code='{}' /></p>"?> </p> <br /> <p><input type="text" id="name" /> </p> <br /> <input type="button" value="建立" id="addbtn" /> </body> <script> "#add").click( uid = $("#users")..:"flowchuli.php",:"POST",:{uid:uid,type:0},:"TEXT",:.location.href = "flow.php"".del").click( k = $(this).attr("code"); $.:"flowchuli.php",:"POST",:{k:k,type:1},:"TEXT",:.location.href = "flow.php" $("#addbtn").click( name = $("#name")..:"flowchuli.php",:"POST",:{name:name,type:2},:"TEXT",:"添加成功!"</script></html>
2.做建立流程頁面的處理頁面flowchuli.php
<?phpsession_start();require_once "./DBDA.class.php";$db = new DBDA();$type = $_POST["type"];switch($type){ case 0: $uid = $_POST["uid"]; if(empty($_SESSION["jd"])){//暫存節點 $arr = array($uid);//新造數組 $_SESSION["jd"] = $arr;//存入session }else{ $arr = $_SESSION["jd"];//取數組 $arr[] = $uid;//追加變數到數組 $_SESSION["jd"] = $arr; } break; case 1: $k = $_POST["k"]; $arr = $_SESSION["jd"]; unset($arr[$k]); $arr = array_values($arr);//重新對數組進行排序,有傳回值接收 $_SESSION["jd"] = $arr; break; case 2: $name = $_POST["name"]; $code = time();//自動產生 $sql = "insert into flow values('{$code}','{$name}')";//流程表 $db->query($sql); //流程節點表 $arr = $_SESSION["jd"]; foreach($arr as $k=>$v){ $sql = "insert into flowpath values(0,'{$code}','{$v}',{$k})"; $db->query($sql); } break;}
效果
點擊選擇節點人員可以從資料庫調所有人員名單,現在把李四,馬七和張三放入流程中,做一個請假流程:
注意:Code必須用varchar,不能用time,因為在上面用了時間戳記
3.現在我們在做一個登陸使用者頁面flowlogin.php,提交請假流程的所有步驟:
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> <script src="bootstrap/js/bootstrap.min.js"></script> <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/> </head> <style> .-left:-top:.-left:-top: -.name,.-width:.-top:</style> <body> <form ="form-horizontal" role="form"> <h3 ="title">使用者登入</h3> <p ="quanju"> <p ="form-group yangshi1"> <label ="firstname" ="col-sm-2 control-label">使用者名稱:</label> <p ="col-sm-10"> <input type="text" ="form-control name" id="uid" placeholder="請輸入使用者名稱"> </p> </p> <p ="form-group yangshi2"> <label ="lastname" ="col-sm-2 control-label">密碼:</label> <p ="col-sm-10"> <input type="text" ="form-control pwd" id="pwd" placeholder="請輸入密碼"> </p> </p> <p ="form-group"> <p ="col-sm-offset-2 col-sm-10"> <p ="checkbox"> <label> <input type="checkbox"></label> <label> <input type="checkbox"></label> </p> </p> </p> <p ="form-group"> <p ="col-sm-offset-2 col-sm-10"> <button type="button" id="login" ="btn btn-warning" value="登入" ></button> </p> </p> </p> </form> </body> <script>"#login").click( uid = $("#uid"). pwd = $("#pwd")..:"post",:"flowloginchuli.php",:{uid:uid,pwd:pwd},:"TEXT",:(data.()=="OK".location.href="flowmain.php""使用者名稱或密碼有誤!"</script></html>
4.登入後跳轉的首頁面flowmain.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h2>首頁面</h2> <a href="flowfq.php">發起流程</a> <a href="flowsh.php">審核流程</a> </body> </html>
5.發起流程頁面flow.php
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> </head> <body> <h2>發起流程</h2> <form action="flowfqchuli.php" method="post"> 請選擇流程: <select name="flow"> <?php require_once "./DBDA.class.php"; $db = new DBDA(); $sql = "select * from flow"; $arr = $db->query($sql,0); foreach($arr as $v){ echo "<option value='{$v[0]}'>{$v[1]}</option>"; } ?> </select> <br /> <br /> 請輸入內容: <textarea name="content"></textarea> <br /> <br /> <input type="submit" value="確定" /> </form> </body></html>
6.做發起流程的處理頁面flowfq.php
<?phpsession_start();require_once "./DBDA.class.php";$db = new DBDA();$code = $_POST["flow"];$uid = $_SESSION["uid"];$content = $_POST["content"];$time = date("Y-m-d H:i:s");$sql = "insert into userflow values(0,'{$code}','{$uid}','{$content}',0,'{$time}',0)";$db->query($sql);header("location:flowmain.php");
7.審核頁面flowsh.php
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> <script src="bootstrap/js/bootstrap.min.js"></script> <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/> </head> <body> <p><h2>審核頁面</h2> <table class="table table-bordered"> <thead> <tr> <th>流程代號</th> <th>發起人</th> <th>發起內容</th> <th>通過狀態</th> <th>發起時間</th> <th>操作</th> </tr> </thead> <tbody> <?php session_start(); $uid = $_SESSION["uid"]; require_once "./DBDA.class.php"; $db = new DBDA(); //相互關聯的子查詢(用到父查詢的資料)(父查詢卡在某一位置) $sql = "select * from userflow a where towhere>=(select b.order from flowpath b where b.code=a.code and b.uid='{$uid}')"; $arr = $db->query($sql,0); foreach($arr as $v){ //$v[6];//流程走到的位置towhere //$v[1];//利用代號和session中存的name查詢order $sql = "select order from flowpath where code='{$v[1]}' and uid='{$uid}'"; $order = $db->StrQuery($sql,0);//該人員在流程中的次序 $str = ""; if($v[6]==$order){ //傳主索引值 $str = "<a href='flowtgchuli.php?ids={$v[0]}'>通過</a>"; }else{ $str = "<span style='color:green'>已通過</span>"; } echo "<tr> <th>{$v[1]}</th> <th>{$v[2]}</th> <th>{$v[3]}</th> <th>{$v[4]}</th> <th>{$v[5]}</th> <th>{$str}</th> </tr>"; } ?> </tbody> </table> </p> </body></html>
8.做審核頁面的處理頁面flowshchuli.php
<?phpsession_start();$uid = $_SESSION["uid"];require_once "./DBDA.class.php";$db = new DBDA();$ids = $_GET["ids"];$sql = "update userflow set towhere=towhere+1 where ids='{$ids}'";$db->query($sql);//判斷;流程是否結束(使用相互關聯的子查詢)$swc = "update userflow a set isok=1 where ids='{$ids}' towhere>=(select count(*) from flowpath b where b.code=a.code)";header("location:flowsh.php");
流程效果
李四的頁面:
點擊通過後:
資料庫:towhere變成1後結束流程
接著該馬七:
然後是張三:
資料庫:isok變成1後結束流程