背景:公司內部的項目情況,雲點、服務器、IP等資源情況都需要做登記管理。起初都是用excel表格進行登記,但由於表格數量多,登記麻煩管理麻煩,而且不方便運維工程師們協同工作。針對這個問題,我們從svn轉到dzzoffice;但因爲表格過多還是很不方便。
由於本人可以說毫無數據庫和PHP經驗,所以只能做一回代碼界的搬運工了。
主題:
一、開設Centos7雲主機,搭建基本環境
基礎環境要求:http+php+phpmyadmin+mysql(本案適用了centos7自帶的mariadb,與mysql指令上會有些差別)
基礎環境搭建很簡單,只貼代碼不做闡述
systemctl stop firewalld
systemctl disable firewalld
yum install iptables iptables-services -y
systemctl start iptables
systemctl enable iptables
iptables -F
ptables -Z
iptables -X
iptables -L
service iptables save
yum install httpd -y
systemctl start httpd
yum install epel-release
yum -y install mariadb-server
systemctl start mariadb
systemctl enable mariadb
yum install -y install phpMyAdmin php-mysql php-mcrypt
mysql_secure_installation #基本就是一路Y
setenforce 1 #記得進/etc/selinux/conf 把enforcing改成disabled
關於phpmyadmin的配置可以參考如下鏈接:
https://www.cnblogs.com/teamemory/p/8668030.html
主要是放行客戶端的web訪問:
二、把excel中的數據導入到mysql中
1. 首先創建數據庫和表
登入phpmyadmin,創建數據庫http://192.168.0.47:8780/phpmyadmin
然後創建表,先選一個簡單的表格實踐下。
先填入表名,字段數,然後點擊執行。再輸入字段名字以及類型。
CaseID是爲了方便後期增刪改操作,故在excel基礎上增加了CaseID字段,並設置爲primary。
2. 在excel表格中自動生成mysql語句
參考博主https://blog.csdn.net/xxj_jing/article/details/8190146
在寫mysql指令的時候發現每次都要輸入CaseID,很麻煩。想着有沒有可以自增加的ID。網上找下,果然後自增主鍵。
進入數據庫,給CaseID 字段配置自增屬性:
alter table cases drop primary key; //因爲前面有設置CaseID爲主鍵,所以先刪除主鍵屬性
alter table cases modify CaseID CaseID int(11) not null AUTO_INCREMENT primary key;
//重新配置自增主鍵屬性
3. 複製步驟2中生成的指令,把數據導入到mysql
三、敲代碼
想法:PHP或者Python讀取數據庫中cases表,然後像excel一樣展示到web。同時能夠增刪改;
python只會腳本,不會web。PHP一直號稱”世界上最好的語言”。所以選擇PHP做嘗試。
喝水不忘挖井人:https://blog.csdn.net/bboyjoe/article/details/48731223
1. 首先肯定先寫連接數據庫的代碼,數據庫都對接不上還展示個啥。
在/var/www/html/test1/下創建鏈接數據庫的函數文件functions.php
<?php
define('MYSQL_HOST','localhost');
define('MYSQL_USER','root');
define('MYSQL_PW','xxxxxx');
function connnetDb(){
//連接mysql數據庫
$conn=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PW);
//排除連接數據庫異常錯誤
if(!$conn){
die('can not connect db');
}
//在mysql中選中myapp數據庫
mysql_select_db("ydydatabase");
mysql_query("set names utf8");
return $conn;
}
?>
2. 寫展示cases表的代碼
在/var/www/html/test1/下創建展示的網頁文件case.php 。
<?php
require_once 'functions.php';
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>易達雲專案</title>
<style>
table{
border-collapse: collapse;
}
th,td{
border:1px solid #ccccff;
padding: 5px;
}
td{
text-align: center;
}
</style>
</head>
<body>
<a href="addcase.html">添加專案記錄</a><br></br>
<table>
<tr><th>專案id</th><th>客戶編號</th><th>專案名</th><th>專案編號</th><th>客戶對接窗口</th><th>技術負責人</th><th>階段</th><th>服務時間</th><th>服務內容</th><th>操作</th></tr>
<?php
//連接數據庫
connnetDb();
//查詢數據表中的所有數據,並按照id降序排列
$result=mysql_query("SELECT * FROM `cases`");
//獲取數據表的數據條數
$dataCount=mysql_num_rows($result);
//echo $dataCount;
//打印輸出所有數據
for($i=0;$i<$dataCount;$i++){
$result_arr=mysql_fetch_assoc($result);
$caseid=$result_arr['CaseID'];
$custnum=$result_arr['CustNum'];
$casename=$result_arr['CaseName'];
$casenum=$result_arr['CaseNum'];
$custwindow=$result_arr['CustWindow'];
$tecdirector=$result_arr['tecdirector'];
$phase=$result_arr['phase'];
$servicetime=$result_arr['servicetime'];
$content=$result_arr['content'];
//print_r($result_arr);
echo "<tr><td>$caseid</td><td>$custnum</td><td>$casename</td><td>$casenum</td><td>$custwindow</td><td>$tecdirector</td><td>$phase</td><td>$servicetime</td><td>$content</td><td><a href='editcase.php?id=$caseid'>修改</a> <a href='deletecase.php?id=$caseid'>刪除</a></td></tr>";
}
?>
</table>
</body>
</html>
登入網頁看下效果:
3. 接下來寫添加數據的頁面。
vim addcase.html
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>添加專案</title>
</head>
<body>
<form action="addcase.php" method="post">
<label>客戶編號:</label><input type="text" name="CustNum"><br></br>
<label>專案名:</label><input type="text" name="CaseName"><br></br>
<label>專案編號:</label><input type="text" name="CaseNum"><br></br>
<label>客戶對接窗口:</label><input type="text" style="width:500px;" name="CustWindow"><br></br>
<label>技術負責人:</label><input type="text" name="tecdirector"><br></br>
<label>階段:</label><input type="text" name="phase"><br></br>
<label>服務時間:</label><input type="text" name="servicetime"><br></br>
<label>服務內容:</label><input type="text" style="width:900px;" name="content"><br></br>
<input type="submit" value="提交">
</form>
</body>
</html>
vim addcase.php
<?php
require_once 'functions.php';
//首先進行非空檢查
if(!isset($_POST['CaseName'])){
die('請輸入專案名');
}
if(!isset($_POST['tecdirector'])){
die('請輸入技術負責人');
}
if(!isset($_POST['phase'])){
die('請輸入專案階段');
}
if(!isset($_POST['content'])){
die('請輸入專案內容');
}
$CustNum=$_POST['CustNum'];
$CaseName=$_POST['CaseName'];
$CaseNum=$_POST['CaseNum'];
$CustWindow=$_POST['CustWindow'];
$tecdirector=$_POST['tecdirector'];
$phase=$_POST['phase'];
$servicetime=$_POST['servicetime'];
$content=$_POST['content'];
if(empty($CaseName)){
die('CaseName is empty');
}
if(empty($tecdirector)){
die('tecdirector is empty');
}
if(empty($phase)){
die('phase is empty');
}
if(empty($content)){
die('content is empty');
}
//連接數據庫
connnetDb();
//執行類型轉換,防止SQL注入
//$CaseID=intval($CaseID); //因爲CaseID後面設置了自增屬性,所以不需要轉換
//插入數據
mysql_query("INSERT INTO cases (`CustNum`,`CaseName`,`CaseNum`,`CustWindow`,`tecdirector`,`phase`,`servicetime`,`content`) VALUES('$CustNum','$CaseName','$CaseNum','$CustWindow','$tecdirector','$phase','$servicetime','$content')");
//返回列表頁面
if(mysql_error()){
echo mysql_error();
}else{
header("Location:case.php");
}
4. 修改的功能
vim editcase.php
<?php
require_once 'functions.php';
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>修改專案</title>
</head>
<body>
<?php
if(!empty($_GET['id'])){
connnetDb();
//查找CaseID
$id=intval($_GET['id']);
$result=mysql_query("SELECT * FROM cases WHERE CaseID=$id");
echo("CaseID: $id");
if(mysql_error()){
die('can not connect db');
}
//獲取結果數組
$result_arr=mysql_fetch_assoc($result);
}else{
die('CaseID not define');
}
?>
<form action="editcase_server.php" method="post">
<label>專案ID:</label><input type="text" name="CaseID" value="<?php echo $result_arr['CaseID']?>"><br></br>
<label>客戶編號:</label><input type="text" name="CustNum" value="<?php echo $result_arr['CustNum']?>"><br></br>
<label>專案名:</label><input type="text" name="CaseName" value="<?php echo $result_arr['CaseName']?>"><br></br>
<label>專案編號:</label><input type="text" name="CaseNum" value="<?php echo $result_arr['CaseNum']?>"><br></br>
<label>客戶對接窗口:</label><input type="text" style="width:900px;" name="CustWindow" value="<?php echo $result_arr['CustWindow']?>"><br></br>
<label>技術負責人:</label><input type="text" name="tecdirector" value="<?php echo $result_arr['tecdirector']?>"><br></br>
<label>階段:</label><input type="text" name="phase" value="<?php echo $result_arr['phase']?>"><br></br>
<label>服務時間:</label><input type="text" name="servicetime" value="<?php echo $result_arr['servicetime']?>"><br></br>
<label>服務內容:</label><input type="text" style="width:900px;" name="content" value="<?php echo $result_arr['content']?>"><br></br>
<input type="submit" value="提交修改">
</form>
</body>
</html>
vim editcase_server.php
<?php
require_once 'functions.php';
if(empty($_POST['CaseID'])){
die('CaseID is empty');
}
if(empty($_POST['CaseNum'])){
die('CaseNum is empty');
}
if(empty($_POST['tecdirector'])){
die('tecdirector is empty');
}
if(empty($_POST['phase'])){
die('phase is empty');
}
$id=$_POST['CaseID'];
$CustNum=$_POST['CustNum'];
$CaseName=$_POST['CaseName'];
$CaseNum=$_POST['CaseNum'];
$CustWindow=$_POST['CustWindow'];
$tecdirector=$_POST['tecdirector'];
$phase=$_POST['phase'];
$servicetime=$_POST['servicetime'];
$content=$_POST['content'];
//連接數據庫
connnetDb();
//修改指定數據
mysql_query("UPDATE cases SET CustNum = '$CustNum', CaseName = '$CaseName', CaseNum = '$CaseNum', CustWindow = '$CustWindow', tecdirector = '$tecdirector', phase = '$phase', servicetime = '$servicetime', content = '$content' WHERE CaseID = '$id'");
//排錯並返回
if(mysql_error()){
echo mysql_error();
}else{
header("Location:case.php");
}
5. 刪除功能
vim deletecase.php
<?php
require_once 'functions.php';
//判斷是否爲空
if(empty($_GET['id'])){
die('CaseID is empty');
}
//連接數據庫
connnetDb();
$id=intval($_GET['id']);
//$id=$_POST['CaseID']; //不行
//用唯一字段CaseID去匹配數據並刪除
mysql_query("DELETE FROM cases WHERE CaseID='$id'");
if(mysql_error()){
echo mysql_error();
}else{
header("Location:case.php");
}
?>