0
PHP
Ensky / 林宏昱
Browser sends HTTP request
GET /enskylin HTTP/1.1
Host: www.facebook.com
HTTP/1.1 200 OK
HTML
Load data from database
GET /enskylin HTTP/1.1
Host: www.facebook.com
HTTP/1.1 200 OK
HTML
generate HTML
GET /enskylin HTTP/1.1
Host: www.facebook.com
HTTP/1.1 200 OK
HTML
HTTP response to browser
GET /enskylin HTTP/1.1
Host: www.facebook.com
HTTP/1.1 200 OK
HTML
CGI and Web server
Web server
CGI
HTTP Request
stdin + env
stdout
HTTP
Response
+ BODY
HTTP
request
body
HTTP
request
head...
What's PHP
• Rasmus Lerdorf, Danmark wrote the first version in
1995, use PHP to maintain his homepage
• Originally stood ...
What can PHP do
• Although PHP is an "hypertext preprocessor"
you still can use it to do nearly anything you can do
in oth...
Hello world
the same as
#include<iostream>
using namespace std;
int main () {
cout << "Hello world!";
return 0;
}
in C++
<...
PHP at a glance
Variables
$helloWorld = "hello world";
echo $helloWorld;
echo $nonExistVar;
PHP Notice: Undefined variable: nonExistVar
• ...
Types
• Basic
– Boolean -> TRUE / True / true / FALSE / False / false
– Integer -> -(2^n) ~ 2^n - 1, n = 32 or 64
overflow...
Type verification
var_dump($variable)
// can print out the type
of $variable
var_dump(2147483647);
// int(2147483647)
var_...
Strings
$string1 = "this is a stringn!";
// this is a string
// !
$string2 = 'this is a string, toon!';
// this is a strin...
Variables in String
$score = 95;
echo "Ensky's score is: " . $score;
echo "Ensky's score is: {$score}";
// Ensky's score i...
Strings (cont'd)
There is no "char type"
$string = "this is a string!";
var_dump($string);
// string(17) "this is a string...
Implicitly type conversion
In PHP, type conversions are implicitly.
BEWARE OF IT!!
var_dump("123" + 456);
// int(579)
var_...
Explicitly type conversion
$score = 60;
var_dump( (float) $score);
// float(60)
var_dump( (string) $score);
// string(2) "...
== and ===
$a == $b
TRUE if $a is equal to $b after type juggling.
var_dump( 123 == "123" );
// bool(true)
var_dump( "0" =...
== and ===
var_dump( "0" == null );
// bool(false)
var_dump( "0" == false );
// bool(true)
var_dump( null == false );
// b...
== and ===
We can use === to avoid unexpected equality
var_dump( "0" === null );
// bool(false)
var_dump( "0" === false );...
== and ===
• $a == $b Equal
TRUE if $a is equal to $b after type juggling.
• $a === $b Identical
TRUE if $a is equal to $b...
Variable scopes in C
in C++, { } introduces a variable scope
for example
{
int a = 0;
}
cout << a << endl;
// reports erro...
Variable scopes in PHP
in PHP, only Function introduces a new scope
{
$a = 1;
}
echo $a;
// 1
Variable scopes in PHP
in PHP, only Function introduces a new scope
function setA () {
$a = 1; // local variable
}
functio...
Variable scopes in PHP
Use global keyword to access the global
variable
AVOID!!
function printA () {
global $a;
echo $a;
}...
functions in PHP
PHP's function acts like C/C++
function fib ($n) {
return $n <= 2 ?
1 : fib($n-1) + fib($n-2);
}
echo fib...
functions in PHP
Default function arguments
function printScore($score = 0) {
echo "your score is: {$score}";
}
printScore...
Arrays
• PHP's array is very powerful, hence very inefficient
• You can use it like
– Array in C / ArrayList in Java / Lis...
Arrays
You can use like a simple C-style array
$scores = array(30, 35, 45, 25);
print_r($scores);
/* Array
(
[0] => 30
[1]...
Arrays
Totally the same as
$scores = array(0 => 30, 1 => 35, 2 => 45, 3 => 25);
print_r($scores);
/* Array
(
[0] => 30
[1]...
Arrays
or a HashMap
$menu = array(
'beef noodles' => 260,
'noodles' => 60,
'beef' => 200
);
echo "price of beef is: $" . $...
Arrays
or act as an queue
$queue = array();
$queue[] = '1';
$queue[] = '2';
$queue[] = '3';
echo array_shift($queue);
// 1...
Arrays
or act as an stack
$queue = array();
$queue[] = '1';
$queue[] = '2';
$queue[] = '3';
echo array_pop($queue);
// 3
p...
Arrays
hold a structured document
$persion = array(
'name' => 'ensky',
'age' => 23,
'works' => array(
'NCTU computer scien...
Control Structures
• Nearly the same as C++
• if, else if, else
• switch, case, default
• do … while
• while
• for
• break...
Control Structures
Foreach:
$array = array(1, 2, 3);
foreach ($array as $value) {
echo $value . " ";
}
// 1 2 3
Control Structures
Foreach:
$array = array('a' => 'apple', 'b' => 'banana');
foreach ($array as $key => $value) {
echo "{$...
PHP and HTML
Let's start with Hello world
PHP & HTML - Hello world
Let's start with Hello world
== index.php ==
<!doctype html>
<html lang="en">
<head>
<meta charse...
Recall PHP Hello world
the same as
#include<iostream>
using namespace std;
int main () {
cout << "Hello world!";
return 0;...
PHP & HTML – print variable
<?php $name = 'ensky'; ?>
…
<body>
<p>Hello world! <?php echo $name; ?></p>
<p>Hello world! <?...
PHP & HTML – print data
<?php
$dict = array('a' => 'apple', 'b' => 'banana');
?>
…
<?php foreach ($dict as $key => $val): ...
HTML Forms
HTML forms
How to create a form in HTML?
1. create a form tag
<form action="login.php" method="POST">
</form>
where to sen...
HTML forms
How to create a form in HTML?
2. put some input
<form action="login.php" method="POST">
<input type="text" name...
HTML forms
How to create a form in HTML?
2. put some inputs
<form action="login.php" method="POST">
<input type="text" nam...
POST /login.php HTTP/1.1
Host: your_hostname
<form action="login.php" method="POST">
<input type="text" name="email">
<inp...
email=enskylin@gmail.com&
password=nctu5566
/login.php
In login.php
-----
<?php
echo $_POST['email'];
echo $_POST['passwor...
HTTP & states
HTTP is a stateless protocol
When you open a browser,
navigate to a url
HTTP Request
HTTP response
and it is done.
How do we preserve the
"state"?
login or not?
who are you?
what did you buy?
Cookie!
• HTTP protocol defined a spec called "cookie"
• which can help server to identify clients
HOW?
client request
HTTP Request
server response
with set-cookie header
HTTP response
Set-Cookie: name=ensky
HTML …
Server asked me
to save the cookie!
The next client request
will bring the cookie set by server
HTTP Request
cookie: name=ensky
Server is able to identify
which client it is.
HTTP Request
cookie: name=ensky
Oh! you're
ensky
Cookie's problem
• However, Cookie identification is too weak!
• Anyone who can make a fake identification
HTTP Request
co...
Session
• One approach is session
• Server gives client a "temporally key"
HTTP Request
After the request, server will
generate the temporarily key
session name
0aj9 ensky
s4df dy93
HTTP Request
generate a temp...
Response with session(temp key)
HTTP Request
HTTP response
Set-Cookie: session=0aj9
HTML …
session name
0aj9 ensky
s4df dy...
Server can then identify
successfully by correct key
HTTP Request
cookie: session=0aj9
Oh! you're
ensky
session name
0aj9 ...
Use session
Set
------
<?php
session_start();
$_SESSION['name'] = 'ensky';
Use session
Get
------
<?php
session_start();
echo $_SESSION['name'];
Use session
Destroy
------
<?php
session_start();
$_SESSION = array();
session_destroy();
Use session
• Note:
session_start(); must be call before any HTML output
– why?
Practice
• write a webpage
– login (using predefined username / password)
• output login error when input wrong username o...
Appendix
Run PHP script
• Since PHP is a server-side CGI, you cannot just open
PHP script in your browser
• After written PHP scrip...
functions in PHP
Defines as anonymous function
$fib = function ($n) { … }
echo $fib(9);
inner function
function a () {
$n ...
functions in PHP
Reference arguments
function addN (& $n) {
$n++;
}
$n = 0;
addN($n);
echo $n;
// 1
Redirect
• how to redirect to another webpage?
<?php
header('location: another_webpage.php');
exit;
note: you must call he...
PHP Module
In PHP, you can import other file into a file
lib.php
-----
<?php
function fib($a) { return … }
page.php
<?php
...
2014 database - course 2 - php
Upcoming SlideShare
Loading in...5
×

2014 database - course 2 - php

2,314

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
2,314
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
36
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "2014 database - course 2 - php"

  1. 1. PHP Ensky / 林宏昱
  2. 2. Browser sends HTTP request GET /enskylin HTTP/1.1 Host: www.facebook.com HTTP/1.1 200 OK HTML
  3. 3. Load data from database GET /enskylin HTTP/1.1 Host: www.facebook.com HTTP/1.1 200 OK HTML
  4. 4. generate HTML GET /enskylin HTTP/1.1 Host: www.facebook.com HTTP/1.1 200 OK HTML
  5. 5. HTTP response to browser GET /enskylin HTTP/1.1 Host: www.facebook.com HTTP/1.1 200 OK HTML
  6. 6. CGI and Web server Web server CGI HTTP Request stdin + env stdout HTTP Response + BODY HTTP request body HTTP request header HTTP response head + body
  7. 7. What's PHP • Rasmus Lerdorf, Danmark wrote the first version in 1995, use PHP to maintain his homepage • Originally stood for "Personal Home Page Tools" • It stands for PHP: Hypertext Preprocessor now
  8. 8. What can PHP do • Although PHP is an "hypertext preprocessor" you still can use it to do nearly anything you can do in other language, not just writing a web page C++, JAVA, Python, … • You can use PHP to write a web server, BBS crawler, NP homework, even a win32 program
  9. 9. Hello world the same as #include<iostream> using namespace std; int main () { cout << "Hello world!"; return 0; } in C++ <?php echo "Hello world!"; ?> OR Hello world!
  10. 10. PHP at a glance
  11. 11. Variables $helloWorld = "hello world"; echo $helloWorld; echo $nonExistVar; PHP Notice: Undefined variable: nonExistVar • Variables starts with a $ (dollar) sign • No reserved word. ($if, $else is okay) • The other rules is the same as C/C++
  12. 12. Types • Basic – Boolean -> TRUE / True / true / FALSE / False / false – Integer -> -(2^n) ~ 2^n - 1, n = 32 or 64 overflow: integer to float conversion – Float -> IEEE 64bit format – String • Complex – Array – Object
  13. 13. Type verification var_dump($variable) // can print out the type of $variable var_dump(2147483647); // int(2147483647) var_dump(2147483648); // float(2147483648) var_dump( array(1,2,3) ); array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
  14. 14. Strings $string1 = "this is a stringn!"; // this is a string // ! $string2 = 'this is a string, toon!'; // this is a string, toon! $string3 = $string1 . " and " . $string2; // this is a string // ! and this is a string, toon!
  15. 15. Variables in String $score = 95; echo "Ensky's score is: " . $score; echo "Ensky's score is: {$score}"; // Ensky's score is: 95 echo 'Ensky's score is: {$score}"; // Ensky's score is: {$score} // not work with expression echo "Hi {1+1}"; // Hi {1+1}
  16. 16. Strings (cont'd) There is no "char type" $string = "this is a string!"; var_dump($string); // string(17) "this is a string!" var_dump($string[0]); // string(1) "t" $string[0] = 'T'; echo $string; // This is a string!
  17. 17. Implicitly type conversion In PHP, type conversions are implicitly. BEWARE OF IT!! var_dump("123" + 456); // int(579) var_dump(456 + "1 apple a day keeps…"); // int(457) var_dump(456 + "1,000"); // int(457)
  18. 18. Explicitly type conversion $score = 60; var_dump( (float) $score); // float(60) var_dump( (string) $score); // string(2) "60" var_dump( (bool) $score); // bool(true)
  19. 19. == and === $a == $b TRUE if $a is equal to $b after type juggling. var_dump( 123 == "123" ); // bool(true) var_dump( "0" == "0.00" ); // bool(true) var_dump( "0" == 0 ); // bool(true)
  20. 20. == and === var_dump( "0" == null ); // bool(false) var_dump( "0" == false ); // bool(true) var_dump( null == false ); // bool(true) !!!!!! var_dump( "0" == false && false == "" ); // bool(true) var_dump( "0" == "" ); // bool(false) !!!!!!
  21. 21. == and === We can use === to avoid unexpected equality var_dump( "0" === null ); // bool(false) var_dump( "0" === false ); // bool(false) var_dump( false === "" ); // bool(false) var_dump( "0" === false && false === "" ); // bool(false) var_dump( "0" === "" ); // bool(false)
  22. 22. == and === • $a == $b Equal TRUE if $a is equal to $b after type juggling. • $a === $b Identical TRUE if $a is equal to $b, and they are of the same type. • Note: var_dump( 123 === "123" ); // bool(false) http://tw2.php.net/ternary
  23. 23. Variable scopes in C in C++, { } introduces a variable scope for example { int a = 0; } cout << a << endl; // reports error, a is in the inside scope
  24. 24. Variable scopes in PHP in PHP, only Function introduces a new scope { $a = 1; } echo $a; // 1
  25. 25. Variable scopes in PHP in PHP, only Function introduces a new scope function setA () { $a = 1; // local variable } function printA () { echo $a; // no, undefined $a } setA(); printA(); // PHP Notice: Undefined variable: a
  26. 26. Variable scopes in PHP Use global keyword to access the global variable AVOID!! function printA () { global $a; echo $a; } $a = 1; printA(); // 1
  27. 27. functions in PHP PHP's function acts like C/C++ function fib ($n) { return $n <= 2 ? 1 : fib($n-1) + fib($n-2); } echo fib(9); // 34
  28. 28. functions in PHP Default function arguments function printScore($score = 0) { echo "your score is: {$score}"; } printScore(); // your score is 0 printScore(100); // your score is 100
  29. 29. Arrays • PHP's array is very powerful, hence very inefficient • You can use it like – Array in C / ArrayList in Java / List in Python – Map in C / HashMap in Java / Dictionary in Python • With PHP's powerful built-in array functions, array can easily becomes many data structure like Dequeue, Queue, Stack • You can put anything in array, even another array, or an object;
  30. 30. Arrays You can use like a simple C-style array $scores = array(30, 35, 45, 25); print_r($scores); /* Array ( [0] => 30 [1] => 35 [2] => 45 [3] => 25 ) */ key value
  31. 31. Arrays Totally the same as $scores = array(0 => 30, 1 => 35, 2 => 45, 3 => 25); print_r($scores); /* Array ( [0] => 30 [1] => 35 [2] => 45 [3] => 25 ) */ key value
  32. 32. Arrays or a HashMap $menu = array( 'beef noodles' => 260, 'noodles' => 60, 'beef' => 200 ); echo "price of beef is: $" . $menu['beef']; // price of beef is: $200 key value
  33. 33. Arrays or act as an queue $queue = array(); $queue[] = '1'; $queue[] = '2'; $queue[] = '3'; echo array_shift($queue); // 1 print_r($queue); /* Array ( [0] => 2 [1] => 3 ) */ auto key value
  34. 34. Arrays or act as an stack $queue = array(); $queue[] = '1'; $queue[] = '2'; $queue[] = '3'; echo array_pop($queue); // 3 print_r($queue); /* Array ( [0] => 1 [1] => 2 ) */ auto key value
  35. 35. Arrays hold a structured document $persion = array( 'name' => 'ensky', 'age' => 23, 'works' => array( 'NCTU computer science TA', '2014 Database TA' ) ); key value value no key, auto assign one
  36. 36. Control Structures • Nearly the same as C++ • if, else if, else • switch, case, default • do … while • while • for • break, continue • return
  37. 37. Control Structures Foreach: $array = array(1, 2, 3); foreach ($array as $value) { echo $value . " "; } // 1 2 3
  38. 38. Control Structures Foreach: $array = array('a' => 'apple', 'b' => 'banana'); foreach ($array as $key => $value) { echo "{$key}:{$value} "; } // a:apple b:banana
  39. 39. PHP and HTML Let's start with Hello world
  40. 40. PHP & HTML - Hello world Let's start with Hello world == index.php == <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Hello world! Title</title> </head> <body> <p>Hello world!</p> </body> </html>
  41. 41. Recall PHP Hello world the same as #include<iostream> using namespace std; int main () { cout << "Hello world!"; return 0; } in C++ <?php echo "Hello world!"; ?> OR Hello world!
  42. 42. PHP & HTML – print variable <?php $name = 'ensky'; ?> … <body> <p>Hello world! <?php echo $name; ?></p> <p>Hello world! <?= $name ?></p> </body> …
  43. 43. PHP & HTML – print data <?php $dict = array('a' => 'apple', 'b' => 'banana'); ?> … <?php foreach ($dict as $key => $val): ?> <p><?= $key ?> : <?= $val ?></p> <?php endforeach; ?>
  44. 44. HTML Forms
  45. 45. HTML forms How to create a form in HTML? 1. create a form tag <form action="login.php" method="POST"> </form> where to send GET or POST?
  46. 46. HTML forms How to create a form in HTML? 2. put some input <form action="login.php" method="POST"> <input type="text" name="email"> <input type="password" name="password"> </form> http://www.w3schools.com/tags/att_input_type.asp
  47. 47. HTML forms How to create a form in HTML? 2. put some inputs <form action="login.php" method="POST"> <input type="text" name="email"> <input type="password" name="password"> <button type="submit">免費註冊</button> </form>
  48. 48. POST /login.php HTTP/1.1 Host: your_hostname <form action="login.php" method="POST"> <input type="text" name="email"> <input type="password" name="password"> <button type="submit">免費註冊</button> </form> email=enskylin@gmail.com& password=nctu5566 /login.php
  49. 49. email=enskylin@gmail.com& password=nctu5566 /login.php In login.php ----- <?php echo $_POST['email']; echo $_POST['password']; ?> POST /login.php HTTP/1.1 Host: your_hostname
  50. 50. HTTP & states
  51. 51. HTTP is a stateless protocol
  52. 52. When you open a browser, navigate to a url
  53. 53. HTTP Request
  54. 54. HTTP response
  55. 55. and it is done.
  56. 56. How do we preserve the "state"? login or not? who are you? what did you buy?
  57. 57. Cookie! • HTTP protocol defined a spec called "cookie" • which can help server to identify clients HOW?
  58. 58. client request HTTP Request
  59. 59. server response with set-cookie header HTTP response Set-Cookie: name=ensky HTML … Server asked me to save the cookie!
  60. 60. The next client request will bring the cookie set by server HTTP Request cookie: name=ensky
  61. 61. Server is able to identify which client it is. HTTP Request cookie: name=ensky Oh! you're ensky
  62. 62. Cookie's problem • However, Cookie identification is too weak! • Anyone who can make a fake identification HTTP Request cookie: name=ensky Oh! you're ensky I'm Cracker
  63. 63. Session • One approach is session • Server gives client a "temporally key" HTTP Request
  64. 64. After the request, server will generate the temporarily key session name 0aj9 ensky s4df dy93 HTTP Request generate a temp key, expire in a short time
  65. 65. Response with session(temp key) HTTP Request HTTP response Set-Cookie: session=0aj9 HTML … session name 0aj9 ensky s4df dy93
  66. 66. Server can then identify successfully by correct key HTTP Request cookie: session=0aj9 Oh! you're ensky session name 0aj9 ensky s4df dy93
  67. 67. Use session Set ------ <?php session_start(); $_SESSION['name'] = 'ensky';
  68. 68. Use session Get ------ <?php session_start(); echo $_SESSION['name'];
  69. 69. Use session Destroy ------ <?php session_start(); $_SESSION = array(); session_destroy();
  70. 70. Use session • Note: session_start(); must be call before any HTML output – why?
  71. 71. Practice • write a webpage – login (using predefined username / password) • output login error when input wrong username or password – echo out current DateTime(ex: 2014/3/4 9:55:54) using PHP date() function • see PHP doc • shows only when user is logged-in successfully – logout • after logout, user cannot use any function without login • Just practice, no need to hand in
  72. 72. Appendix
  73. 73. Run PHP script • Since PHP is a server-side CGI, you cannot just open PHP script in your browser • After written PHP script by IDEs I suggested last week, you should put it in CS web server, and reach it by http://people.cs.nctu.edu.tw/~your_id/file_name.php or your own webserver and reach it by http://localhost/file_name.php
  74. 74. functions in PHP Defines as anonymous function $fib = function ($n) { … } echo $fib(9); inner function function a () { $n = 0; $b = function () use ($n) { // you can use $n here }; } since PHP 5.3
  75. 75. functions in PHP Reference arguments function addN (& $n) { $n++; } $n = 0; addN($n); echo $n; // 1
  76. 76. Redirect • how to redirect to another webpage? <?php header('location: another_webpage.php'); exit; note: you must call header before any HTML output, just like session_start();
  77. 77. PHP Module In PHP, you can import other file into a file lib.php ----- <?php function fib($a) { return … } page.php <?php require_once "lib.php"; echo fib(3); http://www.php.net/manual/es/function.in clude.php
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×