標籤

BAT (38) shell (34) Virtual Machine (33) Xubuntu (29) acfs (25) PHP (24) CentOS (21) Virtul Box (20) 編輯器 (17) 資料庫 (15) lubuntu (13) windows (13) CPP (12) ubuntu (12) chrome (11) laravel (10) Docker (9) Python (9) 5A88 (7) VMware (6) 資料結構 (6) Javascript (5) Node (5) Proxmox VE (5) 公告系統 (5) 程式積木 (5) Android Studio (4) ANN (3) OB2D2016x64 (3) Xoops (3) clonezilla (3) samba (3) 公文 (3) 其他 (3) 硬體 (3) API (2) Android (2) AppInvent2 (2) Html (2) Hyper-V (2) Nas (2) botnet (2) mbot (2) swift (2) wordpress (2) 樣板 (2) 防火牆 (2) AD的應用 (1) Ansible (1) Arduino (1) CSS (1) GitLab (1) HA Proxy (1) LegoEV3 (1) PowerShell (1) Scratch (1) VM (1) XenServer (1) kotlin (1) linuxmint (1) lxc (1)

2020年11月4日 星期三

紀明村老師的運動檢錄系統程式碼研究心得(一)介接CloudSchool與mysql資料庫

   現在研究紀老師的運動檢錄系統程式碼,心中湧起幾個問題。希望能藉由原始碼解決心中的疑惑。由於紀老師使用Sqlite,但內容也有mysql pdo的語法。因此,希望能改寫成mysql的語法。
1.安裝mysql
$sudo apt-get install mysql-server -y
$sudo apt-get install mysql-client -y
$sudo apt-get install libmysqlclient-dev -y

2.安裝phpmyadmin
$sudo apt-get install phpmyadmin -y

一、如何跟CloudSchool的API介接?
       2.介接之後,要如何整理資料?

檔案名稱:ApiGetData.php
檔案內容:
<?php
// 3.雲端學籍系統內,學校的 API ID
$API_client_id = '學校的 API ID';

// 4.雲端學籍系統內,學校的 API 密碼
$API_client_secret = '學校的 API 密碼';

//取得API資料
$GetApiData = elps_API();

//印出API資料
PP($GetApiData);

function elps_API(){
global $API_client_id,$API_client_secret;

// =================================================
//    學生榮譽榜 (url: https://api.chc.edu.tw)
//    校務佈告欄 (url: https://api.chc.edu.tw/school-news)
//    同步學期資料 (url: https://api.chc.edu.tw/semester-data)
//    更改師生密碼 (url: https://api.chc.edu.tw/change-password)

// API NAME
$api_name = '/semester-data';
//$api_name = '/school-news';
// 更改師生密碼 (url: https://api.chc.edu.tw/change-password)

// API URL
$api_url = 'https://api.chc.edu.tw';
//: https://api.chc.edu.tw/school-news
// 建立 CURL 連線
$ch = curl_init();
// 取 access token
curl_setopt($ch, CURLOPT_URL, $api_url."/oauth?authorize");
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_POST, TRUE);
// the variable
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'client_id' => $API_client_id,
'client_secret' => $API_client_secret,
'grant_type' => 'client_credentials'
));

$data = curl_exec($ch);
$data = json_decode($data);

$access_token = $data->access_token;
$authorization = "Authorization: Bearer ".$access_token;

curl_setopt($ch, CURLOPT_URL, $api_url.$api_name);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // **Inject Token into Header**
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
return $result;
}
/* 列印變數*/
function PP($a){
echo "<pre>";print_r($a);
echo "</pre>";exit;
}

?>

二、介接之後,如何取得的資料存入資料庫中?
   1.如何用pdo建立資料庫?
   2.如何用pdo建立資料表?

   1.如何用pdo建立資料庫?
檔案名稱:PdoCreateDatabase.php
檔案內容:
<?php
$school_code='教育部學校代碼';
$MySQL['Host']='localhost';
$MySQL['User']='資料庫使用者';
$MySQL['Pass']='資料庫密碼';
$MySQL['Db']='Sport109_'.$school_code;
try {
//建立資料庫
    $CONN =new PDO('mysql:host='.$MySQL['Host'], $MySQL['User'] ,$MySQL['Pass']);
    $SQL="CREATE DATABASE ".$MySQL['Db']." CHARACTER SET utf8 COLLATE utf8_general_ci;";
    $CONN->exec($SQL) or die($SQL);
    backe("!!資料庫 ".$MySQL['Db']." OK!!");
 }
 catch (Exception $e) 
 {
       backe("!!無法連結資料庫!!");
       //die("<center><h2>無法連結資料庫</h2></center>");

##################回上頁函式1#####################
function backe($value= "BACK"){
//echo head();
echo  "<meta charset='UTF-8'><br><br><CENTER>";
echo "<h4>--== 《系統訊息》 ==--</h4>";
echo "<div align=center onclick='history.back();' style='font-size:12pt;color:#A52A2A;'><b>";
echo $value;
echo "</b><BR></div><h5 onclick='history.back();'>--==  《按下後返回》 ==--</h5>";
exit;
}
?>

     2.如何用pdo建立資料表?
       (1).先檢查是否可從資料表取出一筆資料?
       (1).Y.取得出,表示有此資料表->不建立資料表
       (1).N.取不出,表示無此資料表->建立資料表
檔案名稱:PdoCreateTable.php
檔案內容:
<?php
$school_code='教育部學校代碼';
$MySQL['Host']='localhost';
$MySQL['User']='資料庫使用者';
$MySQL['Pass']='資料庫密碼';
$MySQL['Db']='Sport109_'.$school_code;
/*建立連結*/
try {
// for MySQL
$CONN =new PDO('mysql:host='.$MySQL['Host'].';dbname='.$MySQL['Db'], $MySQL['User'],$MySQL['Pass'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    }
catch (Exception $e) 
    {
       backe("!!無法連結資料庫!!");
       //die("<center><h2>無法連結資料庫</h2></center>");
 }
/* 建立 stud 資料表*/
        $SQL1="select * from `stud` limit 1";
        $SQL2="CREATE TABLE `stud`(
                      `id` INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                      `stuid` VARCHAR(10) NOT NULL UNIQUE,
                      `stuname` TEXT NOT NULL,
                      `idclass` TEXT NOT NULL,
                      `cla` TEXT NOT NULL,
                      `seatnum` INT(10) DEFAULT '0',
                      `sex` TEXT NOT NULL,
                      `edukey` TEXT,
                      `created` TEXT,
                      `modify` TEXT
                      );";
                $rs=$CONN->query($SQL1);
                if (!$rs) {
                        $rs=$CONN->query($SQL2) or die($SQL2);
                } else {
                        backe('Had stud 資料表!');
                }
##################回上頁函式1#####################
function backe($value= "BACK"){
//echo head();
echo  "<meta charset='UTF-8'><br><br><CENTER>";
echo "<h4>--== 《系統訊息》 ==--</h4>";
echo "<div align=center onclick='history.back();' style='font-size:12pt;color:#A52A2A;'><b>";
echo $value;
echo "</b><BR></div><h5 onclick='history.back();'>--==  《按下後返回》 ==--</h5>";
exit;
}

?>

需要注意的是,同樣是建立資料表stud,建立資料表的語法會有些微不同
MYSQL語法:
CREATE TABLE `stud`(
  `id` INTEGER PRIMARY KEY,
  `stuid` VARCHAR(20) NOT NULL UNIQUE,
  `stuname` TEXT NOT NULL,
  `idclass` TEXT NOT NULL,
  `cla` TEXT NOT NULL,
  `seatnum` INTEGER DEFAULT '0',
  `sex` TEXT NOT NULL,
  `edukey` TEXT,
  `created` TEXT,
  `modify` TEXT
);

Sqlite語法:
CREATE TABLE `stud`(
  `id` INTEGER PRIMARY KEY,
  `stuid` TEXT NOT NULL UNIQUE,
  `stuname` TEXT NOT NULL,
  `idclass` TEXT NOT NULL,
  `cla` TEXT NOT NULL,
  `seatnum` INTEGER DEFAULT '0',
  `sex` TEXT NOT NULL,
  `edukey` TEXT,
  `created` TEXT,
  `modify` TEXT
);
      








沒有留言:

張貼留言

在 Windows 10 x64 1909版,使用BAT快速安裝公文系統與人事服務網(自然人憑證)版

相關內容移往 https://skjhcreator.blogspot.com/2021/02/windows-10-x64-1909bat.html