PHP撈取資料庫的補充解說

雖然PHP連線資料庫是一個應該很簡單的過程,甚至已經是標準化的作業了,但是對於沒有程式基礎的人來說,似乎一直有一種”如果不能弄懂它,就不知道要如何使用它”的懸念在,就我的觀察來說,這樣的懸念背後其實是對程式學習的一種潛意識排斥,我所觀察到的可以快速學習程式的人,大多都不會執著於要弄懂程式碼的原理,反而是專注在,先用程式來解決問題上,即使是用背和抄別人的程式碼也無所謂,先過了這一關之後,如果真有學習進修的心,再去探究所謂的原理,而這時因為已經累積了很多實務的操作經驗,再去研究原理就會很容易理解並吸收消化.

回到資料庫撈取資料這件事上,老師提供的範例程式如下

 
$sql="select * from mygames";
$ro=mysqli_query($link,$sql);
$row=mysqli_fetch_assoc($ro);
do{
   echo $row['g_name']."
"; }while($row=mysqli_fetch_assoc($ro));

首先是設定語法的部份;

$sql=”SELECT * FROM mygames”;

$sql是變數名,這意謂著它不是固定的,你要取成$gamesql也是可以的,實務上,我們在一支php程式中可能不只送出一次查詢,也可能不只查詢一張資料表,也可能下不同的語法,所以$sql並不是唯一不變的.
然後在這裏會把語法字串指定給一個變數只是為了方便之後的引用和程式碼整體的美觀,因為在下一句的資料庫連線查詢語法中我們是可以省略變數,直接代語法進去的;

$ro=mysqli_query($link,$sql);

也可以寫成

$ro=mysqli_query($link,”select * from mygames”);

這會得到相同的結果,而且還省了一個$sql的變數;
那為什麼不直接用後者的寫法?感覺比較省事?
因為實際上我們常常會下很長的語法,甚至會在語法中代入變數,如果直接寫在連線的函數裏,會很難辦識,而且容易出錯,比如這是一個我在使用的語法;

$sql=”SELECT p_course.c_date,p_class_name.c_name as ‘course’ FROM `p_course`,p_class_name WHERE c_date >='”.$get_month_start.”‘ and c_date <='”.$get_month_end.”‘ and c_section=p_class_name.c_no GROUP BY c_date,course”;

整個查詢語句很長,同時還代入了變數,直接放到mysqli_query()中的話,九成會出事.

所以在PHP中的變數除了指定特定的值之外,還有一個重要的工作就是幫我們把一長串的文字或運算結果簡化為一個變數來處理.

因此$ro=mysqli_query($link,$sql);比起$ro=mysqli_query($link,”SELECT p_course.c_date,p_class_name.c_name as ‘course’ FROM `p_course`,p_class_name WHERE c_date >='”.$get_month_start.”‘ and c_date <='”.$get_month_end.”‘ and c_section=p_class_name.c_no GROUP BY c_date,course”);肯定是簡潔多了;

接著我們來看

$ro=mysqli_query($link,$sql);

這一句;

這一句的作用在於連線資料庫,並送出查詢語句,既然送出了查詢語句,那表示我們應該會得到一個查詢的結果,這個結果無法直接echo出來,所以我們先指定給$ro,跟前面一樣,不指定給變數可以嗎?不是不可以,而是不指定給變數的話,後續處理會很麻煩;

這裏要額外提到的是,當查詢的語句成功時,會返回查詢的結果,那如果查詢失敗呢?會得到false,這意謂著,我們也可以利用$ro來做查詢成功與否的判斷,判斷的方式就是看返回的是不是false,但是要注意的是,所謂的查詢成功,在這裏指的是查詢的語法被資料庫接受沒出錯就叫查詢成功,即使得到的查詢結果是沒有任何資料,也算查詢成功,所以我們除了判斷false,有時也得判斷返回的結果是否有資料存在.

 

再來是 $

row=mysqli_fetch_assoc($ro);

這一句;

mysqli_fetch_assoc($ro);

作用為從$ro中一筆一筆取得資料,然後指定給變數$row

需要理解的是,我們由資料查詢得到的結果,可能是有多個欄位的多筆資料,這樣的型式程式無法直接處理,因此採用逐筆讀出的方式,

所謂的逐筆讀出是指$row的資料型式會是一個一維陣列,以欄位來間隔資料,像是(大明,90,50,10,32,44)這樣的一筆資料是大明的各科成績,

具體的陣列形態會以鍵值來對應資料,所以完整的$row的內容會是(姓名=>大明,國文=>90,數學=>50,地理=>10,英文=>32,社會=>44)

即然是以鍵值來對應,所以我們在取出資料時,只要指定鍵值就可以了,像是echo $row[‘國文’]會得到90

在開始後面的do..while迴圈時,同學們可以自己做個小實驗,把迴圈先註解後,以逐行的方式執行一次$row=mysqli_fetch_assoc($ro);然後echo $row[‘g_name’];如下

 
$row=mysqli_fetch_assoc($ro);
echo $row['g_name'];
$row=mysqli_fetch_assoc($ro);
echo $row['g_name'];
$row=mysqli_fetch_assoc($ro);
echo $row['g_name'];
$row=mysqli_fetch_assoc($ro);
echo $row['g_name'];
$row=mysqli_fetch_assoc($ro);
echo $row['g_name'];
$row=mysqli_fetch_assoc($ro);
echo $row['g_name'];
$row=mysqli_fetch_assoc($ro);
echo $row['g_name'];
$row=mysqli_fetch_assoc($ro);
echo $row['g_name'];
$row=mysqli_fetch_assoc($ro);
echo $row['g_name'];
 

這樣執行16次後,會得到和do..while()迴圈一樣的結果,這就是mysqli_fetch_assoc($ro);逐筆取資料的展現,只是這樣寫很不好看,而且我們無法預知到底要寫多少筆才是資料的結尾,因此採用迴圈來處理重覆執行的作業,同時也利用迴圈來處理判斷是否資料結束,因為當取到沒有下一筆時,會返回false$row,此時就會結束迴圈了.

最後額外一提,mysqli_fetch_assoc($ro);一定要指定給$row嗎?當然不是一定,但如果不指定會有點麻煩,同學可以直接測試下面的程式碼:

 
echo mysqli_fetch_assoc($ro)['g_name']."&ltbr&gt";
echo mysqli_fetch_assoc($ro)['g_name']."&ltbr&gt";
echo mysqli_fetch_assoc($ro)['g_name']."&ltbr&gt";
echo mysqli_fetch_assoc($ro)['g_name']."&ltbr&gt";
echo mysqli_fetch_assoc($ro)['g_name']."&ltbr&gt";
echo mysqli_fetch_assoc($ro)['g_name']."&ltbr&gt";
echo mysqli_fetch_assoc($ro)['g_name']."&ltbr&gt";
echo mysqli_fetch_assoc($ro)['g_name']."&ltbr&gt";
 

是否發現一樣可以正確逐筆取得資料?而且還少了一個$row變數?但這樣的用法如果要使用迴圈來重覆取值時,除了格式變得複雜難維護之外,還會遇到不知如何判斷迴圈結束的問題,因為如果直接把.mysqli_fetch_assoc($ro)放到while(mysqli_fetch_assoc($ro))裏的話,那麼這時資料又跳了一筆,然後迴圈裏再去echo mysqli_fetch_assoc($ro)[‘g_name’]時,會出現的是下下一筆資料而不是下一筆資料,因此最終還是得再設一個變數來處理,多此一舉;

這類的例子也很多,日後處理時間時會常遇到,比如我們要取現在當下的時間來做判斷或計算時,我們會使用time()這個函數,然後先指定給一個變數,可能是$get_now=time();,之後都以$get_now來處理時間,為什麼不每次都用time()函數來處理?因為直接引用time()的話,那麼每一段程式得到的時間數值可能都會不一樣,根本無法正確處理.

暫時先解說到這裏,至於要使用while,do…while還是for loop,其實沒有一定,端看使用的目的來決定,同學們現階段該努力的是每天練習打程式碼,至少字不會拚錯,格式不會錯比較重要,如果拚字和格式都還搞不定,一直在執著要弄懂這些原理的話,就好象整天坐在房裏研究各種健身運動對減肥的效用,執著於想要找一種最有效的健身方式來減肥,但光那些研究的時間,都可以出門直接運動好幾輪了,是否應該先出門運動一趟,再回來根據自己的體能狀況調整想要健身的項目會比較妥當一些?




[DAY-018]前端動態技術-內容的編輯與頁腳的處理/ HTML標籤解說

因為有點小感冒,今天一天頭都暈暈的,再加上外接硬碟不是很穩定,搞到軟體掛了不能用,一怒之下把老師建議的外接作業環境都搬到本機上作業,課程內容主要是接續上周的RWD及BOOTSTRAP雙開的網頁製作教學,同時比較兩種製作方式的差異,今天有比較多的內容是在講述CSS的內容,不過這部份我還算熟,雖然沒有特別去聽,但也還跟得上進度,只是一直很想睡而已,比較有收獲的地方主要是一些老師提到的業界實務的變通方式或處理,比如垂直置或DIV的排列美觀問題.

下午結束了網頁的實習內容後,老師開始講解HTML5的一些標籤特性,這部份對我來說也是有點枯橾,因為七成的標籤我都可以直接使用,倒是標籤的屬性我一直沒有去深入了解,這段期間應該要來好好的摸索一下;中間有提到canvas的時候,老師順帶提了一下adobe animator,也就是flash,我順口就問了老師關於animator是否還在使用actionscript來做動畫還是改成javascript了?結果老師好象沒聽懂我的問題,說了一堆影格之類的東西,我只好自己上網找,大概的狀況就是雖然animator還是有支援actionscript,但是如果是FOR HTML5的製作或輸出,基本上是以js為主了,而且adobe似乎也自己定義了一些動畫製作的js函式庫來使用.

原本想製作一篇關於mysql聯表查詢的文章,但精神狀況不佳最後做罷.




[DAY-017]資料庫語法複習 / 字串串接練習

今天上課先是簡單複習了一下上周提到的資料庫連接的語法,然後出了一題課堂練習;

資料庫查詢結合PHP練習

之後老師出了一題字串串接的練習題,這題除了考眼力外,沒有什麼難度;

字串串接練習

 

這麼麻煩的字串練習是做為在php中常使用的sql語法做預備

把資料表欄位結合字串

課堂練習題就是寫一個表單可以去更新資料表的資料

利用網頁表單來更新資料庫的資料

之後又出了一題課堂練習是新增資料到資料表去,這題也算是簡單的練習

利用PHP來新增資料

最後一個練習是資料表串接的練習,也算是sql語法的練習,只是改成利用php的語法來操作資料庫而已;

複合式資料查詢練習




PHP 陣列的觀念

陣列就是一群變數的集合,這群變數有相同或類似的性質,比如學生的成績:

大明-98
小花-82
小乖-60
仔仔-31
妮妮-77

假如不使用陣列的話,那麼當我們想要列出所有學生的成績時,必須每個學生指定一個變數來記錄成績,然後再列印出來:

$A=98
$B=82
$C=60
$D=31
$E=77

然後列印成績的指令得一行一行打;

echo $A;
echo $B;
echo $C;
echo $D;
echo $E;

當資料筆數有上百或上千筆時,這樣的做法是非常沒效率的,所以我們需要一個可以簡化的做法來紀錄和列印大量資料的方式,陣列就是一個方法;

當我們使用陣列時,必須給定一個變數名來代表資料的名稱,方便自己辦識,比如用”score”來代表學生的成績.

現在我們可以把學生的成績用score來表示,但我們需要辨識每個學生的成績,所以我們得加上”索引”,索引通常是編號,由0開始,有時也可以使用字串來當索引,我們把學生的成績使用陣列來表示如下;

$score[0]=98;
$score[1]=82;
$score[2]=60;
$score[3]=31;
$score[4]=77;

現在,我們只需要記住score和索引,就可以取代之前記住五個名字或五個變數的麻煩,在辦識上也變得簡單了,那麼列印資料是不是也變得簡單了?

由於陣列的變數名稱是一樣的,改變的只有索引值,而索引值又是數字,可以透過運算來改變,因此我們可以使用迴圈來簡化列印的工作:

for($i=0,$i<count($score),$i++){
  echo $score[$i]." ";
}

我們利用count()函數來計算陣列$score裏的元素個數,在echo時,我們在索引值裏帶入$i的數值,$i會在每跑一次迴圈時自動加1,這樣我們就可以得到$score[0]~$score[4]的成績了.

多維陣列的觀列就是一維陣列的延伸,等於是一維陣列裏的每個元素都各自代表了另一個陣列,以學生成績來舉例就是一位學生有多科的成績;

國文,數學,英文,地理,自然

大明-98,22,34,68,99
小花-82,74,56,77,65
小乖-60,60,56,54,53
仔仔-31,45,99,76,89
妮妮-77,21,23,44,12

如果我們想用一維陣列來表示學生多科成績的話,可以把成績當成字串放入一維陣列,但是這樣的話,如果要處理單科成績時會變得很麻煩;

$score[0]="98,22,34,68,99";
$score[1]="82,74,56,77,65";
$score[2]="60,60,56,54,53";
$score[3]="31,45,99,76,89";
$score[4]="77,21,23,44,12";

如果是這樣的紀錄方式,那麼我們要取出某科的成績時就得先把學生的成績全列出來,再以字串處理的方式去抓出某科的資料:

比如:列印每位學生的英文成績

步驟:

1.找出學生0的成績:$score[0] -> 98,22,34,68,99
2.英文是第2個逗號後到第三個逗號的數字 -> 34
3.echo 34
4.找下一位學的生的成績
5..重覆2~4

我們可以用二維陣列來簡化資料的紀錄與後續的處理,我們把國文,數學,英文,地理,自然這5個科目,分別以索引值0~4來代表,這樣我們可以延續先前提到的一維陣列來紀錄學生的每科成績.

$score[0][0]=98
$score[0][1]=22
$score[0][2]=34
$score[0][3]=68
$score[0][4]=99

$score[1][0]=82
$score[1][1]=74
$score[1][2]=56
$score[1][3]=77
$score[1][4]=65

$score[2][0]=60
$score[2][1]=60
$score[2][2]=56
$score[2][3]=54
$score[2][4]=53

$score[3][0]=31
$score[3][1]=45
$score[3][2]=99
$score[3][3]=76
$score[3][4]=89

$score[4][0]=77
$score[4][1]=21
$score[4][2]=23
$score[4][3]=44
$score[4][4]=12

其中,$score第一個索引值代表的是學生,而第二個索引值則是代表科目,如果我們現在要列印每個學生的英文成績,那麼只要指定第二個索引值的內容為2就可以了:

echo $score[0][2]."<br>";
echo $score[1][2]."<br>";
echo $score[2][2]."<br>";
echo $score[3][2]."<br>";
echo $score[4][2]."<br>";

用迴圈來處理會更快

for($i=0 ; $i<count($score) ; $i++){
echo $score[$i][2]." ";
}

在這個迴圈中,我們要顯示的是每個學生的某科成績,所以迴圈要跑的次數是學生的數量,而學生的數量是在第一個索引值中,因此我們以count($score)來取得第一個索引的個數,如果我們要列印的是全部科目的成績,那麼可以用count($score[0])來取得科目的數量,在迴圈的內部我們要列印的是英文字,因此只需要第2個索引值固定在2就可以了,而第一個索引值則帶入$i,如此才可以取得每位學生的英文成績.

因此,既然我們已經以二維陣列來紀錄學生的每科成績了,當然就可以用迴圈來顯示每位學生的每科成績了,在這裏要注意的是,因為我們的條件是”每位學生”及”每科成績”,因此”每位學生”是一個迴圈,”每科成績”也是一個迴圈,所以要使用巢狀迴圈來顯示.

for($i=0;$i<count($score);$i++){
echo "student ".$i.":";
for($j=0;$j<count($score[0]);$j++){
echo $score[$i][$j].",";
}
echo " ";
}

要注意的是,在巢狀迴圈中,每一層的計數變數不能相同,所以第一層使用$i,第二層則是使用了$j,每一層迴圈都可以獨立處理一些作業,所以我在第一層迴圈列印了字串”student”然後加上$i這個變數值,這樣會顯示出student 0~student 4這樣的字串在網頁上,而第二層則是要顯示每科成績,這時把$i和$j分別帶入第一個索引值和第二個索引值,然後我們在每次顯示不同科目成績後加入一個逗號”,”,當內圈$j執行完畢時,會回到$i這一層,此時我們加上了一個斷行標籤<br>,那麼在網頁上時示時就會在每位學生的每科成績顯示完後,換到下一行,然後顯示下一位學生的每科成績.
網頁上呈現的結果:

student 0:98,22,34,68,99,
student 1:82,74,56,77,65,
student 2:60,60,56,54,53,
student 3:31,45,99,76,89,
student 4:77,21,23,44,12,

以上,就是陣列的觀念及迴圈的應用,建立了對陣列的認識和了解後,後續我們可以進一步的去了解陣列的宣告及建立的方式




[DAY-016]影像視覺 / 遮色片應用

今天上的內容主要是遮色片的應用,這是個神奇的東西,以前我也只是一知半解,今天看老師的操作,總算有所領悟.

回家作業是以各職類的影像為基礎再做一次banner,另外以化粧品為主題做一份產品banner,大小為800x300x72dpi

 

下午是勞工衞生安全講習,內容滿平淡的,之後是班會和打掃,輕鬆的一天




[作業]PHP撈取資料庫資料

回家作業題目

 

這次的回家作業算是簡單,只是需要複習一下先前的sql語法就可以輕鬆應對了,

解題思考:

1.先完成第一個檔案的資料傳送,使用get或post都可以,只要form的格式和action的檔案路徑有對,基本上就沒問題了.

2.第二個檔案先確認可以收到第一個檔案傳送過來的資料.

3.測試資料庫的連線和基本的撈取資料沒問題.

4.修改查詢語法,只撈取5筆,或全部撈取但只顯示5筆.

這一題練習,其實還有很多做法可以完成同樣的結果,比如在sql語法上,也可以直接把接收的欄位名代入語法中查詢;
比如 : $sql=”SELECT “.$get_col.” FROM mygames LIMIT 5 “;
這樣的話,在$ro=mysqli_quer($link,$sql) 失敗時會得到一個false的結果,直接利用這個結果,我們可以判定是要執行後續的顯示還是查無資料,
當然,也可以把資料都撈出來後,再去比對是否有$row[$get_col]這個元素存在,沒有的話就查無資料.




[DAY-015]PHP-cookie / 登入 / 資料庫連接

今天先介紹了cookie的使用,cookie是使用在本機上的超域變數,cookie的出現是因為網頁本身是一種"無狀態的文件",也就是說當文件轉換或關閉時,所有的狀態和暫存在記憶體中的東西都會清除,但為了實務上的需要,所以才會有cookie和session的出現,用來保留網頁的狀態和資訊,做為其它的應用.

一.cookie的使用比起seesion簡單多了,但限制也比較多,早期cookie有很多安全性上的問題,目前跟安全性有關的都轉往session去處理,cookie則只用來儲存一些比較不重要的資訊或做為標記使用.

二.課堂練習:因為這周的課程比較有難度,所以老師花比較多時間在一對一對的指導上,課堂練習的時間也比較多.

利用cookie或session來製作帳號密碼登入登出

搞懂session和cookie機制的我,覺得功力有所提昇了,所以這題很快就做完了,連太閒才做的登出功能也做完了.

檔案一.用來申請帳號及產生密碼並判斷是否已登入

檔案二.用來輸入帳密確認是否正確並註記是否為登入成功狀態

登入登出的執行畫面

其中,關於印出申請過的帳密,然後要求要新的在最上頭顯示,也就是以遞減的方式來顯示的這一段,我是直接在迴圈起始上以陣列的總數為起始值,然後遞減印出,不過老師說很多人還搞不懂迴圈,直接改變起始值的方式可能會讓大家更混亂,要我挑戰起始值為0的條件下,如何遞減印出,我一時沒會意過來,想了一些奇怪的方式像是用總數的差值去計算,或是先準備好一串陣列的順序去填入之類的,回家後突然靈光一閃,才想到我們是網頁上要顯示成果,最終是字串的方式來呈現,所以只要把顯示的結果改成字串串接就可以達到一樣的效果了:

很多同學不懂超域變數的意義和使用方式,所以在這卡了很久,我自己是用銀行存錢來舉例,如果錢放在家裏,每次要用錢就得回家拿,也只能從家裏拿,如果錢放在銀行,那麼不管我人在那,都可以就近找分行或提款機來領錢,這樣舉例還不懂的話,真的就是沒有放感情在學程式這件事上了.

雖然seesion的部份大家卡了很久,不過最後一小時,老師還是再多上了關於資料庫連線的部份,老師同時介紹了 mysqli_query 和 mysql_query 的兩種連線方式,以因應可能有些系統的PHP還在5.4以前的版本.

如果資料輸入都正確,就可以在瀏灠器上顯示正確撈取的資料

DB正確撈取的資料顯示

回家作業是一個存取資料庫的練習,配合先前的GET/POST,以傳值的方式來要求存取資料

回家作業題目




[DAY-014]丙級術科練習

今天把上周沒做完的第一題做完後就讓同學自己練習,接著老師讓同學們自己練習做一遍;
下午的課基本上是自己自習,老師有提供了一些商業商品圖像製作的素材和範例給大家練;
不過我今天都沒在聽就是了,今天把課表的程式做完了,完成月份的檢視,

課表

下課後同學提議要去麥當勞問問題,來了一半的人,逐個詢問遇到的問題和瓶頸,把一些習題再做一次說明,大概兩個小時左右散會.




PHP迴圈印星星練習

迴圈在程式語言中是一種重覆結構的流程控制,用來處理需要大量重覆執行的工作,而迴圈中又可以套迴圈,叫做巢狀迴圈,也可以加入判斷式來增加迴圈的可用性,以下以印星星這個常出現的練習題來做迴圈的練習與說明.

(一)for迴圈結構與遞增關係

for迴圈在大多數的狀況下是以定量的方式來重覆執行一項工作,定量的意思就是有一定的執行次數,因此在FOR迴圈的結構上,會需要一個起始值,一個執行條件,和一個遞增條件:像這樣

FOR( 起始值 ; 執行條件 ; 遞增條件 ){

要執行的工作

};

起始值可以是任意值,也可以直接放運算式來產生一個起始值;

執行條件可以不只一個執行條件,但重點在於必須是一個可以讓迴圈結束的條件,不然會變成無窮迴圈就麻煩了.

遞增條件也可以用運算式來產生遞增條件,只是大多時候都會用簡單點的方式來呈現.

以下以單一迴圈來說明遞增關係,雖然大多數都會看到$i++這樣的遞增,但實際上看需求可以增加不同的值來產生跳號的效果.以下分別為+1,+2及+4的執行結果。

(二)巢狀迴圈

接下來我們來試試巢狀迴圈,巢狀迴圈因為有兩層以上的迴圈在控制,所以在設計上要特別注意內外圈的關係和執行工作的層次關係,比如在製作HTML的表格時<tr>標籤通常會在外圈時執行,而內圈則是執行<td>標籤.

以下我們用印星星來說明巢狀迴圈的應用與變化:

執行的結果會是

 

執行的結果會是

 

(三)複合條件迴圈

實務上會遇到的迴圈應用不會只是單純的執行一項工作,而且要在重覆的作業中再判斷一些工作是否執行或額外執行其它工作,這時就要增加判斷式或其它運算式來協助處理,比如大樓管理員在分信的時候不只是把同一住戶的信放在一起,還同時要判斷有沒有廣告信要挑出來,這樣的作業在”分信”這個重覆的動作還加入了”判斷是否同一住戶”及”判斷是否有廣告信”,

我們以一個方型星星的變化來說明:

執行結果會是:

執行結果會是:

執行結果會是:

 




[DAY-013]RWD與BOOTSTRAP初探

 

今天天延續上周的DW操作,介紹了瀏覽器預設白邊的處理,不過這部份我還是習慣直接丟個reset.css檔來處理,然後也介紹了float的設定,這是HTML4以後很常使用排版手法,最後介紹了上傳檔案到虛擬主機,不過因為職訓場的對外IP都是同一個,所以連線數超過限制,只有一半的人可以連線成功,到這邊算是開站教學告一段落了,老師也把每個步驟都說得很仔細.

測試網站上傳成果

上傳網頁到虛擬主機

下午的課老師先介紹了一下平常在接案的時候有一些和客戶往來的注意事項,像是雙方要交付的資料,文件等等的,然後就開始進入比較正式的網頁開發教學,這邊老師一次要我們開兩個站,一個用RWD的方式來製作,一個則是用BOOTSTRAP的樣板來製作,老師有特別解釋這樣做的原因是為了讓大家比較快了解到業界實際的趨勢,也讓大家知道這兩種主流的設計方式的差異,我覺得老師心臟也真的夠大才敢這樣教,不過我倒是收獲不少,有人帶著實際操作一次還是比看書慢慢摸索來得快多了.

vw單位的效果

RWD的設計方式介紹

格線系統介紹

BOOTSTRAP介紹

本日成果




[DAY-012]PHP-系統變數 / 日期 / SESSION

今天上的內容只有三個,但難度頗高,系統變數的部份主要是介紹IP的取得,在實務上可以用來判斷使用者的IP及安全性的檢查.

日期變數的部份主要是取得系統的時間然後做一些取值的動作,不過PHP的日期函數及變化很多,實務也是用得很頻繁的功能

日期隨堂練題

傳遞日期後比大小

SESSION是我很期待的課程,因為以前自己看書和GOOGLE都似懂非懂,今天老師實際帶著做測試,感覺有懂了.

綜合練習

執行成果




[作業]PHP陣列及亂數應用-帳號及密碼產生

PHP程式的作業內容

在單一檔案內傳遞POST陣列並運動出隨機密碼配對

解題思考:

1.讀出帳號之後跟著產生密碼

2.因為密碼長度和密碼內容都是亂數,所以需要兩個亂數變數

3.在同一檔案中先判斷是否有讀到表單傳過來的值

4.表單陣列元素如果無內容,則不產生密碼

5.無資料傳輸則顯示表單,有資料則隱藏表單