lis651 lecture 3 functions & sessions thomas krichel 2008-11-08

25
LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

Upload: elizabeth-oliver

Post on 27-Mar-2015

219 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

LIS651 lecture 3functions & sessions

Thomas Krichel

2008-11-08

Page 2: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

functions

• The PHP function reference is available on its web site http://php.net/quickref.php. It shows the impressive array of functions within PHP.

• But one of the strengths of PHP is that you can create your own functions as you please.

• If you recreate one of the built-in functions, your own function will have no effect.

Page 3: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

simplest function

function beer_print {

print "beer\n";

}

beer_print() ; // prints: “beer” and newline

Page 4: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

A more practical example

• Stephanie Rubino was an English teacher and objects to sentences likeYou have ordered 1 bottles of Grosswald Pils.

• Let us define a function rubino_print(). It will take three arguments– a number to check for plural or singular– a word for the singular– a word for the plural

Page 5: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

a function and its arguments• declare the arguments to the function in

parenthesisfunction rubino_print ($number, $singular,$plural) {

if($number == 1) {

print "one $singular";

}

else {

print "$number $plural";

}

}

rubino_print(3,'woman','women'); // prints: “3 women”

Page 6: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

default arguments

• Sometimes you want to allow a function to be called without giving all its arguments. You can do this by declaring a default value, using an equal sign in the function listfunction thomas_need($thing='beer') {

print "Thomas needs $thing.\n";

}

thomas_need(); // prints: “Thomas needs beer.”

thomas_need('vodka'); // prints: “Thomas needs vodka”.

Page 7: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

rubino_print using common plurals function rubino_print ($num, $sing,$plur=1) { if($num == 1) {

print "one $sing";

}

elseif($plur ==1) {

print "$num $sing"."s";

}

else {

print "$num $plur";

}

}

rubino_print(6,'beer'); // prints: “6 beers”

Page 8: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

return value• Up until now we have just looked at the side

effect of a function. • "return" is a special command that returns a

value.• It takes the return value as a parameter

return $result;

• When return is used, the function is left. Example function good_beer () { return 'Festbock';}$beer=good_beer();print $beer ; // prints: “Festbock”.

Page 9: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

rubino_print with return

function rubino_print ($number, $singular,$plural) {

if($number == 1) {

return "one $singular";

}

return "$number $plural";

}

$order=rubino_print(2,"beer","beers");

print "you ordered $order\n";

// prints: you ordered 2 beers.

Page 10: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

visibility of variables• Variables used inside a function are not visible

from the outside. Example$beer="Karlsberg";

function yankeefy ($name='Sam Adams') {

$beer=$name;

}

yankeefy();

print $beer; // prints: Karlsberg

• The variable inside the function is something different than the variables outside.

Page 11: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

accessing global variables.

• There are two ways to change a global variable, i.e. one that is defined in the main script.

• One is just to call it as $GLOBAL['name'] where name is the name of the global variable.function yankeefy ($name="Sam Adams") {

$GLOBALS['beer']=$name;

}

• The other is to change it outside a function definition.

• Example in brewer_quiz.php

Page 12: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

working with many source files

• Many times it is useful to split a PHP script into several files.

• PHP has two mechanisms.• require(file) requires the file file to be included. If

the file is not there, PHP exits with an error.• include(file) includes the file. If the file is not there

no error is reported.

Page 13: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

require() and include()

• Both assume that you leave PHP. Thus within your included file you can write simple HTML.

• If you want to include PHP in your included file, you have to surround it by <?php and ?>, just like in a PHP script.

• Here is an example to use include to build the basic web page.

• Included files are customarily give the extension ‘.inc’.

Page 14: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

top.inc

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head><title>$title</title>

<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>

<link rel="stylesheet" type="text/css" href="main.css"/>

</head>

<body>

Page 15: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

bottom.inc

<p id="validator">

<a href="http://validator.w3.org/check?uri=referer"><img

style="border: 0pt"

src="http://wotan.liu.edu/valid-xhtml10.png"

alt="Valid XHTML 1.0!" height="31" width="88" /></a>

</p>

</body>

</html>

Page 16: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

trouble

• $title in the top.html is not understood as the title. It reads as $title, which means "idiot" for your web user.

• Even if you replace $title with <?php $title ?>

$title is empty. The definition from the outer file is not seen in the included file.

• So you have to split into three files, and print the title in the main file. I leave that to you to figure out.

Page 17: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

login.php & create_account.php

• Both require a database that has three fields– id which is an auto_increment int acting as a handle– username is the username of the account. it must be

unique and this is enforced by mySQL– password is a varchar(41) because the sha1 of the

password is stored. This is 40 chars long.

Page 18: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

sessions

• You will recall that HTTP is a stateless protocol. Each request/response is self-contained.

• Statefulness is crucial in Web applications. Otherwise users have to authenticate every time they access a new page.

• Traditionally, one way to create statefulness is to use cookies.

• PHP uses cookies to create a concept of its own, sessions, that makes it all very easy.

Page 19: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

cookies

• A cookie is a piece of attribute/value data. A server can send cookies as value of a HTTP header Set-Cookie:. Multiple headers may be sent.

• When the client visits the web site again, it will send the cookie back to the server with a HTTP header Cookie:

Page 20: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

Set-Cookie• Set-Cookie: name=value; [expires= date;]

[path=path;] [domain=domain] [secure]• where [ ] indicates optional components and

– name is the variable name set in the cookie– value is the variable's value– date is a date when the cookie expires– path restricts the cookie to be sent only when requests

to a path starting with path are made– domain restricts the sending of the cookie to a certain

domain– secure restricts transmission to https

Page 21: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

Cookies:

• The browser compares the request it wants to make with the URL and the domain that sent the cookie.

• If the path is not set the cookie will only be sent to a request with the originating URL.

• If the cookie matches the request a request header of the form

Cookie: name1=value1 ; name2=value2

is sent.

Page 22: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

sessions

• Sessions are a feature of PHP. PHP remembers a session through a special cookie PHPSESSID.

• To activate the sessions, include session_start(); at the beginning of your script, before any printing has been done.

• One a session is active, you have a special super-global variable $_SESSION. Session data is stored in special files on wotan.

Page 23: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

$_SESSION

• This is an array where you can read and set variables that you want to keep during the session.if($_SESSION['user_name’]) {

print "welcome " . $_SESSION['user_name’];

}

else {

// show users login form

print login_form();

}

Page 24: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

ending sessions

• At 9 and 39 past each hour, wotan deletes all session files that have not been changed for 24 minutes or more.

• If you want to remove a session yourself, you can call session_destroy() in your script.

• An example is in visit.php.

Page 25: LIS651 lecture 3 functions & sessions Thomas Krichel 2008-11-08

http://openlib.org/home/krichel

Thank you for your attention!

Please switch off machines b4 leaving!