• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
2014 database - course 2 - php
 

2014 database - course 2 - php

on

  • 1,757 views

 

Statistics

Views

Total Views
1,757
Views on SlideShare
1,757
Embed Views
0

Actions

Likes
0
Downloads
32
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    2014 database - course 2 - php 2014 database - course 2 - php Presentation Transcript

    • 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 header HTTP response head + body
    • 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
    • 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
    • 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!
    • PHP at a glance
    • 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++
    • 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
    • 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) }
    • 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!
    • 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}
    • 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!
    • 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)
    • Explicitly type conversion $score = 60; var_dump( (float) $score); // float(60) var_dump( (string) $score); // string(2) "60" var_dump( (bool) $score); // bool(true)
    • == 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)
    • == 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) !!!!!!
    • == 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)
    • == 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
    • 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
    • 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 } function printA () { echo $a; // no, undefined $a } setA(); printA(); // PHP Notice: Undefined variable: a
    • Variable scopes in PHP Use global keyword to access the global variable AVOID!! function printA () { global $a; echo $a; } $a = 1; printA(); // 1
    • 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
    • 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
    • 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;
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Control Structures • Nearly the same as C++ • if, else if, else • switch, case, default • do … while • while • for • break, continue • return
    • 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 "{$key}:{$value} "; } // a:apple b:banana
    • 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 charset="utf-8"> <title>Hello world! Title</title> </head> <body> <p>Hello world!</p> </body> </html>
    • 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!
    • PHP & HTML – print variable <?php $name = 'ensky'; ?> … <body> <p>Hello world! <?php echo $name; ?></p> <p>Hello world! <?= $name ?></p> </body> …
    • PHP & HTML – print data <?php $dict = array('a' => 'apple', 'b' => 'banana'); ?> … <?php foreach ($dict as $key => $val): ?> <p><?= $key ?> : <?= $val ?></p> <?php endforeach; ?>
    • 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 send GET or POST?
    • 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
    • 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>
    • 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
    • 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
    • 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 cookie: name=ensky Oh! you're ensky I'm Cracker
    • 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 key, expire in a short time
    • Response with session(temp key) HTTP Request HTTP response Set-Cookie: session=0aj9 HTML … session name 0aj9 ensky s4df dy93
    • Server can then identify successfully by correct key HTTP Request cookie: session=0aj9 Oh! you're ensky session name 0aj9 ensky s4df dy93
    • 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 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
    • Appendix
    • 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
    • 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
    • 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 header before any HTML output, just like session_start();
    • 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