整理:
1.只要會用滑鼠點兩下,用shell 在 ubuntu 16.04 x64 桌面版本快速安裝 運動檢錄系統
https://skjhcreator.blogspot.com/2021/03/shell-ubuntu-1604-x64.html
2.紀明村老師運動會競賽檢錄系統更新模組_學生帳號管理模組
https://skjhcreator.blogspot.com/2021/03/blog-post.html
3.二林國小紀明村老師的二林網管 PDO + SQLite 程式寫作工具箱2014.07
https://skjhcreator.blogspot.com/2021/03/pdo-sqlite-201407.html
4.用shell 在CentOS 7 minimal 64位元 安裝 紀明村老師的運動會檢錄系統
https://skjhcreator.blogspot.com/2021/02/shell-centos-7-minimal-64.html
5.紀明村老師的運動檢錄系統程式碼研究心得(一)介接CloudSchool與mysql資料庫
https://skjhcreator.blogspot.com/2021/03/cloudschoolmysql.html
6.紀明村老師運動檢錄系統程式碼研究心得(二)登入login登出logout與使用者認證
https://skjhcreator.blogspot.com/2021/02/loginlogout.html
7.紀明村老師運動檢錄系統程式碼研究心得(三)smarty
https://skjhcreator.blogspot.com/2021/02/smarty.html
1.只要會用滑鼠點兩下,用shell 在 ubuntu 16.04 x64 桌面版本快速安裝 運動檢錄系統
https://skjhcreator.blogspot.com/2021/03/shell-ubuntu-1604-x64.html
2.紀明村老師運動會競賽檢錄系統更新模組_學生帳號管理模組
https://skjhcreator.blogspot.com/2021/03/blog-post.html
3.二林國小紀明村老師的二林網管 PDO + SQLite 程式寫作工具箱2014.07
https://skjhcreator.blogspot.com/2021/03/pdo-sqlite-201407.html
4.用shell 在CentOS 7 minimal 64位元 安裝 紀明村老師的運動會檢錄系統
https://skjhcreator.blogspot.com/2021/02/shell-centos-7-minimal-64.html
5.紀明村老師的運動檢錄系統程式碼研究心得(一)介接CloudSchool與mysql資料庫
https://skjhcreator.blogspot.com/2021/03/cloudschoolmysql.html
6.紀明村老師運動檢錄系統程式碼研究心得(二)登入login登出logout與使用者認證
https://skjhcreator.blogspot.com/2021/02/loginlogout.html
7.紀明村老師運動檢錄系統程式碼研究心得(三)smarty
https://skjhcreator.blogspot.com/2021/02/smarty.html
現在研究紀老師的運動檢錄系統程式碼,心中湧起幾個問題。希望能藉由原始碼解決心中的疑惑。由於紀老師使用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介接?
1.如何介接?請參考校務系統cloudschool API相關資料及實作與程式碼的關聯
2.介接之後,要如何處理資料?
1.如何介接?請參考校務系統cloudschool API相關資料及實作與程式碼的關聯
檔案名稱: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;
}
?>
若不在學校IP範圍內,則打開瀏覽器,測試ApiGetData.php。會出現此訊息如下:
若在學校IP範圍內,則打開瀏覽器,測試ApiGetData.php。會出現此訊息如下:
則會取得資料。 (1).檢查指定的檔案是否存在?
(1).Y. 檔案存在,則取檔案資料
(1).N.檔案不存在,則將取得的資料存入檔案
檔案名稱:ApiGetData2File.php
檔案內容:
<?php
// 3.雲端學籍系統內,學校的 API ID
$API_client_id = '學校的 API ID';
// 4.雲端學籍系統內,學校的 API 密碼
$API_client_secret = '學校的 API 密碼';
// 5.可寫入目錄(放置資料庫檔及暫存區用),建議搬至網頁目錄外
define('__SiteData', dirname(__file__).'/Sport_data/');
// define('__SiteData', '/home/webadmin/sport_data/');
// define('__SiteData', '/home/stu/data/');
//取得API資料
$GetApiData = API_data();
//印出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;
}
/* 7.更新處理函式 */
function API_data(){
//所在的目錄__SiteData及檔案名稱為date("Y").'_elps.txt'
$file = __SiteData.date("Y").'_elps.txt';
//echo $file;
if (file_exists($file)) {
$sch_json=file_get_contents($file);
}else{
$sch_json=elps_API();
$num=file_put_contents($file,$sch_json);//寫入echo $num;
}
$arr = json_decode($sch_json);
return $arr;
}
/*自動建立目錄*/
function autoDir($dir){
//echo $dir.'<br>';
if (file_exists($dir) && is_dir($dir)) return ;
$rs = @mkdir($dir, 0755);
if (!$rs) backe($dir."<br>資料存放區不存在或無法建立!");
}
/* 列印變數*/
function PP($a){
echo "<pre>";print_r($a);
echo "</pre>";exit;
}
##################回上頁函式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;
}
?>
二、介接之後,如何取得的資料存入資料庫中?
1.如何用pdo建立資料庫?
2.如何用pdo建立資料表?
3.介接cloudschool之後,取得的資料,如何存入資料表內?
資料表stud
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 utf8mb4 COLLATE utf8mb4_unicode_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 utf8mb4"));
}
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 AUTO_INCREMENT 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 AUTO_INCREMENT 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
);
3.介接cloudschool之後,取得的資料,如何存入資料表內?
(1).在已建立資料庫、資料表,只剩下將取得的資料,存入資料表前提下。
(2).在建立資料庫之後。需建立資料表,並將取得的資料,存入資料表前提下。
(1).在已建立資料庫、資料表,只剩下將取得的資料,存入資料表前提下。
檔案名稱:ApiData2Table01.php
檔案內容:
<?php
$school_code='教育部學校代碼';
$MySQL['Host']='localhost';
$MySQL['User']='資料庫使用者';
$MySQL['Pass']='資料庫密碼';
$MySQL['Db']='Sport109_'.$school_code;
// 5.可寫入目錄(放置資料庫檔及暫存區用),建議搬至網頁目錄外
define('__SiteData', dirname(__file__).'/Sport_data/');
// define('__SiteData', '/home/webadmin/sport_data/');
// define('__SiteData', '/home/stu/data/');
/*建立連結*/
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 utf8mb4"));
}
catch (Exception $e)
{
backe("!!無法連結資料庫!!");
//die("<center><h2>無法連結資料庫</h2></center>");
}
//取得API資料
$arr=API_data();
//PP($arr);
//將取得的資料,存入資料表
add_stud($arr);
/* 7.更新處理函式 */
function API_data(){
//所在的目錄__SiteData及檔案名稱為date("Y").'_elps.txt'
$file = __SiteData.date("Y").'_elps.txt';
//echo $file;
if (file_exists($file)) {
$sch_json=file_get_contents($file);
}else{
//$sch_json=elps_API();
//$num=file_put_contents($file,$sch_json);//寫入echo $num;
}
$arr = json_decode($sch_json);
return $arr;
}
/*加入學生資料*/
function add_stud($arr){
if (!isset($arr->學期編班)) return ;
foreach($arr->學期編班 as $obj){
/* 判斷有沒有學生 */
if (isset($obj->學期編班)) {
//echo $obj->年級.'-'.$obj->班序.'人數'.count($obj->學期編班).'<br>';
foreach($obj->學期編班 as $ary){
$created=date("Y-d-m H:i:s");
$stuid=$ary->學號;
$seatnum=$ary->座號;
$stuname=$ary->姓名;
$sex=$ary->性別;
$edukey=$ary->身分證編碼;
$cla=$obj->年級.'_'.$obj->班序;
$idclass=$obj->年級.sprintf("%02d",$obj->班序).sprintf("%02d",$ary->座號);
$SQL="INSERT INTO `stud` (stuid , stuname , idclass , cla , seatnum , sex , edukey , created) values ('{$stuid}' ,'{$stuname}' ,'{$idclass}' ,'{$cla}' ,'{$seatnum}' ,'{$sex}' ,'{$edukey}' ,'{$created}')";
//echo $SQL."<br>";
$rs=$CONN->query($SQL);// or die($SQL);
}
}
}
}
/* 列印變數*/
function PP($a){
echo "<pre>";print_r($a);
echo "</pre>";exit;
}
?>
(2).在建立資料庫之後。需建立資料表,並將取得的資料,存入資料表前提下。
檔案名稱:ApiData2Table02.php
檔案內容:
<?php
$school_code='教育部學校代碼';
$MySQL['Host']='localhost';
$MySQL['User']='資料庫使用者';
$MySQL['Pass']='資料庫密碼';
$MySQL['Db']='Sport109_'.$school_code;
// 3.雲端學籍系統內,學校的 API ID
$API_client_id = '學校的 API ID';
// 4.雲端學籍系統內,學校的 API 密碼
$API_client_secret = '學校的 API 密碼';
// 5.可寫入目錄(放置資料庫檔及暫存區用),建議搬至網頁目錄外
define('__SiteData', dirname(__file__).'/Sport_data/');
// define('__SiteData', '/home/webadmin/sport_data/');
// define('__SiteData', '/home/stu/data/');
/*建立連結*/
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 utf8mb4"));
}
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) {
//建立資料表stud
$rs=$CONN->query($SQL2) or die($SQL2);
//取得API資料
$arr=API_data();
//將取得的資料,存入資料表
add_stud($arr);
backe('資料表建立OK! API資料存入資料表!');
} else {
//取得API資料
$arr=API_data();
//將取得的資料,存入資料表
add_stud($arr);
backe('已有資料表!API資料存入資料表!');
}
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;
}
/* 7.更新處理函式 */
function API_data(){
//所在的目錄__SiteData及檔案名稱為date("Y").'_elps.txt'
$file = __SiteData.date("Y").'_elps.txt';
//echo $file;
if (file_exists($file)) {
$sch_json=file_get_contents($file);
}else{
$sch_json=elps_API();
$num=file_put_contents($file,$sch_json);//寫入echo $num;
}
$arr = json_decode($sch_json);
return $arr;
}
/*加入學生資料*/
function add_stud($arr){
if (!isset($arr->學期編班)) return ;
foreach($arr->學期編班 as $obj){
/* 判斷有沒有學生 */
if (isset($obj->學期編班)) {
//echo $obj->年級.'-'.$obj->班序.'人數'.count($obj->學期編班).'<br>';
foreach($obj->學期編班 as $ary){
$created=date("Y-d-m H:i:s");
$stuid=$ary->學號;
$seatnum=$ary->座號;
$stuname=$ary->姓名;
$sex=$ary->性別;
$edukey=$ary->身分證編碼;
$cla=$obj->年級.'_'.$obj->班序;
$idclass=$obj->年級.sprintf("%02d",$obj->班序).sprintf("%02d",$ary->座號);
$SQL="INSERT INTO `stud` (stuid , stuname , idclass , cla , seatnum , sex , edukey , created) values ('{$stuid}' ,'{$stuname}' ,'{$idclass}' ,'{$cla}' ,'{$seatnum}' ,'{$sex}' ,'{$edukey}' ,'{$created}')";
//echo $SQL."<br>";
$rs=$CONN->query($SQL);// or die($SQL);
}
}
}
}
/* 列印變數*/
function PP($a){
echo "<pre>";print_r($a);
echo "</pre>";exit;
}
##################回上頁函式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;
}
?>
9.PHP PDO
沒有留言:
張貼留言