新進人員教育訓練/2013:修訂版本之間的差異

出自六年制學程
跳轉到: 導覽搜尋
作業一
PHP入門
 
(未顯示同用戶所作出之1次版本)
第 14 行: 第 14 行:
  
 
==MySQL==
 
==MySQL==
===工具===
+
{{:MySQL入門}}
*下載使用 EmEdit ,在 jendo.org/files/doc/et 中
+
*[http://jendo.org/files/doc/MySQL.html 完整講義]
+
 
+
===建資料表及欄位說明===
+
#id欄,類型是tinyint,指tiny(小小)的int(整數)。只使用1個byte,而1byte有256個可能,如果是非負整數,可代表0~255。屬性unsigned是非負的意思,不存負值。
+
#name欄,類型是var(可變長度)的char(字元),也有人稱為vchar。記錄形式會用第一個byte記多長,然後再放實際的資料。MySQL4.1以前是用1個byte記錄長度,所以資料最長可到255個長度;MySQL4.2以後用2個byte來記錄資料長度,可記錄到65535個長度。在utf8中,每個中文字用掉3個byte(這樣才能簡中繁中日韓文都放在同一頁),不同於big5每個中文字只用2個byte。<br/>另外有一種char的類型,每個欄位長度是定長。排序規則/校對方式使用 utf8_general_ci,的意思是utf8是編碼。general_ci是校對排序方式,不同國家希望有不同的排序方式,而華文最喜歡的排序方式是general_ci(大體上照utf8本身的大小排序),這裡不用非負屬性,因為文字不需要正負。
+
#gender欄,類型是tiny(小小)的int(整數)。gender欄有註釋,解釋0和1各代表什麼意思。
+
#birthday欄,類型是用date,因為不一定所有的日期是合理的,尤其是閏年,用這個類型會幫你檢查,所以要定義好相關的適合型態。
+
===操作整張資料表===
+
*轉移:「將資料表移動到(資料庫名.資料資料表名稱):」
+
*複製:「將資料表複製到(資料庫名.資料資料表名稱):」(練習這個)
+
*丟棄
+
*清空
+
*匯出sql
+
*匯入sql
+
*匯出csv
+
*匯入csv
+
 
+
===使用資料表===
+
*select,delete,update是三個mySQL中最重要的指令
+
*詳見「完整講義」的「第二部分/零/七、基本SQL命令/10~14」
+
*select 下條件及排序
+
*正規化與非正規化的資料表
+
*select name,phone from name a,phone b where a.id=b.id order by name
+
*select name,phone,email from name a,phone b,email c where a.id=b.id && b.id=c.id order by name
+
*一對多關係與多對多關係。
+
  
 
==PHP入門==
 
==PHP入門==
[http://jendo.org/files/doc/php.html 完整講義]
+
{{:PHP入門}}
===基本觀念===
+
php是伺服器端程式,分成html以及php code兩種段落:
+
 
+
html部分就和普通的 html 一樣,php code部分要用
+
<?php
+
...
+
?>
+
包起來。客戶端對伺服器提出請求的時候,伺服器會把php那部分的code在伺服器端加以執行,執行的產出(也是html片段),混合其他的html部分,整合成一份html,再傳給客戶端。
+
====分工====
+
一般來說php中html以及php code兩種段落,使用五種語言:
+
*html包含
+
*#html tag
+
*#CSS
+
*#javascript
+
*php code包含
+
*#php
+
*#MySQL
+
===範例一===
+
<pre>
+
html-><Html>
+
css -><link href='pa.txt' rel='stylesheet'/>
+
html-><Body>
+
php -><?php
+
php ->$link=mysql_connect("localhost", "assistant", "20120511");
+
      ^$變數的前置符號,$link是一個容器
+
      mysql_connect我要連結mySQL資料庫中的函式。提供三個引數
+
a.localhost表示我這隻提出連接請求的php跟這資料庫是在同一台機器中(有同一台機器、指定機器、任意機器三種設定)
+
b.給帳號,說明自己是誰
+
c.給密碼,證明自己是那個誰
+
在php的等號,不是等於的意思,是把右方的數值派入左方(派值)
+
兩個等號是比較,到底左方跟右方有沒有一樣,若他們資料一樣,資料型別不同沒關係(e.g.字串123與文字123是相同的,123=='123'會傳回真值)
+
三個等號是比較,到底左方跟右方有沒有完全一樣(e.g.字串123與文字123是不同的,123==='123'會傳回假值)
+
分號有兩個含意:
+
a.執行
+
b.本指令結束
+
php ->mysql_query("set names utf8");
+
查詢指令,這行意思是要設定命名空間的編碼是utf8的編碼格式。
+
上一行本地端應該是連上了伺服器端了,講好要用哪個編碼來溝通。names是「命名空間」「名字空間」。
+
utf8的設定是在4.2版以前的php前要設定的,因為在4.2版之前各國有不同的文字編碼格式(日文、歐洲語系、拉丁字元、韓文各有不同,直到utf8格式統整)
+
php ->mysql_select_db("助理們");
+
選定哪個資料庫底下執行(mySQL很少允許用跨資料庫的執行)
+
php ->$result = mysql_query("SELECT a.id,a.name,a.birthday,b.phone,c.email FROM name a,phone b,email c WHERE a.id=b.id and a.id=c.id order by a.id");
+
^^^^^^^把MySQL回傳的二維陣列傳到result這個變數中
+
此SQL指令是昨天學過的,三張表可以用兩個表連結串起來
+
MySQL會傳回二維陣列
+
php ->echo "<table>\n";
+
以表格來呈現
+
\n是line feed(新增一行)
+
\r是carry return(調到行首)
+
\t是tab(定位點)
+
php ->echo "<tr><th>id</th><th>姓名</th><th>生日</th><th>電話</th><th>Email</th></tr>";
+
輸出表格的首列
+
php ->while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
+
while意思是「如果條件成立,一直做」,只要小括號裡頭的條件成立,大括號的內容就一直做
+
fetch_array的指令就是把輸出的二維陣列每次都劈下一筆,每次會拿到一筆資料
+
把這個劈下一筆的資料放進$row的變數中
+
直到二維陣列所的資料都被你劈完,就會回傳為假,指令執行結束
+
MySQL_Assoc的意思
+
我可以用字來稱呼每欄(assoc),但也可以用第0欄第1欄...第4欄的方式稱呼各欄
+
php -> echo "<tr>";
+
每劈下一筆,就傳一個本列開始
+
php -> foreach($row as $value){echo "<td>".$value."</td>";}
+
row有五個元素,foreach是指陣列中的每個元素做一次
+
.是字串連接符號,.的左右邊都必須是字串,.把左右邊連成一個更長的字串
+
php -> echo "</tr>\n";
+
接下來送出一個本列結束
+
php ->}
+
php ->echo "</table>\n";
+
table結束,換行
+
php ->?>
+
php結束
+
html-></Body>
+
html-></Html>
+
</pre>
+
 
+
===php code語法解說===
+
*php code是由一行一行的指令構成的,每一行的指令都包含三部分:
+
*#資料
+
*#處理資料的算符
+
*#分號(;)代表指令結束,意思是執行
+
*註解則不執行,註解有三種寫法:
+
*#單行註解:「#」「//」
+
*#多行註解:「/*…*/」
+
*大括號「{}」是程式區塊,把一群指令包在一起,後面不用加分號
+
*while(條件){...}這個指令有風險,就是如果沒想清楚,可能會有無窮迴圈。()內是動作的條件,會依序執行直到沒辦法執行了。
+
*foreach(陣列as元素){...}陣列中每個元素做一遍。
+
*if(條件){...}elseif(條件){...}else{...}如果男的要冠先生,女的要冠女士,可使用此種迴圈
+
*for($i=0;$i&lt;5;$i++){...}從某個$i做到某個$i。三條件分別為:從哪個$i開始、做到哪個$i、每次$i要遞增多少(++是+1)
+
*二元算符:$x+=2是$x=$x+2;$x-=2是$x=$x-2;$x/=2是$x=$x/2;$x*=2是$x=$x*2;$x%=2是$x=$x%2;$x.='XXX'是$x=$x.'XXX'&lt;br/&gt;但加減乘除都要在 $x 代表的是數字值時才可以用;.則是文字字串的相連。
+
 
+
===作業一===
+
* 將範例一「化零為整」。原
+
* 童軍歌-猜猜拳
+
* $str="";  空字串
+
* $str=$str."&lt;table&gt;";
+
* 把str越接越長,最後把str全部串起來,
+
* echo $str;,讓結果呈現的跟示範程式的結果一樣
+
 
+
===範例二===
+
*constant.php放常數
+
*#類別的路徑
+
*#連到資料庫的帳密
+
*std.php
+
*#載入常數檔
+
*#載入類別定義(車輪餅的模子)
+
*#依照類別做物件(倒入麵粉漿)
+
*#設定特定的屬性(放入車輪餅的內餡)
+
*#執行函式,表現出來(做好車輪餅賣掉)
+
 
+
===作業二===
+
* 改 std.php 中的 SQL 命令,產生自己的 php 。
+
* 備份自己昨天做的資料表
+
* 用自己的 php 程式玩自己的資料表
+
* 使用 editable 屬性。
+

2014年7月24日 (四) 13:30的最新修訂版本

討論

六年制學程青少年育樂營影片note

六年制學程教學資源


帳號

  1. 振鐸 wiki 帳號:「應徵者/查字典」,建自己的wiki頁
  2. 資料庫練習帳號:「assistant/20120511」

HTML、CSS、wiki

MySQL

工具

adminer介面介紹

  1. localhost是這一台機器的意思
  2. DB是 database (資料庫)的意思,想像是放一張張資料表的資料夾。
  3. 左側選單,上面選 DB 下面出現其中的資料表,每個資料表都有兩個連結。
  4. 右側選單最上方是「網站地圖」,提示使用者目前是在 adminer 中的那裡。
  5. 資料表是由欄和筆構成,請看範例。
  6. 「選擇資料」項下除了可以編、修現有各筆外,還有選擇、搜尋、排序三個子選項。
  7. 「顯示結構」與「修改資料表」兩項可以看和改資料表的欄位結構。
  8. 「新增項目」項可以插入一或數筆資料。

建資料表及欄位說明

  1. id欄,類型是tinyint,指tiny(小小)的int(整數)。只使用1個byte,而1byte有256個可能,如果是非負整數,可代表0~255。屬性unsigned是非負的意思,不存負值。
  2. name欄,類型是var(可變長度)的char(字元),也有人稱為vchar。記錄形式會用第一個byte記多長,然後再放實際的資料。MySQL4.1以前是用1個byte記錄長度,所以資料最長可到255個長度;MySQL4.2以後用2個byte來記錄資料長度,可記錄到65535個長度。在utf8中,每個中文字用掉3個byte(這樣才能簡中繁中日韓文都放在同一頁),不同於big5每個中文字只用2個byte。<br/>另外有一種char的類型,每個欄位長度是定長。排序規則/校對方式使用 utf8_general_ci,的意思是utf8是編碼。general_ci是校對排序方式,不同國家希望有不同的排序方式,而華文最喜歡的排序方式是general_ci(大體上照utf8本身的大小排序),這裡不用非負屬性,因為文字不需要正負。
  3. gender欄,類型是tiny(小小)的int(整數)。gender欄有註釋,解釋0和1各代表什麼意思。
  4. birthday欄,類型是用date,因為不一定所有的日期是合理的,尤其是閏年,用這個類型會幫你檢查,所以要定義好相關的適合型態。

操作整張資料表

  • 轉移:「將資料表移動到(資料庫名.資料資料表名稱):」
  • 複製:「將資料表複製到(資料庫名.資料資料表名稱):」(練習這個)
  • 丟棄
  • 清空
  • 匯出sql:欄位結構和各筆資料
  • 匯入sql:欄位結構和各筆資料
  • 匯出csv:給 MySQL 取用;給 google 及 Excel 取用。
  • 匯入csv:要刪去首列的欄名。

使用資料表

  • select,delete,update是三個mySQL中最重要的指令
  • 詳見「完整講義」的「第二部分/零/七、基本SQL命令/10~14」
  • select 下條件及排序
  • 正規化與非正規化的資料表
  • select name,phone from name a,phone b where a.id=b.id order by name
  • select name,phone,email from name a,phone b,email c where a.id=b.id && b.id=c.id order by name
  • select name,phone,email from name a,phone b,email c where a.id=b.id && b.id=c.id && name='丁志仁' order by name
  • select name,phone,email from name a,phone b,email c where a.id=b.id && b.id=c.id && name like '陳%' order by name
  • select name,phone,email from name a,phone b,email c where a.id=b.id && b.id=c.id && name like '%敏%' order by name
  • 一對多關係與多對多關係。

PHP入門

完整講義

基本觀念

php是伺服器端程式,分成html以及php code兩種段落:

html部分就和普通的 html 一樣,php code部分要用

<?php
...
?>

包起來。客戶端對伺服器提出請求的時候,伺服器會把php那部分的code在伺服器端加以執行,執行的產出(也是html片段),混合其他的html部分,整合成一份html,再傳給客戶端。

分工

一般來說php中html以及php code兩種段落,使用五種語言:

  • html包含
    1. html tag
    2. CSS
    3. javascript
  • php code包含
    1. php
    2. MySQL

注意

  • 個人網站中的 php ,會檢查擁有者是不是正確的個人,是才執行。這一點講師要了解,學員不必了解。

範例一

html-><Html>
css -><link href='pa.txt' rel='stylesheet'/>
html-><Body>
php -><?php
php ->$link=mysql_connect("localhost", "assistant", "20140724");
      ^$是變數的前置符號,$link是一個容器
      mysql_connect我要連結mySQL資料庫中的函式。提供三個引數
	a.localhost表示我這隻提出連接請求的php跟這資料庫是在同一台機器中(有同一台機器、指定機器、任意機器三種設定)
	b.給帳號,說明自己是誰
	c.給密碼,證明自己是那個誰
	在php的等號,不是等於的意思,是把右方的數值派入左方(派值)
	兩個等號是比較,到底左方跟右方有沒有一樣,若他們資料一樣,資料型別不同沒關係(e.g.字串123與文字123是相同的,123=='123'會傳回真值)
	三個等號是比較,到底左方跟右方有沒有完全一樣(e.g.字串123與文字123是不同的,123==='123'會傳回假值)
	分號有兩個含意:
	a.執行
	b.本指令結束
php ->mysql_query("set names utf8");
	查詢指令,這行意思是要設定命名空間的編碼是utf8的編碼格式。
	上一行本地端應該是連上了伺服器端了,講好要用哪個編碼來溝通。names是「命名空間」「名字空間」。
	utf8的設定是在4.2版以前的php前要設定的,因為在4.2版之前各國有不同的文字編碼格式(日文、歐洲語系、拉丁字元、韓文各有不同,直到utf8格式統整)
php ->mysql_select_db("assistant");
	選定哪個資料庫底下執行(mySQL很少允許用跨資料庫的執行)
php ->$result = mysql_query("SELECT a.id,a.name,a.birthday,b.phone,c.email FROM name a,phone b,email c WHERE a.id=b.id and a.id=c.id order by a.id");
	^^^^^^^把MySQL回傳的二維陣列傳到result這個變數中
	此SQL指令是昨天學過的,三張表可以用兩個表連結串起來
	MySQL會傳回二維陣列
php ->echo "<table>\n";
	以表格來呈現
	\n是line feed(新增一行)
	\r是carry return(調到行首)
	\t是tab(定位點)
php ->echo "<tr><th>id</th><th>姓名</th><th>生日</th><th>電話</th><th>Email</th></tr>";
	輸出表格的首列
php ->while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
	while意思是「如果條件成立,一直做」,只要小括號裡頭的條件成立,大括號的內容就一直做
	fetch_array的指令就是把輸出的二維陣列每次都劈下一筆,每次會拿到一筆資料
	把這個劈下一筆的資料放進$row的變數中
	直到二維陣列所的資料都被你劈完,就會回傳為假,指令執行結束
	MySQL_Assoc的意思
	我可以用字來稱呼每欄(assoc),但也可以用第0欄第1欄...第4欄的方式稱呼各欄
php ->	echo "<tr>";
	每劈下一筆,就傳一個本列開始
php ->	foreach($row as $value){echo "<td>".$value."</td>";}
	row有五個元素,foreach是指陣列中的每個元素做一次
	.是字串連接符號,.的左右邊都必須是字串,.把左右邊連成一個更長的字串
php ->	echo "</tr>\n";
	接下來送出一個本列結束
php ->}
php ->echo "</table>\n";
	table結束,換行
php ->?>
	php結束
html-></Body>
html-></Html>

php code語法解說

  • php code是由一行一行的指令構成的,每一行的指令都包含三部分:
    1. 資料
    2. 處理資料的算符
    3. 分號(;)代表指令結束,意思是執行
  • 註解則不執行,註解有三種寫法:
    1. 單行註解:「#」「//」
    2. 多行註解:「/*…*/」
  • 大括號「{}」是程式區塊,把一群指令包在一起,後面不用加分號
  • while(條件){...}這個指令有風險,就是如果沒想清楚,可能會有無窮迴圈。()內是動作的條件,會依序執行直到沒辦法執行了。
  • foreach(陣列as元素){...}陣列中每個元素做一遍。
  • if(條件){...}elseif(條件){...}else{...}如果男的要冠先生,女的要冠女士,可使用此種迴圈
  • for($i=0;$i<5;$i++){...}從某個$i做到某個$i。三條件分別為:從哪個$i開始、做到哪個$i、每次$i要遞增多少(++是+1)
  • 二元算符:$x+=2是$x=$x+2;$x-=2是$x=$x-2;$x/=2是$x=$x/2;$x*=2是$x=$x*2;$x%=2是$x=$x%2;$x.='XXX'是$x=$x.'XXX'<br/>但加減乘除都要在 $x 代表的是數字值時才可以用;.則是文字字串的相連。

作業一

  • 將範例一「化零為整」。原來用 echo 的地方改成 $str.=
  • 童軍歌-猜猜拳
  • $str=""; 空字串
  • $str=$str."<table>";
  • 把str越接越長,最後把str全部串起來,
  • echo $str;,讓結果呈現的跟示範程式的結果一樣

範例二

  • constant.php放常數
    1. 類別的路徑
    2. 連到資料庫的帳密
  • std.php
    1. 載入常數檔
    2. 載入類別定義(車輪餅的模子)
    3. 依照類別做物件(倒入麵粉漿)
    4. 設定特定的屬性(放入車輪餅的內餡)
    5. 執行函式,表現出來(做好車輪餅賣掉)

作業二

  • 改 std.php 中的 SQL 命令,產生自己的 php 。
  • 備份自己昨天做的資料表
  • 用自己的 php 程式玩自己的資料表
  • 使用 editable 屬性。