2020年11月30日 星期一

DB,建置資料庫 MYSQL+PHP (Win2019)

前面有了MSSQL+IIS的實作
當然也不能沒有 MYSQL+apache囉~
這篇就來建置個簡單的PHP網站吧~


實作MYSQL+apache
最重要的就是使用"語系"的部分
連SQL有語系問題
開PHP有語系問題
等會,都會實作起來

一樣設計上
就是DB和WEB放在同一個主機上
DB設計的部分,此文章就不另做說明囉~
可以參考MSSQL+IIS那篇

一、安裝 AppServ
二、設定 PHP 語系
三、透過 CLI 管理 MYSQL

四、透過 WEB 管理 MYSQL
五、建置 DB、tables...等等

六、設定 MYSQL 登入權限
七、建置 PHP 開發環境並設定語系
八、
撰寫 PHP
九、透過Web驗證 PHP 網站


一、安裝AppServ
千萬不要認為
我會去一個套件一個套件的,去安裝整個MYSQL+PHP環境
我不是DBA,在這裡DB的角色
只是為了驗證LAB環境而已

安裝整合好的AppServ
就已經很足夠了

此篇實作所使用的版本為
AppServ 9.3.0(Release Date : 2019-09-29)
此套件包含以下
Apache 2.4.41
PHP 7.3.10
MySQL 8.0.17
phpMyAdmin 4.9.1

下載點
https://www.appserv.org/en/download/

就下載吧~


把檔案
複製到這台VM上
並安裝吧~

【下一步】

能不同意嗎~
【I Agree】

預設就好

通通都要裝喔~

我這台
規劃上為 10.1.0.25
Apache HTTP port 我改成 8080
因為我這台已經有安裝 IIS了~懶得改他的port

不做死就不會死
不要自己嚇自己,請給個好記且常用的密碼
以及在語系的部分
請選擇【Big5 Traditional Chinese】

開始安裝了~

安裝完成

二、設定 PHP 語系
寫PHP一定會遇到的問題
PHP本身用的語系
瀏覽器預設顯示的語系
DB使用的語系
我只是要做LAB,不要那麼複雜
全部統一使用瀏覽器預設的語系就好
畢竟最後看到是文字
總比看到亂碼好吧~

先到PHP的安裝目錄下
預設在C:\AppServ\php7\
並編輯php.ini這個檔案

透過搜尋的方式
找到找到default_charset = "UTF-8"

並改成default_charset = "BIG5"
然後記得要存檔

把Apache服務,重新啟動


開啟網頁,驗證一下
http://10.1.0.25:8080/phpinfo.php
找到 default_charset 參數
現在已經改為是 BIG5囉


三、透過 CLI 管理 MYSQL
透過CLI連進MYSQL管理
選到 AppServ>MySQL Command Line Client


測試一下MYSQL語法
當然要先輸入密碼
查看DB有哪些
#show databases;

新增DB
#create database LabDB_empolyee1;


四、透過 WEB 管理 MYSQL
也可以透過phpMyAdmin進去
管理MYSQL
本篇LAB者要以WEB介面來實作喔

登入
URL為http://10.1.0.25:8080/phpMyAdmin/index.php

五、建置 DB、tables...等等
此章節
細分以下小節,方便網友閱讀
5-1. 建立 DB
5-2. 建立 table
5-3. 新增 紀錄
5-4. 查詢 紀錄


5-1. 建立 DB
點到右邊【SQL】
然後貼上以下SQL語法來新增DB
////////////////
CREATE DATABASE LabDB_employee;
////////////////
最後按下【執行】

這樣就DB就建好了~

5-2. 建立 table
接著
按照DB的規劃
建立以下3個 Table

建立 員工table為 table_employee
//////////////////
USE LabDB_employee;
CREATE TABLE table_employee (
id INT NOT NULL AUTO_INCREMENT,
  no_emp varchar(20),
  name varchar(20),
  sex varchar(10),
  year INT,
  depar varchar(20),
  no_title varchar(10),
  PRIMARY KEY (id)
);
//////////////////

建立table_employee完成

建立 薪資table為 table_pay
//////////////////
USE LabDB_employee;
CREATE TABLE table_pay (
  id INT NOT NULL AUTO_INCREMENT,
  no_emp varchar(20),
  pay INT(30),
  PRIMARY KEY (id)
);
//////////////////

建立table_pay完成


建立 職稱table為 table_title
//////////////////
USE LabDB_employee;
CREATE TABLE table_title (
  id INT NOT NULL AUTO_INCREMENT,
  no_title varchar(10),
  title varchar(30),
  PRIMARY KEY (id)
);
//////////////////


建立table_title完成

5-3. 新增 紀錄
開始新增紀錄囉~
新增紀錄到 table_employee
//////////////////
USE LabDB_employee;
INSERT INTO table_employee (no_emp, name, sex, year, depar, no_title)
values
('HN0001', '髒無忌', '男', 40, '管理部', 'T001'),
('HN0002', '尾小寶', '男', 39, '管理部', 'T002'),
('HN0003', '謝大訊', '男', 32, '產品部', 'T002'),
('HN0004', '張三瘋', '女', 19, '業務部', 'T002'),
('HN0005', '葉小氫', '男', 31, '技術部', 'T002'),
('HN0006', '白云手', '女', 32, '技術部', 'T003'),
('HN0007', '無影角', '男', 33, '技術部', 'T003'),
('HN0008', '嚴小勇', '男', 34, '庶務部', 'T004'),
('HN0009', '陳少林', '男', 30, '技術部', 'T003'),
('HN0010', '照武當', '男', 36, '技術部', 'T003'),
('HN0011', '王峨嵋', '女', 37, '技術部', 'T003');
select * from table_employee;
//////////////////

新增table_employee紀錄完成

新增紀錄到 table_pay
//////////////////
USE LabDB_employee;
INSERT INTO table_pay (no_emp, pay)
VALUES
('HN0001', 99990),
('HN0002', 95000),
('HN0003', 85000),
('HN0004', 85000),
('HN0005', 75000),
('HN0006', 66000),
('HN0007', 66000),
('HN0008', 22000),
('HN0009', 75000),
('HN0010', 66600),
('HN0011', 66600);
select * from table_pay;
//////////////////

新增table_pay紀錄完成

新增紀錄到 table_title
//////////////////
INSERT INTO table_title (no_title, title)
VALUES('T001', '總裁'),
('T002', '經理'),
('T003', '副理'),
('T004', '工友');
select * from table_title;
//////////////////

新增table_title紀錄完成

5-4. 查詢 紀錄

顯示員工資料含薪資、職稱,並依id做排序
//////////////////
select table_employee.id, table_employee.no_emp as '員工編號', table_employee.name as '姓名', table_employee.sex as '性別', table_employee.year as '年齡', table_employee.depar as '部門', table_pay.pay as '薪資', table_title.title as '職稱'
from table_employee
LEFT JOIN table_pay ON table_employee.no_emp = table_pay.no_emp
LEFT JOIN table_title ON table_employee.no_title = table_title.no_title
ORDER BY id;
//////////////////

查詢完成

六、設定 MYSQL 登入權限
新增一個帳號: tony
允許任意來源
可以連到 Labdb_employee這個DB
進行管理上的操作

點一下【首頁】
在點一下【使用者帳號】


新增使用者帳號

輸入以下資訊
使用者名稱: tony
主機名稱: %
認證外掛程式,一定要選擇【原生MySQL認證】
不然可能會出現奇奇怪怪的錯誤喔~


垂直卷軸,往下拉到底
選擇【執行】


選擇全域權限的【全選】權限


【執行】

權限設定完成



七、建置 PHP 開發環境並設定語系
我個人是習慣使用

Notepad++去編輯PHP
下載點
https://notepad-plus-plus.org/downloads/

看想要下載哪種模式
Installer >>就是要安裝才能用的版本
Portable >>就是獨立執行版,不用安裝就可以用


我是使用安裝版的
沒什麼特殊理由,就是不小心點到就下載了~


選擇自己最熟悉的語言吧~
這只是安裝而已,就不要為難自己了


下一步


我同意


預設就好


下一步


安裝


安裝過成很快


執行後的第一個畫面
會開啟下方版本宣告
就直接關掉他吧~

這邊很重要喔~
記得要去更改一下編碼語系為BIG5
編碼>字元集>中文>BIG5


八、撰寫 PHP
接下來
就是Coding的部分
我這邊不做PHP的教學啦~
大家要對基本的HTML、ASP、PHP語法
要稍微有點瞭解
應該不會太難

就把以下的內容
貼到存成index_show.php
記得要改一下IP、帳號、密碼喔~

並放到C:\AppServ\www 的目錄去吧~
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
  <title>MY SQL | SHOW</title>
<meta http-equiv="Content-Type" content="text/html; charset=big5">


<body class="auto-style1">

<!-- 宣告 Style -->
    <style type="text/css">
        .auto-style1 {
            font-family: 微軟正黑體;
            font-weight: bold;
            font-size: x-large;
        }
    </style>

<form method="post" id="Button" name="Button">
<input type="button" value="查詢資料" onClick="this.form.action='index_show.php';this.form.submit();" class="auto-style1">
<input type="button" value="回到首頁" onClick="this.form.action='index.php';this.form.submit();" class="auto-style1">
<input type="button" value="新增資料" onClick="this.form.action='index_add.php';this.form.submit();" class="auto-style1">
</form>


<?php
## 宣告變數
$server = "10.1.0.25";
$dbuser = "tony";
$dbpassword = "P@ssw0rd!";
$dbdb = "LabDB_employee";

## 連線資料庫 和 判斷連線是否成功
$link = mysqli_connect($server, $dbuser, $dbpassword, $dbdb)
        or die("錯誤: 無法開啟MySQL資料庫連接<br/>訊息: ".mysqli_connect_errno().PHP_EOL .mysqli_connect_error().PHP_EOL);

## 查詢SQL語法
$sql = "select table_employee.id, table_employee.no_emp as '員工編號', table_employee.name as '姓名', table_employee.sex as '性別', table_employee.year as '年齡', table_employee.depar as '部門', table_pay.pay as '薪資', table_title.title as '職稱'
from table_employee
LEFT JOIN table_pay ON table_employee.no_emp = table_pay.no_emp
LEFT JOIN table_title ON table_employee.no_title = table_title.no_title
ORDER BY id;";

## 設定語系
mysqli_query("SET NAME 'utf8'");

## 宣告 連結和語法
$result=mysqli_query($link,$sql);
echo "<br>";

## 查詢的筆數
echo "共有 <font color='red'>".mysqli_num_rows($result)."</font> 筆紀錄",",共 <font color='red'>".mysqli_num_fields($result)."</font>  個欄位";

## 繪製表格
echo "<table border='1'>";

for($i=0;$i<mysqli_num_fields($result);$i++)
{
$fieldname = mysqli_fetch_field_direct($result, $i)->name;
echo "<TD bgcolor='blue'><font color='#FFFFFF' bgcolor='black' cellpadding='5' border='1'>".$fieldname."</font></TD>";
}
echo "</TR>";

## 顯示欄位名稱
$total_records = mysqli_num_rows($result);

## 將查詢結果匯出成表格
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result) ) {
echo "<td>".$row[id]."</td><td>".$row[員工編號]."</td><td>".$row["姓名"]."</td><td>".$row["性別"]."</td><td>".$row["年齡"]."</td><td>".$row["部門"]."</td><td>".$row["薪資"]."</td><td>".$row["職稱"]."</td>";
echo "</tr>";
}
} else {
echo "0 結果";
}
echo "</table>";


## 釋放查詢結果所佔用的記憶體
mysqli_free_result($result);

## 關閉資料庫
mysqli_close($link);


?>
</body>
</head>
</html>
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


九、透過Web驗證 PHP 網站
再來就是
透過Browser去開網頁驗證看看囉~
我的URL為
http://10.1.0.25:8080/index_show.php
看到以下,就表示完成囉~

























沒有留言:

張貼留言