+ All Categories
Home > Documents > LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

Date post: 27-Mar-2015
Category:
Upload: jackson-ayers
View: 221 times
Download: 0 times
Share this document with a friend
Popular Tags:
28
LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15
Transcript
Page 1: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

LIS651 lecture 3

taming PHP

Thomas Krichel

2007-04-15

Page 2: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 taming PHP Thomas Krichel 2007-04-15.

simplest function

function beer_print {

print "beer\n";

}

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

Page 4: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 taming PHP Thomas Krichel 2007-04-15.

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 taming PHP Thomas Krichel 2007-04-15.

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 taming PHP Thomas Krichel 2007-04-15.

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 taming PHP Thomas Krichel 2007-04-15.

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 taming PHP Thomas Krichel 2007-04-15.

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 taming PHP Thomas Krichel 2007-04-15.

utility function for database queriesfunction mysql_fetch_all($query) {

$r=@mysql_query($query);

if($err=mysql_error()) {

return $err;

}

if( mysql_num_rows($r) ) {

while($row=mysql_fetch_array($r)) {

$result[]=$row;

}

return $result;

}

}

Page 11: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

usage example

my $query="SELECT * FROM my_table";

if(is_array($rows=mysql_fetch_all($query)) {

// do something

}

else { if (! is_null($rows)) {

die("Query failed!");}

}

Page 12: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 13: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 14: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 to be included. If the file

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

Page 15: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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.

Page 16: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

top.html

<!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 17: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

bottom.html

<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 18: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

validated.php

<?php

$title="my basic page\n";

include("top.html");

print "<div>hello, world</div>";

include("bottom.html");

?>

Page 19: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 20: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 21: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 22: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 23: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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

[path=path;] [domain= domain] [secure]• where

– 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 24: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 25: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 26: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

$_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 27: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

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 28: LIS651 lecture 3 taming PHP Thomas Krichel 2007-04-15.

http://openlib.org/home/krichel

Thank you for your attention!

Please switch off machines b4 leaving!


Recommended