溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用php寫一個管理外借設備的小工具--技術提高生產力

發布時間:2020-07-16 14:16:53 來源:網絡 閱讀:921 作者:brucetam322 欄目:web開發

我學網站編程屬于半途出家的類型,本是搞運維的,進了現在的公司后意識到學習一門編程語言的重要性,便從平時的工作時間里抽出部分來做學習和練習。

公司做技術的都是屬于編程出身的,從網站設計到手機程式設計,好像大多數的人都在走這樣的一條道路。

公司的部分業務是做手機游戲開發的,測試設備也越來越多,管理權歸我們運維兩個人所有,一直以來都是用個小筆記本做外借的登記,每天都有不同的測試人員過來借設備,ipad,iphone,android機,借了又還,還了另外一個人過來借,不用多久,那筆記本已經累積到厚厚的一疊了。我想要不寫個小工具來登記代替人手的繁瑣操作,一來可以當做技術練兵,二來可以顯示顯示IT部的專業技能,呵呵。

二話不說,馬上動手。

需求:

  1. 列出所有測試設備的外借狀態,我們給每臺設備分配一個唯一的號碼做記錄。狀態包括是否借出了,借出時間,借出人員,是否歸還了,歸還時間。

  2. 如果是外借了,顯示外借人是誰,借出時間,此時外借按鈕無法操作,歸還按鈕可操作。

  3. 如果已歸還, 顯示歸還時間,此時歸還按鈕無法操作,外借按鈕可操作。

  4. 列出公司經常要借設備的人的名字,選擇菜單操作。

  5. 提交外借操作的時候,如果外借人名字為空,則不允許操作,用js控制。



關于數據庫,用mysql,簡單的一張表

CREATE TABLE `device_map` (
  `device_id` varchar(10) NOT NULL,
  `alias` varchar(30) DEFAULT NULL,
  `staff` varchar(30) DEFAULT NULL,
  `borrowed` tinyint(1) DEFAULT '0' COMMENT '0 = in stock / 1 = borrowed',
  `borrow_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `return_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`device_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

用php寫一個管理外借設備的小工具--技術提高生產力


關于數據庫的操作,我沿用之前寫的一個簡單php class,因為都是涉及更新的操作,所以比較簡單,這里寫的class只是為了記錄一下,其實這個例子里用到的class里面的功能只是很少:

<?php
class Database
{
    protected $conn, $sql, $resultSet;
    protected $errMsg;
    protected $db;

    private $trace = false, $logFile, $showError = false;

    function __construct($host, $userid, $password, $db, $port = "3306", $encoding="utf8")
    {
        $this->Open($host, $userid, $password, $db, $port, $encoding);
    }
    
    function Open($host, $userid, $password, $db, $port = "3306", $encoding="utf8")
    {
        $host = $host . ":" . $port;

        $this->conn = @mysql_connect($host, $userid, $password);
        mysql_query("SET NAMES '{$encoding}'");

        if (!$this->conn) {
            $this->errMsg  = mysql_error();
            if ($this->showError)
                echo $this->errMsg."\n";
            if ($this->logFile)
                error_log ( date("Y-m-d H:i:s")."\t".$this->errMsg."\n", 3, $this->logFile);
            return false;
        }
        if (!@mysql_select_db($db)) {
            $this->errMsg  = mysql_error();
            if ($this->showError)
                echo $this->errMsg."\n";
            if ($this->logFile)
                error_log ( date("Y-m-d H:i:s")."\t".$this->errMsg."\n", 3, $this->logFile);
            return false;
        }
        $this->db = $db;
        return true;
    }
    
    function Close()
    {
        if ($this->conn) {
            if (!@mysql_close($this->conn)) {
                $this->errMsg  = mysql_error();
                if ($this->showError)
                    echo $this->errMsg."\n";
                if ($this->logFile)
                    error_log ( date("Y-m-d H:i:s")."\t".$this->errMsg."\n", 3, $this->logFile);
                return false;
            } else {
                $this->conn      = "";
                $this->sql       = "";
                $this->resultSet = "";
            }
        }
        return true;
    }
    
    function Query($sql)
    {
        if ($this->trace) echo $sql . "\n";
        
        $this->resultSet = @mysql_query($sql);
        if (!$this->resultSet) {
            $this->errMsg  = mysql_error();
            if ($this->showError)
                echo $this->errMsg."\n";
            if ($this->logFile)
            {
                error_log ( date("Y-m-d H:i:s")."\t".$sql."\n", 3, $this->logFile);
                error_log ( date("Y-m-d H:i:s")."\t".$this->errMsg."\n", 3, $this->logFile);
            }
            return false;
        }
        return $this->resultSet;
    }
    
    function Fetch()
    {
        if ($this->resultSet) {
            $oldmsg  = mysql_error();
            $row = @mysql_fetch_assoc($this->resultSet);
            if ($oldmsg != mysql_error()) {
                if ($this->showError)
                    echo $this->errMsg."\n";
                $this->errMsg  = mysql_error();
                if ($this->logFile)
                    error_log ( date("Y-m-d H:i:s")."\t".$this->errMsg."\n", 3, $this->logFile);
                return false;
            }
            return $row;
        }
    }
    
    #function checkUser($username,$email)
    function checkUser($username)
    {
        $sql1="select * from users where `username`='".$username."'";
        #$sql2="select * from users where `email`=$email";
        #$this->Query($sql1);
        
        return $this->FetchNumRows();
        return $username;
    }


    function FetchResult()
    {
        if ($this->resultSet) {
            $oldmsg  = mysql_error();
            $row = @mysql_result($this->resultSet, 0);
            if ($oldmsg != mysql_error()) {
                $this->errMsg  = mysql_error();
                if ($this->showError)
                    echo $this->errMsg."\n";
                if ($this->logFile)
                    error_log ( date("Y-m-d H:i:s")."\t".$this->errMsg."\n", 3, $this->logFile);
                return false;
            }
            return $row;
        }
    }

    function FetchNumRows()
    {
        if ($this->resultSet) {
            $oldmsg  = mysql_error();
            $row = @mysql_num_rows($this->resultSet);
            if ($oldmsg != mysql_error()) {
                $this->errMsg  = mysql_error();
                if ($this->showError)
                    echo $this->errMsg."\n";
                if ($this->logFile)
                    error_log ( date("Y-m-d H:i:s")."\t".$this->errMsg."\n", 3, $this->logFile);
                return false;
            }
            return $row;
        }
    }
    
    function FetchAll()
    {
        $rows = array();
        while ($row = $this->Fetch())
        {
            $rows[] = $row;
        }
        return $rows;
    }

    function FetchResultDetailAll()
    {
        if ($this->resultSet) {
            $totalrows = @mysql_num_rows($this->resultSet);
            $oldmsg  = mysql_error();
            for ($i=0; $i<$totalrows; $i++){
                $rows[$i] = @mysql_fetch_assoc($this->resultSet);
                if ($oldmsg != mysql_error()) {
                    $this->errMsg  = mysql_error();
                    if ($this->showError)
                        echo $this->errMsg."\n";
                    if ($this->logFile)
                        error_log ( date("Y-m-d H:i:s")."\t".$this->errMsg."\n", 3, $this->logFile);
                    return false;
                }
            }
            return $rows;
        }
    }

    function FetchResultAll()
    {
        if ($this->resultSet) {
            $totalrows = @mysql_num_rows($this->resultSet);
            $oldmsg  = mysql_error();
            for ($i=0; $i<$totalrows; $i++){
                $rows[] = @mysql_result($this->resultSet, $i);
                if ($oldmsg != mysql_error()) {
                    $this->errMsg  = mysql_error();
                    if ($this->showError)
                        echo $this->errMsg."\n";
                    if ($this->logFile)
                        error_log ( date("Y-m-d H:i:s")."\t".$this->errMsg."\n", 3, $this->logFile);
                    return false;
                }
            }
            return $rows;
        }
    }

    function GetId()
     {
        $sql = "SELECT LAST_INSERT_ID() AS ID";
        $result = $this->Query($sql);
        if ($result) {
            $rs = $this->Fetch();
            return $rs["ID"];
        }
    }

    function replaceRecord($table, array $values, $type = "REPLACE")
    {
        foreach ($values as  $key=>$value){
            $ar_str[] = "`". $key . "`" . " = '". $value ."'";
        }
        $str = implode(", ", $ar_str);
        $sql = "$type INTO $table SET $str";
        #echo $sql."\n";
        return $this->Query($sql);
        #return $str;
        #return $sql;
    }

    function deleteRecord($table, array $values)
    {
        foreach ($values as  $key=>$value){
            $ar_str[] = "`". $key . "`" . " = '". $value ."'";
        }
        $str = implode(" and ", $ar_str);
        $sql = "DELETE FROM $table where $str";
        return $this->Query($sql);
        #return $str;
        #return $sql;
    }


    function Insert($table, array $values, $type = "INSERT")
    {
        foreach ($values as  $key=>$value){
            $ar_str[] = "`". $key . "`" . " = '". $this->AddQuote($value) ."'";
        }
        $str = implode(", ", $ar_str);
        $sql = "$type INTO $table SET $str";
        return $this->Query($sql);
    }

    function Update($table, array $values, $wherestr)
    {
        foreach ($values as  $key=>$value){
            $ar_str[] = "`". $key . "`" . " = '". $this->AddQuote($value) ."'";
        }
        $str = implode(", ", $ar_str);
        $sql = "UPDATE $table SET $str WHERE $wherestr";
        return $this->Query($sql);
    }

    function Replace($table, array $values)
    {
        return $this->Insert($table, $values, "REPLACE");
    }

    function GetList($table, $wherestr = "", array $option = array())
    {
        
        $fieldstr = isset($option["fields"]) ? $option["fields"] : "*";

        $sql = "SELECT $fieldstr FROM " . $table;
        if ($wherestr != "") $sql .= " WHERE $wherestr ";

        if (isset($option["orderby"]) && $option["orderby"])
        {
            $sql .= " ORDER BY ". $option["orderby"];
        }
        if (isset($option["limit"]) && isset($option["offset"]) && $option["limit"] && $option["offset"])
        {
            $sql .= " LIMIT {$option["offset"]},{$option["limit"]}";
        }

        $rs = $this->Query($sql);

        while ($row = $this->Fetch())
        {
            if (!(isset($option["key"]) && $option["key"]))
            {
                $data[] = $row;
            }
            else
            {
                if(!(isset($option["key_array"]) && $option["key_array"]))
                {
                    $data[$row[$option["key"]]] = $row;
                }
                else
                {
                    $data[$row[$option["key"]]][] = $row;
                }
            }
        }
        return $data;
    }

    protected function AddQuote($str)
    {
        //$str = mysql_real_escape_string($str);
        //$str = str_replace('\\', '\\\\', $str);
        //$str = str_replace('\\"', '"', $str);
        //$str = ereg_replace ("'", "''", $str);
        return $str;
    }

    function GenOption($default_sort = '', $default_order = '')
    {
        $page = $_POST["page"];
        $rows = $_POST["rows"];
        $sort = $_POST["sort"] ? $_POST["sort"] : $default_sort;
        $order = $_POST["order"] ? $_POST["order"] : $default_order;
        $offset = ($page - 1) * $limit;
        if ($page)
        {
            $option["offset"] = $offset;
            $option["limit"] = $limit;
            $option["limit_sql"] = " LIMIT $offseta,$limit";
        }
        if ($sort)
        {  
            if (empty($order))
            {   
                $order = "asc";
            }   
            $option["orderby"] = $sort." ".$order;
            $option["orderby_sql"] = " ORDER BY $sort $order";
        }   
        return $option;
    }

    function HasOperator($str)
    {
        $str = trim($str);
        if ( ! preg_match("/(\s|<|>|!|=|is null|is not null| like )/i", $str))
        {
            return FALSE;
        }

        return TRUE;
    }

    public function GenWhere()
    {
        $where = array();
        if ($search = $_POST["search"])
        {
            foreach ($search as $key=>$value)
            {
                $ar_key = explode(":", $key);
                if (is_string($value))
                {
                    if ($value !== "")
                    {
                        $ar_where = array();
                        foreach ($ar_key as $k)
                        {
                            if ($this->HasOperator($value))
                            {
                                $ar_where[] = is_numeric($k) ? $value : $k." ".$value;
                            }
                            else
                            {
                                $ar_where[] = $k." = '".$value."'";
                            }
                        }
                        $where_key = "(".implode(" || ", $ar_where).")";
                        $where[] = $where_key;
                    }
                }
                elseif (is_array($value))
                {
                    foreach ($value as $operator=>$search_value)
                    {
                        if ($search_value !== "")
                        {
                            $ar_where = array();
                            foreach ($ar_key as $k)
                            {
                                switch ($operator)
                                {
                                    case "bm":
                                        $ar_where[] = $k." LIKE '%".$search_value."%'";
                                        break;
                                    case "rm":
                                        $ar_where[] = $k." LIKE '".$search_value."%'";
                                        break;
                                    case "lm":
                                        $ar_where[] = $k." LIKE '%".$search_value."'";
                                        break;
                                    case "gt":
                                        $ar_where[] = $k." > '". $search_value."'";
                                        break;
                                    case "ge":
                                        $ar_where[] = $k." >= '". $search_value."'";
                                        break;
                                    case "lt":
                                        $ar_where[] = $k." < '".$search_value."'";
                                        break;
                                    case "le":
                                        $ar_where[] = $k." <= '".$search_value."'";
                                        break;
                                    case "gt-t":
                                        $ar_where[] = $k." > '". $search_value." 00:00:00'";
                                        break;
                                    case "ge-t":
                                        $ar_where[] = $k." >= '". $search_value." 00:00:00'";
                                        break;
                                    case "lt-t":
                                        $ar_where[] = $k." < '".$search_value." 23:59:59'";
                                        break;
                                    case "le-t":
                                        $ar_where[] = $k." <= '".$search_value." 23:59:59'";
                                        break;
                                }
                            }
                            $where_key = "(".implode(" || ", $ar_where).")";
                            $where[] = $where_key;
                        }
                    }
                }
            }
        }
        return $where ? " WHERE " . implode(" AND ", $where) : "";
    }

    function SetTrace($value)
    {
        $this->trace = $value;
    }

    function SetShowError($value)
    {
        $this->showError = $value;
    }

    function SetLogFile($value)
    {
        $this->logFile= $value;
    }

    function GetErrMsg()
    {
        return $this->errMsg;
    }
}

?>


還有個簡單的配置文件:

<?php
$DB["host"] = "127.0.0.1";
$DB["user"] = "###";
$DB["pass"] = "###";
$DB["name"] = "device_management";
$DB["encoding"] = "utf8";
//數據庫的連接參數
$staff=array(
                'Funny Ho'        , 
                'Tom Chan'    , 
                'Bruce Tam'        , 
               
        );
//列出員工的名字
?>


程序是php寫的,代碼如下,做部分的注釋說明

<html>
<head>
<link rel="stylesheet" type="text/css" href="css/style.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
//我這里用jquery的庫,主要是喜歡它操作DOM的時候省去不少代碼,方便高效。
<script type="text/javascript">
$(document).ready(function(){
    $(".borrow_disable").attr('disabled','disable');
    $(".return_disable").attr('disabled','disable');
    $(".select_staff").each(function(){
        var staff=$(this).val();
        //alert(staff);
        $(this).closest('td').next().find('input[name="staff"]').val(staff);
    })
//第一個函數控制已外借狀態和以歸還狀態的設備各自的按鈕將無法操作
    $(".select_staff").each(function(){
        $(this).change(function(){
        var staff=$(this).val();
        $(this).closest('td').next().find('input[name="staff"]').val(staff);
    });
        //alert(staff);
    })
//第二個函數控制選擇表單的選中項同步到提交外借的表單里,表單里的輸入項是隱藏的。
    $(".borrow_form").each(function(){
      $(this).submit(function(event){
          var staff=$(this).find('input[name="staff"]').val();
          if (staff=="N/A")
              {
                  event.preventDefault();
                  alert('please select a staff!');
              }

    })
      })
//第三個函數控制如果提交外借按鈕點擊時外借人員名字為"N/A"是將無法操作,就是規定外借的時候必須選擇外借的人是誰。        


});
</script>
</head>
<body>
<div class=content>
<table>
<tr><th>Device</th><th>Staff</th><th>Borrow</th><th>Borrow Time</th><th>Return</th><th>Return Time</th></tr>
<?php
require_once('device_management/database.php');
require_once('device_management/config.inc');
//加載數據庫的操作文件

$staff_list=$staff;
$DB = new Database ($DB["host"], $DB["user"], $DB["pass"], $DB["name"]);

if ($_REQUEST['borrowed']==1)
    {
        $data['borrowed']=1;
        if    ((!empty($_REQUEST['device_id'])) and (!empty($_REQUEST['staff'])) and ($_REQUEST['staff']!=="N/A"))
            {
                $data['device_id']=$_REQUEST['device_id'];
                $data['staff']=$_REQUEST['staff'];
                $data['borrow_time']=date('Y-m-d H:i:s',time());
                $DB->replaceRecord('device_map',$data);
            }
    }
if ($_REQUEST['borrowed']==0)
    {
        $data['borrowed']=0;
        if    (!empty($_REQUEST['device_id']))
            {
                $data['device_id']=$_REQUEST['device_id'];
                $data['staff']=$_REQUEST['staff'];
                $data['return_time']=date('Y-m-d H:i:s',time());
                $DB->replaceRecord('device_map',$data);
            }
}
//var_dump($data);

//上面的代碼檢查是否有提交表單的操作,如果有,再判斷是外借還是歸還的操作。

$sql="select `device_id`,`staff`,`borrowed`,`borrow_time`,`return_time` from `device_map`";
$rs=$DB->Query($sql);
while ($row=mysql_fetch_assoc($rs) )
{
            $machine=$row['device_id'];
            if ($row['borrow_time']!=='0000-00-00 00:00:00')
                {
                    $borrow_time=$row['borrow_time'];
                    $borrow_time_class="borrow_time";
                }
            else 
                {    
                    $borrow_time="N/A";
                    $borrow_time_class="no_time";
                }
            if ($row['return_time']!=='0000-00-00 00:00:00')
                {
                    $return_time=$row['return_time'];
                    $return_time_class="return_time";
                }
            else
                {
                     $return_time="N/A";
                     $return_time_class="no_time";
                }

            if    (is_null($row['staff'] ))
                {
                    $staff="N/A";
                }
            else $staff=$row['staff'];
            if ($staff=="N/A")
                {
                    $staff="N/A";
                }
            if ($row['borrowed']==0)
                {
                    $borrow_class='borrow_enable';
                    $borrowed=0;
                    $return_class='return_disable';
                }
            else
                {
                    $borrow_class='borrow_disable';
                    $borrowed=1;
                    $return_class='return_enable';
                }
            $options="";
            //echo $staff;exit;
            if ($staff=="N/A") 
                        {
                            $options="<option selected value=\"N/A\">N/A</option>"    ;
                            //echo $options."\n";
                        }
            else
                        {
                            $options="<option value=\"N/A\">N/A</option>"    ;
                            $selected_class="unselected";
                        }
            foreach ($staff_list as $stf)
                {
                    if ($staff == $stf)
                        {
                            $options.="<option style=\"background-color:green;color:#FFF\" selected value=\"".$staff."\">$staff</option>"    ;
                            $selected_class="selected";
                        }
                    else 
                        {
                            $options.="<option value=\"$stf\">$stf</option>";
                            //$selected_class="unselected";
                        }
                }
            //echo $options;
            $borrow_form="<form  class=borrow_form action=index.php method=get><input class=hidden value=$machine name=device_id></input><input class=\"hidden\" value=\"\" name=staff><input class=hidden value=1 name=borrowed></input><input class=$borrow_class type=submit value=borrow></input></form>";
            $return_form="<form  class=return_form action=index.php methond=get><input class=hidden value=$machine name=device_id></input><input class=hidden value=0 name=borrowed></input><input class=$return_class type=submit value=return></input></form>";
            echo "<tr><td class=machine>".$machine."</td><td class=staff><select class=\"select_staff\" name=staff>$options</select></td><td>$borrow_form</td><td class=$borrow_time_class>$borrow_time</td><td>".$return_form."</td><td class=$return_time_class>$return_time</td></tr>";
    //    }
}

//上面的循環是根據設備的狀態輸出不同的css樣式以方便管理者瀏覽,比如外借狀態下顯示外借的時間為紅色背景,外借按鈕無法操作,歸還按鈕可操作。
//歸還狀態下顯示的時間為綠色背景,并且歸還按鈕不可操作,外借按鈕可操作。
$DB->Close();
?>
</table>
</div>
</body>
</html>

下面截個圖展示一下界面的設計:

用php寫一個管理外借設備的小工具--技術提高生產力


由圖可以看到當設備已被借出的時候,外借按鈕沒法操作,顯示外借時間,背景為紅色,此時只能點歸還的按鈕,當設備已歸還,顯示歸還時間,顯示綠色背景,前面的外借按鈕可以操作,但先要從選擇菜單選擇一個外借的人員才能操作。這部分的功能主要靠javascript來控制。前面的簡單的js代碼里有說明。

寫下這個小小的程序希望能夠在工作上能夠幫到自己減少重復的操作,并且讓自己保持學習狀態和培養寫程序的習慣。

love,code,this is my life.

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女