PHP - part IIEnsky / 林宏昱
I/O in PHP           HTTP RequestHTTP       Web server     stdin + envResponse+ BODY             stdout         CGI
I/O in PHPInput部分呢,PHP會把它轉為變數傳進來,這我們之後會提但Output呢,卻是直接stdout輸出<?phpecho “123”;?>
I/O in PHPecho “<html>”;                                豈不是超麻煩!echo “<head>”;echo “<meta charset=‘utf-8’>”;echo “<title>te...
I/O in PHP由於一直echo來echo去真的超麻煩所以PHP使用<?php ?>這個符號一旦用<?php ?>包起來的,就是php程式沒有包起來,就直接輸出stdout<?php echo $var; ?>也可以用<?=$var?><b...
I/O in PHP印資料的時候呢,其實有個小技巧<?php    $users = ["Jalex", "ensky"];?><table>      <?php foreach ($users as $row): ?>      <tr><...
I/O in PHP<?phpforeach ($a as $b):     xxxendforeach;等於foreach ($a as $b) {     xxx}if也可以喔! if(): else if (): else: endif;
I/O in PHP既然有stdout的輸出,當然也有stdin的輸入。ref: http://php.net/manual/en/features.commandline.io-streams.php因此,你大可以用PHP做任何運算況且,PH...
談了那麼多語言特性之後,我們終   於開始要進入正題了
表單(form)
Why Form?表單用來幹嘛?• 提供你一個介面,把資料傳到server上,做  必要的處理比方說登入的時候你會需要傳帳號、密碼到server那邊,讓他驗證你的身分
表單的傳輸• 一個普通的表單有兩種傳輸方式  – GET  – POST• 有沒有似曾相識?GET /index.php HTTP/1.1Host: ensky.tw
表單的運作 - GETGET的傳輸方式,就是把要傳輸的資料,加到網址後面。原網址?keyA=valueA&keyB=valueB例如說我google中搜尋 ensky 會連到https://www.google.com.tw/search?q=...
表單的運作 - GETGET /search?q=ensky HTTP/1.1Host: www.google.com.twserver收到這兩行就知道他傳了一個q過來q的值是ensky
表單的運作 - POST和GET方法不同,POST的傳輸方式,就是把要傳輸的資料,加到HTTP Request BODY中。POST /auth/login HTTP/1.1Host: comic.ensky.twid=ensky&pw=ens...
表單的運作 - POST而因為不會在網址上出現,所以和GET方法相比,有幾個好處• 不會被web log記錄起來• 不會被站在你後面的人看到網址而也有一些壞處• 分享網址無法分享資訊
表單的種類不細談,請自己找google HTML Form請特別注意label標籤的使用方法
表單的種類HTML5多了很多有趣的inputs可以自己摸摸看
表單 in PHP一個基本的html登入表單// index.php<form action="login.php" method="post">   <input type="text" name="username">   <input t...
表單 in PHPbrowser看到form action="login.php",他就會發一個POST HTTP Request到login.php那頁去,於是PHP就可以收到web server parse好的資料。<?php$_POST[...
Stateless – WWW recall again           HTTP RequestHTTP       Web server     stdin + envResponse+ BODY             stdout ...
Stateless你會發現,一來一往,兩次request中間並不會有相關性也就是說,server那邊唯一的資訊,就只有你傳過來的URI資訊。這就叫做 Stateless(無狀態)怎麼辦呢?
Stateless - solution聰明的HTTP協定設計者,發明了一個叫cookie的方式,藉由發送HTTP Request的時候,加帶一串key-value pair來傳資料。cookie是server設的,server決定你的cook...
Cookie - Demo• 舉例:你登入之後,server請你把狀態存下來。Request      POST /auth/login HTTP/1.1      Host: comic.ensky.tw      id=ensky&pw=e...
Cookie - DEMO• 然後之後的request你的browser都會把資訊  傳過去Request    GET /comic_list HTTP/1.1    Host: comic.ensky.tw    Cookie: id=en...
Cookie in PHP - Setting<?php$value = something from somewhere;setcookie("TestCookie", $value);setcookie("TestCookie", $val...
Cookie in PHP - Getting<?php// Print an individual cookieecho $_COOKIE["TestCookie"];print_r($_COOKIE);
Cookie’s problem網路世界流傳著一個名言「絕對不要相信使用者」而我們知道,cookie完全由使用者的瀏覽器傳過來,因此使用者很可能竄改cookie,或甚至有惡意程式盜取使用者的cookie來偽造登入。
Cookie’s Problem - Solution    如何解決cookie問題呢?
Cookie’s Problem - Solution最簡單的方法呢,就是把cookie加密。不告訴使用者加密的方法,由server這邊逕行加密,導致使用者無法竄改資料。http://stackoverflow.com/questions/12...
而有一個機制,是把資料都存在server端,而client端我們會產生一個隨機字串給他(鑰匙)server端的資料對應到那把鑰匙,藉由client給我們那把鑰匙,我們就知道要拿哪一份資料給他。而我們稱呼這套機制為 -- Session
Session in PHP<?phpsession_start();// Setting$_SESSION[‘TestSession’] = ‘test’;// Gettingecho $_SESSION[‘TestSession’];// ...
Session in PHP• session destroy$_SESSION = array();session_destroy();其他session操作、處理http://www.php.net/manual/en/book.sessi...
Cookie and session noteset_cookie()會做的事情• 在response header裡面多加上set-cookie來  設定cookie
Cookie and session notesession_start()              會做的事情1. 產生一組隨機的key string2. 在response header裡面set-cookie:   session_ke...
Cookie and session note我們知道,HTTP Response header一定在response body之前送出。因此,我們不能在set_cookie或者session_start之前印出任何字串。因為印字串代表送出Re...
OO in PHP雖然說PHP是簡單的script language,設計上是一頁一頁,跑完就結束的script。但是等到你開始寫中型網站的時候,若架構上亂寫一通,會產生很多問題。因此,PHP將OO的一些功能帶進來,給你規劃架構的另外一個選擇。
OO in PHP - basic<?phpclass SimpleClass{    // property declaration    public $var = a default value;   // method declarat...
OO in PHP – ctor / dtor<?phpclass CtorTestClass{    function __construct ($msg = ‘’) {        echo “constructed, msg = $ms...
OO in PHP – inheritance<?phpclass Animal {      public $name;      function __construct ($name) {             $this->name ...
OO in PHP還有很多功能、元素我都沒有介紹。有些功能還滿重要的,比如說 :: 運算子、statickeyword、Overloading、Cloning等等但是因為再講下去會有點無聊,所以你回去之後自己看XD。ref: http://ww...
換頁 in PHP如果你想換頁,比如說登入失敗要回到上一頁,或者登入成功要進入主要頁面<?phpheader(location: index.php);exit;意思是請在HTTP Response header中加入location: ind...
PHP Useful FuncsPHP有超多很好用的functions,這也是很多人愛他的原因。這邊列舉了一些我個人很常用的function群,請自己回去看。Strings: http://www.php.net/manual/en/book....
Homework• 複習今天教的內容,把一些概念搞懂 – I/O – Form – Session 、 Cookie – OO – Useful function
Homework – on course• 實作題 III:登入介面http://vm2.ensky.tw/~ensky/03/index.php現場做之 SPEC:•   登入•   帳號密碼寫死在code裡面•   如果已經登入了還跑到登入...
Homework – on course• Useful function  – session相關 function  – isset
Homework – home回家做之 SPEC:• 註冊   – 使用CSV存使用者資料,不可使用資料庫• 列出註冊者的帳號&密碼在首頁• 現場做的所有SPEC都要維持住• Userful Functions   –   fopen   – ...
OpenWebSchool - 03 - PHP Part II
Upcoming SlideShare
Loading in...5
×

OpenWebSchool - 03 - PHP Part II

1,196

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,196
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

OpenWebSchool - 03 - PHP Part II

  1. 1. PHP - part IIEnsky / 林宏昱
  2. 2. I/O in PHP HTTP RequestHTTP Web server stdin + envResponse+ BODY stdout CGI
  3. 3. I/O in PHPInput部分呢,PHP會把它轉為變數傳進來,這我們之後會提但Output呢,卻是直接stdout輸出<?phpecho “123”;?>
  4. 4. I/O in PHPecho “<html>”; 豈不是超麻煩!echo “<head>”;echo “<meta charset=‘utf-8’>”;echo “<title>test page</title>”;echo “</head>”;echo “<body><p>這頁沒有東西</p></body>”;echo “</html>”;
  5. 5. I/O in PHP由於一直echo來echo去真的超麻煩所以PHP使用<?php ?>這個符號一旦用<?php ?>包起來的,就是php程式沒有包起來,就直接輸出stdout<?php echo $var; ?>也可以用<?=$var?><body><p>這裡不需要echo</p></html>
  6. 6. I/O in PHP印資料的時候呢,其實有個小技巧<?php $users = ["Jalex", "ensky"];?><table> <?php foreach ($users as $row): ?> <tr><td><?=$row?></td></tr> <?php endforeach; ?></table>
  7. 7. I/O in PHP<?phpforeach ($a as $b): xxxendforeach;等於foreach ($a as $b) { xxx}if也可以喔! if(): else if (): else: endif;
  8. 8. I/O in PHP既然有stdout的輸出,當然也有stdin的輸入。ref: http://php.net/manual/en/features.commandline.io-streams.php因此,你大可以用PHP做任何運算況且,PHP的資料結構比C寫起來好用太多XD還有一堆網路相關的socket函式,寫Network Programming作業也很方便:P
  9. 9. 談了那麼多語言特性之後,我們終 於開始要進入正題了
  10. 10. 表單(form)
  11. 11. Why Form?表單用來幹嘛?• 提供你一個介面,把資料傳到server上,做 必要的處理比方說登入的時候你會需要傳帳號、密碼到server那邊,讓他驗證你的身分
  12. 12. 表單的傳輸• 一個普通的表單有兩種傳輸方式 – GET – POST• 有沒有似曾相識?GET /index.php HTTP/1.1Host: ensky.tw
  13. 13. 表單的運作 - GETGET的傳輸方式,就是把要傳輸的資料,加到網址後面。原網址?keyA=valueA&keyB=valueB例如說我google中搜尋 ensky 會連到https://www.google.com.tw/search?q=ensky藉由把資料加在網址後面,成功的讓server收到我要傳過去的資訊。
  14. 14. 表單的運作 - GETGET /search?q=ensky HTTP/1.1Host: www.google.com.twserver收到這兩行就知道他傳了一個q過來q的值是ensky
  15. 15. 表單的運作 - POST和GET方法不同,POST的傳輸方式,就是把要傳輸的資料,加到HTTP Request BODY中。POST /auth/login HTTP/1.1Host: comic.ensky.twid=ensky&pw=ensky5566
  16. 16. 表單的運作 - POST而因為不會在網址上出現,所以和GET方法相比,有幾個好處• 不會被web log記錄起來• 不會被站在你後面的人看到網址而也有一些壞處• 分享網址無法分享資訊
  17. 17. 表單的種類不細談,請自己找google HTML Form請特別注意label標籤的使用方法
  18. 18. 表單的種類HTML5多了很多有趣的inputs可以自己摸摸看
  19. 19. 表單 in PHP一個基本的html登入表單// index.php<form action="login.php" method="post"> <input type="text" name="username"> <input type="password" name="pw"> <button type="submit">登入</button></form>
  20. 20. 表單 in PHPbrowser看到form action="login.php",他就會發一個POST HTTP Request到login.php那頁去,於是PHP就可以收到web server parse好的資料。<?php$_POST[username] = 剛剛打的username;$_POST[pw] = 剛剛打的密碼;而GET Method的話則是$_GET,其他一樣
  21. 21. Stateless – WWW recall again HTTP RequestHTTP Web server stdin + envResponse+ BODY stdout CGI
  22. 22. Stateless你會發現,一來一往,兩次request中間並不會有相關性也就是說,server那邊唯一的資訊,就只有你傳過來的URI資訊。這就叫做 Stateless(無狀態)怎麼辦呢?
  23. 23. Stateless - solution聰明的HTTP協定設計者,發明了一個叫cookie的方式,藉由發送HTTP Request的時候,加帶一串key-value pair來傳資料。cookie是server設的,server決定你的cookie有什麼。比如你登入之後,server可能會請你把登入狀態存起來
  24. 24. Cookie - Demo• 舉例:你登入之後,server請你把狀態存下來。Request POST /auth/login HTTP/1.1 Host: comic.ensky.tw id=ensky&pw=ensky5566Response HTTP/1.1 200 OK Date: Thu, 09 Aug 2012 15:35:46 GMT Set-Cookie: id=ensky; valid=1
  25. 25. Cookie - DEMO• 然後之後的request你的browser都會把資訊 傳過去Request GET /comic_list HTTP/1.1 Host: comic.ensky.tw Cookie: id=ensky; valid=1所以server就知道你的狀態囉!
  26. 26. Cookie in PHP - Setting<?php$value = something from somewhere;setcookie("TestCookie", $value);setcookie("TestCookie", $value, time()+3600);/* expire in 1 hour */setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
  27. 27. Cookie in PHP - Getting<?php// Print an individual cookieecho $_COOKIE["TestCookie"];print_r($_COOKIE);
  28. 28. Cookie’s problem網路世界流傳著一個名言「絕對不要相信使用者」而我們知道,cookie完全由使用者的瀏覽器傳過來,因此使用者很可能竄改cookie,或甚至有惡意程式盜取使用者的cookie來偽造登入。
  29. 29. Cookie’s Problem - Solution 如何解決cookie問題呢?
  30. 30. Cookie’s Problem - Solution最簡單的方法呢,就是把cookie加密。不告訴使用者加密的方法,由server這邊逕行加密,導致使用者無法竄改資料。http://stackoverflow.com/questions/1289061/best-way-to-use-php-to-encrypt-and-decrypt
  31. 31. 而有一個機制,是把資料都存在server端,而client端我們會產生一個隨機字串給他(鑰匙)server端的資料對應到那把鑰匙,藉由client給我們那把鑰匙,我們就知道要拿哪一份資料給他。而我們稱呼這套機制為 -- Session
  32. 32. Session in PHP<?phpsession_start();// Setting$_SESSION[‘TestSession’] = ‘test’;// Gettingecho $_SESSION[‘TestSession’];// print out all sessionprint_r($_SESSION);
  33. 33. Session in PHP• session destroy$_SESSION = array();session_destroy();其他session操作、處理http://www.php.net/manual/en/book.session.php
  34. 34. Cookie and session noteset_cookie()會做的事情• 在response header裡面多加上set-cookie來 設定cookie
  35. 35. Cookie and session notesession_start() 會做的事情1. 產生一組隨機的key string2. 在response header裡面set-cookie: session_key=key;3. 讓$_SESSION陣列的內容mapping到對應的地 方(有可能是file, database, memory…)
  36. 36. Cookie and session note我們知道,HTTP Response header一定在response body之前送出。因此,我們不能在set_cookie或者session_start之前印出任何字串。因為印字串代表送出Response Body,php就會把Response Header先送出去,就來不及了XD
  37. 37. OO in PHP雖然說PHP是簡單的script language,設計上是一頁一頁,跑完就結束的script。但是等到你開始寫中型網站的時候,若架構上亂寫一通,會產生很多問題。因此,PHP將OO的一些功能帶進來,給你規劃架構的另外一個選擇。
  38. 38. OO in PHP - basic<?phpclass SimpleClass{ // property declaration public $var = a default value; // method declaration public function displayVar() { echo $this->var; }}$instance = new SimpleClass;$instance->displayVar();
  39. 39. OO in PHP – ctor / dtor<?phpclass CtorTestClass{ function __construct ($msg = ‘’) { echo “constructed, msg = $msg.”; } function __destruct () { echo ‘destructed.’; }}$instance = new CtorTestClass;$instance1 = new CtorTestClass(‘haha’);
  40. 40. OO in PHP – inheritance<?phpclass Animal { public $name; function __construct ($name) { $this->name = $name; }}class Cat extends animal { public function meow () { echo $this->name . ‘: meow’; }}$cat = new Cat(‘useless’);
  41. 41. OO in PHP還有很多功能、元素我都沒有介紹。有些功能還滿重要的,比如說 :: 運算子、statickeyword、Overloading、Cloning等等但是因為再講下去會有點無聊,所以你回去之後自己看XD。ref: http://www.php.net/manual/en/language.oop5.php
  42. 42. 換頁 in PHP如果你想換頁,比如說登入失敗要回到上一頁,或者登入成功要進入主要頁面<?phpheader(location: index.php);exit;意思是請在HTTP Response header中加入location: index.php這行,然後結束程式瀏覽器看到這行HTTP header就會換頁
  43. 43. PHP Useful FuncsPHP有超多很好用的functions,這也是很多人愛他的原因。這邊列舉了一些我個人很常用的function群,請自己回去看。Strings: http://www.php.net/manual/en/book.strings.phpFilesystem: http://www.php.net/manual/en/book.filesystem.phpArrays: http://www.php.net/manual/en/book.array.phpVariable handling: http://www.php.net/manual/en/book.var.php
  44. 44. Homework• 複習今天教的內容,把一些概念搞懂 – I/O – Form – Session 、 Cookie – OO – Useful function
  45. 45. Homework – on course• 實作題 III:登入介面http://vm2.ensky.tw/~ensky/03/index.php現場做之 SPEC:• 登入• 帳號密碼寫死在code裡面• 如果已經登入了還跑到登入頁面,會直接進內頁• 如果還沒有登入卻想進內頁,會跑回登入畫面• 要顯示錯誤型態(無帳號、密碼錯)• 登入後內頁要顯示是誰登入的• 登出
  46. 46. Homework – on course• Useful function – session相關 function – isset
  47. 47. Homework – home回家做之 SPEC:• 註冊 – 使用CSV存使用者資料,不可使用資料庫• 列出註冊者的帳號&密碼在首頁• 現場做的所有SPEC都要維持住• Userful Functions – fopen – fgetcsv – fputcsv – fclose

×