38
M.P. Johnson, DBMS, Stern/NYU, Sprin g 2006 1 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

  • View
    235

  • Download
    1

Embed Size (px)

Citation preview

Page 1: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

1

C20.0046: Database Management SystemsLecture #16

M.P. Johnson

Stern School of Business, NYU

Spring, 2008

Page 2: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

2

Homework Project part 2 due Wed in class/by midnight

Project part 3 posted soon… Topic: populating your tables with data

Later: Project part 5 Front-end

Page 3: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

3

Agenda: Programming for SQL Have now been exposed to:

Embedded SQL: Pro*C Java JDBC

All used; good to know about

Most important for this course: DB-conn from web scripting languages PHP

Page 4: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

4

Goals: by next week Today: be able to post a hello-web PHP

script in your i5 account

Next week: Be able to write simple dynamic webpages in In PHP that

1. Take input from user

2. Execute SQL query

3. Display formatted results Based on examples from class…

Page 5: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

5

New topic: web apps Goal: web front-end to database

Present dynamic content, on demand Not canned (static) pages/not canned queries (perhaps) modify DB on demand

Naïve soln: static webpage & HTTP index.html written, stored, put on server, displayed

when it’s url is requested HTTP is stateless (so?) This doesn’t solve our problem

Page 6: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

6

Dynamic webpages Soln 1: upon url request

1. somehow decide to dynamically generate an html page (from scratch)

2. send back new html page to user

No html file exists on server, just created on demand

CGI/Perl, Java servlets, etc.

Page 7: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

7

New topic: CGI First, and still very popular method CGI: Common Gateway Interface

Not a programming language! Just an interface (connection) between the

webserver and an outside program “Webserver” = webserver software, e.g., Apache

Very simple basic idea:1. user chooses an url

22 webserver runs that url’s program,

3. sends back the program’s output

Page 8: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

8

On-the-fly content with CGI

ProgramClient

Server

HTTP Request

Data for program

Generated HTML

HTML

Image from http://www.scit.wlv.ac.uk/~jphb/cp3024/

Page 9: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

9

Using CGI CGI works with any prog./scripting lang.

Really?

Well, if things are set up right…

Page 10: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

10

CGI works… if the webserver machine can run program

pages/soho, not sales and if the user the webserver is running as

(e.g. nobody) can can run your program and if the necessary jars/libraries are

available and if nobody has permission to use them and if the necessary DB software is installed

Plausible choices: Perl, Python, C, sh

Page 11: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

11

CGI admin Most webservers: CGI program/script must

either1. End in .cgi and/or

2. Reside in cgi-bin If an actual program, the cgi file is just the

name of the executable:

In a script, first (“shebang”) line says which interpreter to use:

gcc -o myprog.cgi myproc.gccgcc -o myprog.cgi myproc.gcc

#!/usr/local/bin/perl#!/usr/local/bin/perl

Page 12: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

12

CGI input CGI programs must respond to input, two

ways GET: string is part of the URL, following a ?:

POST: string can be read by program from an environmental variable Vars not visible to the browser user Not automatically put in server log, etc.

http://google.comhttp://google.com

Page 13: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

13

CGI summary One big advantage of CGI: not a language Existing command-line programs can be

called from the web Web user can enter info Program output sent back as webpage

Don’t want to start a new process for every user/pageview/roundtrip of your site?

Page 14: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

14

PHP-like scripting

ProgramClient

Server

HTTP Request

Data for program

Generated HTML

HTML

Image from http://www.scit.wlv.ac.uk/~jphb/cp3024/

Page 15: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

15

Dynamic webpages Original prob: need webpages to respond to

user inputs Soln 2:

create a an html file embedded with special non-html code

upon url request, execute embedded code to generate more html/fill in the file

Send back the modified html page to user An incomplete html page exists on server Examples: PHP, JSPs, ASPs, etc.

Page 16: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

16

Review: dynamic webpages First option: for each request: run program,

produce whole page, send back CGI & some host language, Java Servlets, etc.

Second option: create html page with missing parts; for each response, fill in the wholes and send back Embedded scripting PHP and others PHP = Personal Home Page or

= PHP Hypertext Processor – recursion

Page 17: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

17

Getting started Must set permissions in account on i5

Unix commands: ls, cd, pwn, cp, mv

chmod command Owner/group/all Read/write/execute

Bitstrings…

Page 18: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

18

hello.php http://pages.stern.nyu.edu/~mjohnson/dbms/php/hello.php

Q: What the difference between <br> and \n?

<html><head><title>Hello from PHP</title></head><body>Here comes the PHP part:<BR><BR><?php print "Hello, World!<br>\n"; ?><br>That's it!</body></html>

<html><head><title>Hello from PHP</title></head><body>Here comes the PHP part:<BR><BR><?php print "Hello, World!<br>\n"; ?><br>That's it!</body></html>

Page 19: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

19

Script errors Script errors, w/ and w/o display_errors on:

http://pages.stern.nyu.edu/~mjohnson/dbms/perl/hello.php

Local dir must contain .htaccess:

Automatically load GET/POST params as vars http://pages.stern.nyu.edu/~mjohnson/dbms/php/.htaccess cp /home1/m/mpj3/public_html/php/.htaccess .

php_flag display_errors on php_flag register_globals on

php_flag display_errors on php_flag register_globals on

Page 20: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

20

PHP vars Names always start with $

http://pages.stern.nyu.edu/~mjohnson/dbms/php/math.php

<? $num1 = 58; $num2 = 67; print "First number " . $num1 . "<br>"; print "Second number " . $num2 . "<br>"; $total = $num1 + $num2; print "The sum is " . $total . "<br>";?>

<? $num1 = 58; $num2 = 67; print "First number " . $num1 . "<br>"; print "Second number " . $num2 . "<br>"; $total = $num1 + $num2; print "The sum is " . $total . "<br>";?>

Page 21: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

21

Combining PHP and HTML http://pages.stern.nyu.edu/~mjohnson/dbms/php/combine.php

<?php for($z=0;$z<=5;$z++) {?> Iteration number <? = $z ?><br><? }?>

<?php for($z=0;$z<=5;$z++) {?> Iteration number <? = $z ?><br><? }?>

Page 22: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

22

More PHP syntax Somewhat C-like, somewhat Perl-like Case-sensitive Strings:

Concatenation op: . Single, double quotes similar to Perl

Comments: # Unix shell-style /* */ C-style // C++-style

Output: echo(“hi there”); print(“hi there”); C’s printf

Page 23: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

23

PHP info PHP does not have both string and number

ops like Perl Number ops treat (number) strings as

numbers, regular strings as strings http://pages.stern.nyu.edu/~mjohnson/dbms/php/test.php

Info function displays lots of server info: http://pages.stern.nyu.edu/~mjohnson/dbms/php/info.php

<? phpinfo(); ?><? phpinfo(); ?>

Page 24: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

24

New topic: HTML forms Interactive parts of HTML: forms

Intuition for name: paper form Fill in textboxes, check boxes or not, etc. Turn it in (press button)

HTML form contains arb. # of INPUTs Submits to somewhere (ACTION) By GET or POST

Page 25: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

25

Form example

On clicking Send, we go to the same page, but with “name=99&sumbit=OK”

http://pages.stern.nyu.edu/~mjohnson/dbms/php/input.php

<form method="get" action="">Enter a number:<input type="Text“ name="number"><br><input type="Submit" name="submit" value="OK"></form>

<form method="get" action="">Enter a number:<input type="Text“ name="number"><br><input type="Submit" name="submit" value="OK"></form>

Page 26: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

26

PHP and forms Obtain param a param, just prefix with $ (for now..)

Goal: display text and button; On submit, tell user what was entered

http://pages.stern.nyu.edu/~mjohnson/dbms/php/input.php http://pages.stern.nyu.edu/~mjohnson/dbms/php/inputphp.txt

Improve: also print, say, triple the input…

if (isset($val))print "You entered $val!<br><br>";

if (isset($val))print "You entered $val!<br><br>";

Page 27: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

27

PHP error-handling Many PHP scripts have lines of the form

some-statement OR die(“something happened”);

What this means: die exits with error message PHP uses OR as and AND for bool operators PHP supports boolean “short-circuiting”

Boolean eval stops as fast as possible Ftns often return 0/null/false for errors

if some-statement fails then we die

Page 28: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

28

New topic: PHP and databases PHP 5 has a JDBC-style DB interface But we’re using PHP 4.3.4…

Special-purpose methods/libraries for MySQL, etc.

Use these to obtain a connection, prepare and execute queries, etc.

Page 29: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

29

PHP & MySQL1. Open a connection and open our DB:

2. Run query:

$db = mysql_connect("mysql2.stern.nyu.edu:3306", user, pass);

mysql_select_db("test", $db);

$db = mysql_connect("mysql2.stern.nyu.edu:3306", user, pass);

mysql_select_db("test", $db);

$result = mysql_query($query,$db);$result = mysql_query($query,$db);

Page 30: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

30

PHP & MySQL3. Extract next row of data from the results:

What this means: myrow is an array that can then be accessed

Other options, see code

In general, to scroll through results, do:

$myrow = mysql_fetch_row($result)$myrow = mysql_fetch_row($result)

while ($myrow = mysql_fetch_row($result))# print row’s data

while ($myrow = mysql_fetch_row($result))# print row’s data

Page 31: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

31

Limit: PHP webpages that do something Semi-interesting PHP scripts:

http://pages.stern.nyu.edu/~mjohnson/dbms/php/lookupphp.txt http://pages.stern.nyu.edu/~mjohnson/dbms/php/lookup.php

Non-trivial but not huge: ~40 lines Works with two-column (a,b) table

Takes input from user Returns rows whose a field contains value If no/empty input, returns all rows

Bad idea in general!

Page 32: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

32

lookup.php Two possible situations for running script:

1. Page opened for the first time2. User entered parameter and pressed button

Structure of file:1. Print input box and button for next search

On button click, parameter is sent to this page’s url

2. (Try to) read input parameter3. Open MySQL connection4. Run query5. Print results in a table6. Disconnect from MySQL

Page 33: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

33

Higher-level structure As one page:

If we have params, display data based on them Otherwise, prompt user for params, call self

Could be: Page 1: prompt for params, call page 2 Page 2: display data based on params

In e.g.: always display data for convenience

Page 34: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

34

Insert/delete PHP example Similar to search example

NB: form has two buttons

http://pages.stern.nyu.edu/~mjohnson/dbms/php/update.php http://pages.stern.nyu.edu/~mjohnson/dbms/php/updatephp.txt

Page 35: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

35

Master-detail Perl/PHP example Idea: display list of regions;

When region clicked on, display its countries

Mechanism: pass GET param in link, not with a FORM

http://pages.stern.nyu.edu/~mjohnson/dbms/php/cia.php http://pages.stern.nyu.edu/~mjohnson/dbms/php/ciaphp.txt

Page 36: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

36

That’s all, folks! Q: Is this enough to get a job coding PHP? A: Probably not!

But:a couple modified copies of lookup.php and/or cia.php

+some HTML glue

fairly interesting site

a couple modified copies of lookup.php and/or cia.php

+some HTML glue

fairly interesting site

Page 37: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

37

For next time (in lab)…1. Run/read these PHP scripts:

http://pages.stern.nyu.edu/~mjohnson/dbms/php/lookup.php http://pages.stern.nyu.edu/~mjohnson/dbms/php/lookupphp.txt

http://pages.stern.nyu.edu/~mjohnson/dbms/php/update.php http://pages.stern.nyu.edu/~mjohnson/dbms/php/updatephp.txt

http://pages.stern.nyu.edu/~mjohnson/dbms/php/cia.php http://pages.stern.nyu.edu/~mjohnson/dbms/php/ciaphp.txt

2. Go through at least one tutorial on PHP (on web/below)3. Try posting a hello-web PHP script in your sales account

Various others in dbms/php…

Page 38: M.P. Johnson, DBMS, Stern/NYU, Spring 20061 C20.0046: Database Management Systems Lecture #16 M.P. Johnson Stern School of Business, NYU Spring, 2008

M.P. Johnson, DBMS, Stern/NYU, Spring 2006

38

Tutorials on PHP Some material drawn from the following good tutorials: http://php.net

PHP introduction and examples: http://www.scit.wlv.ac.uk/~jphb/sst/php/

Interactive PHP with database access: http://www.scit.wlv.ac.uk/~jphb/sst/php/gazdb.html

Longer PHP/MySQL Tutorial from webmonkey: http://hotwired.lycos.com/webmonkey/99/21/index2a.html

Nice insert/update/delete example from webmonkey: http://hotwired.lycos.com/webmonkey/99/21/index3a.html

MySQL/Perl/PHP page from U-Wash: http://www.washington.edu/computing/web/publishing/mysql-script.html