SlideShare a Scribd company logo
3
Most read
4
Most read
8
Most read
Server-side programming & PHP
 server-side includes
 Netscape LiveWire
 Active Server Pages (ASP)
 Java Servlets
 PHP
− variables, control statements, file access
− form handling
− file uploading, email redirection
Internet & Web Programming
PHP
2
 PHP is similar to JavaScript, only server-side
PHP code is embedded in HTML using tags
when a page request arrives, the server recognizes PHP content via the file
extension (.php , .php3, or .phtml)
the server executes the PHP code, substitutes output into the HTML
the resulting page is then downloaded to the client
user never sees the PHP code, only the output in the page
developed in 1995 by Rasmus Lerdorf (member of the Apache Group)
 originally designed as a tool for tracking visitors at Lerdorf's Web site
 within 2 years, widely used in conjunction with the Apache server
 developed into full-featured, scripting language for server-side programming
 free, open-source
 server plug-ins exist for various servers
PHP execution
3
PHP code can be embedded within a <?php...?> tag
output is displayed using print
<!-- hello.php -->
<html>
<head>
<title>Server-side Hello</title>
</head>
<body>
<table border=1 align="center">
<tr><td>
<?php print("Hello and welcome to <i>my</i> page!"); ?>
</table>
</body>
</html>
<!-- hello.php -->
<html>
<head>
<title>Server-side Hello</title>
</head>
<body>
<table border=1 align="center">
<tr><td>
Hello and welcome to <i>my</i> page!
</table>
</body>
</html>
the server executes the
print statement, substitutes
output, downloads
resulting page
PHP variables
4
similar to JavaScript, PHP variables are not declared, dynamically typed
scalar data types: Boolean, integer, double, string
compound data types: array, object
special types: resource, NULL
all variable names begin with $
<html>
<head>
<title>Server-side Fortune</title>
<?php
$list = array("Live long and prosper",
"Save for tomorrow",
"You will meet someone");
$fortune = $list[rand(0, count($list)-1)];
?>
</head>
<body>
<table border=1 align="center">
<tr><td>
<?php print($fortune); ?>
</table>
</body>
</html>
variables are flexible
 any unassigned variable has
value NULL
 can test if NULL using IsSet
e.g., IsSet($name)
 can set mode so that
unbound access is reported,
or automatically coerced to
default values
PHP: handling form data
5
 <html> <!-- helloNice.php -->
 <head> <title>Server-side Greeting</title> </head>
 <body>
 <?php
 $yourName = $_POST['yourName'];
 print("Hello and welcome to my page <i>$yourName</i>.<br />n");
 print("If you like it, " .
 "<a href='mailto:davereed@creighton.edu'>email me</a>!n");
 ?>
 </body>
 </html>
can write server-side programs in PHP as an alternative to CGI
 no need for CGIinput class, can use either GET or POST
 form data is automatically accessible via variable with form element name
 similar to Perl, '.' is used for string concatenation
<html> <!-- helloNicePHP.html -->
<head> <title>PHP Form Handling</title> </head>
<body>
<form action="http://empirical.cs.creighton.edu/~davereed/helloNice.php"
method="post">
Enter your name: <input type="text" name="yourName"/>
<br /><br />
<input type="submit" value="click for greeting" />
</form>
</body>
</html>
PHP: email database example
6
<html>
<head> <title>PHP Email DB</title>
<?php
$emailDB = array("Jim Carlson", "carlsn@creighton.edu",
"Davendar Malik", "malik@creighton.edu",
"Prem Nair", "psnair@creighton.edu",
"Dave Reed", "davereed@creighton.edu",
"Mark Wierman", "wierman@creighton.edu");
?>
</head>
<body>
<?php
$person = $_POST['person'];
print("Search results for: " . $person . "<br /><br />n");
$found = false;
for ($i = 0; $i < count($emailDB); $i+=2) {
if ($person == "" ||
strpos("?".strtolower($emailDB[$i]), strtolower($person))) {
$entry1 = $emailDB[$i];
$entry2 = $emailDB[$i+1];
print("$entry1: <a href='mailto:$entry2'>$entry2</a><br />n");
$found = true;
}
}
if (!$found) {
print("No matching names were found. Please try again.<br />n");
}
?>
</body>
</html>
since PHP source is not
seen by user, can
embed protected data
safely
string functions
include:
• strlen
• strcmp
• strpos
• substr
• strtolower
• strtoupper
• trim
PHP: file example
7
<html>
<head>
<title>PHP Email DB</title>
<?php
$emailDB = file("email.txt");
?>
</head>
<body>
<?php
$person = $_POST['person'];
print("Search results for: " . $person . "<br /><br />n");
$found = false;
for ($i = 0; $i < count($emailDB); $i+=2) {
if ($person == "" ||
strpos("?".strtolower($emailDB[$i]), strtolower($person))) {
$entry1 = $emailDB[$i];
$entry2 = $emailDB[$i+1];
print("$entry1: <a href='mailto:$entry2'>$entry2</a><br />n");
$found = true;
}
}
if (!$found) {
print("No matching names were found. Please try again.<br />n");
}
?>
</body>
</html>
various routines exist
for reading/writing files
simplest is file, which
reads a file into an array
of strings (one per line)
Word ladder in PHP
8
 <html>
 <head>
 <title>Word Ladder Challenge</title>
 <?php
 $dictionary = file("words5.txt");
 $start = $dictionary[rand(0, count($dictionary)-1)];
 $end = $dictionary[rand(0, count($dictionary)-1)];
 ?>
 </head>
 <body>
 <div style="text-align:center">
 <h2>Dave's Word Ladder Challenge</h2>
 <p>Create a word ladder between <b> <?php print($start); ?> </b>
 and <b> <?php print($end); ?> </b>
 <form name="ladderForm"
 action="http://empirical.cs.creighton.edu/~davereed/ladderCheck.php"
 method="post">
 <textarea name="ladder" rows=10 cols=8 wrap="virtual"></textarea>
 <br /><br />
 <input type="hidden" name="start" value="<?php print($start); ?>">
 <input type="hidden" name="end" value="<?php print($end); ?>">
 <input type="submit" value="Submit Ladder">
 </form>
 </div>
 </body>
 </html>
ladder.php contains start
of game:
• PHP displays start &
end words
• static HTML gives form
with text area & submit
button
Word ladder in PHP
9
 <html>
 <head>
 <title>Word Ladder Challenge</title>
 <?php
 function binsearch($needle, $haystack)
 {
 $high = count($haystack)-1;
 $low = 0;
 while ($low <= $high){
 $middle = floor(($high + $low) / 2);
 if (trim($haystack[$middle]) == trim($needle)){
 return true;
 }
 else if (trim($haystack[$middle]) < trim($needle)){
 $low = $middle+1;
 }
 else{
 $high = $middle-1;
 }
 }
 return false;
 }
 function LetterDiff($word1, $word2)
 {
 $diffCount = 0;
 for ($z = 0; $z < strlen(word1); $z++) {
 if ($word1{$z} != $word2{$z}) {
 $diffCount++;
 }
 }
 return $diffCount;
 }
 ?>
 </head>
ladderCheck.php page
• defines functions for
checking a ladder
• static HTML gives form
with text area & submit
button
10
 <body>
 <div style="text-align:center">
 <h2>Dave's Word Ladder Challenge</h2>
 <?php
 $dictionary = file("words5.txt");
 $start = trim($_POST['start']);
 $end = trim($_POST['end']);
 $ladder = trim($_POST['ladder']);
 $ladderArr = preg_split("/[ns]+/", $ladder);
 if ($start != $ladderArr[0]) {
 print("INVALID LADDER: starting word should be $start<br />");
 }
 else if ($end != $ladderArr[count($ladderArr)-1]) {
 print("INVALID LADDER: ending word should be $end<br />");
 }
 else {
 $OK = true;
 for ($i = 1; $i < count($ladderArr) and $OK; $i++) {
 if (!binsearch($ladderArr[$i], $dictionary)) {
 print("INVALID LADDER: ".$ladderArr[$i]." is not a legal word.<br />");
 $OK = false;
 }
 else if (LetterDiff($ladderArr[$i], $ladderArr[$i-1]) != 1) {
 print("INVALID LADDER: ".$ladderArr[$i]." is not connected to" .
 $ladderArr[$i-1].".<br />");
 $OK = false;
 }
 }
 if ($OK) {
 print("$ladder is a valid ladder. Congratulations!<br />");
 }
 }
 ?>
 <form name="ladderForm"
 action="http://empirical.cs.creighton.edu/~davereed/ladder.php" method="post">
 <input type="submit" value="Play Again?">
 </form>
 </div></body></html>
rest of ladderCheck.php
• gets data from form
elements
• verifies the correctness
of the ladder
Standalone PHP
11
 <?php
 $emailDB = file("email.txt");
 $person = $_POST['person'];
 print("Search results for: " . $person . "<br /><br />n");
 $found = false;
 for ($i = 0; $i < count($emailDB); $i+=2) {
 if ($person == "" ||
 strpos("?".strtolower($emailDB[$i]), strtolower($person))) {
 $entry1 = $emailDB[$i];
 $entry2 = $emailDB[$i+1];
 print("$entry1: <a href='mailto:$entry2'>" .
 "$entry2</a><br />n");
 $found = true;
 }
 }
 if (!$found) {
 print("No matching names were found. Please try again.<br />n");
 }
 ?>
previous examples have shown how PHP code can be nested in HTML
 browsers don't really require HTML, HEAD, BODY tags
 if no static content in the page, can ignore HTML elements
 PHP output text will be treated as the body of a default Web page
Another example: file uploading
12
the HTML file input element allows the user to browse for a file
<input type="file" name="ELEMENT_NAME">
 once the user selects a file, can use a submit button to call a CGI or PHP
program to process that file
<html>
<head>
<title>Simple File Uploader</title>
</head>
<body>
<form name="uploader" action="http://empirical.cs.creighton.edu/~davereed/upload.php"
enctype="multipart/form-data" method="post">
Select file for uploading: <input type="file" name="userfile">
<br /><br />
<input type="submit" value="Upload File">
</form>
</body>
</html>
PHP file manipulations
13
 <?php
 $BASEDIR = "/var/www/davereed/files/";
 if (!file_exists($BASEDIR.$_FILES['userfile']['name'])) {
 move_uploaded_file($_FILES['userfile']['tmp_name'],
 $BASEDIR.$_FILES['userfile']['name']);
 print("File uploaded successfully");
 }
 else {
 print("File already exists - no upload performed.");
 }
 ?>
PHP provides extensive support for file/directory manipulation
$_FILES[$FORM_ELE_NAME]['name'] original name of the file uploaded via
the specified form input element
$_FILES[$FORM_ELE_NAME]['tmp_name'] temporary name of the file where it
is uploaded onto the server
move_uploaded_file($_FILES[$FORM_ELE_NAME]['tmp_name'], $FILE_PATH_NAME)
copies uploaded file to specified loc.
Robust file uploading
<html>
<head>
<title>Simple File Uploader</title>
</head>
<body>
<form name="uploader" action="http://empirical.cs.creighton.edu/~davereed/upload.php"
enctype="multipart/form-data" method="post">
<table>
<tr><td>Enter your user name:
<td><input type="text" name="userID" size=10 value="">
<tr><td>Select file for uploading:
<td><input type="file" name="userfile">
</table>
<input type="submit" value="Upload File">
</form>
</body>
</html>
14
could utilize other PHP features to make file uploading more robust
 allow multiple students to submit same assignment
 each student specifies a user name, file is uploaded into a subdirectory
Robust file uploading
15
 <?php
 $userID = $_POST['userID'];
 $BASEDIR = "/var/www/davereed/files/";
 $_FILES['userfile']['name'] = explode(' ', $_FILES['userfile']['name']);
 $_FILES['userfile']['name'] = implode('_', $_FILES['userfile']['name']);
 if (IsSet($userID)) {
 $BASEDIR = $BASEDIR.$userID."/";
 if (!file_exists($BASEDIR)) {
 mkdir($BASEDIR, 755);
 }
 }
 if (!file_exists($BASEDIR.$_FILES['userfile']['name'])) {
 move_uploaded_file($_FILES['userfile']['tmp_name'],
 $BASEDIR.$_FILES['userfile']['name']);
 print("File uploaded successfully");
 }
 else {
 print("File already exists - no upload performed.");
 }
 ?>
get the user ID from text box
replace ' ' with '_'
in file name
if user ID is entered,
extend path & create
directory if deosn't
already exist
Homework submission program
16
 Joel van Brandwijk has extended this program to create a generic homework
submission utility
 student interface is password driven
 connects with Active Directory to verify password for given user name
 student can select among current classes and assignments
 course/assignment info is stored in an SQL database, accessed via PHP
 student can specify multiple files, even structure into subdirectories for uploading
 instructor interface is also password driven
 checks database to make sure a legit instructor, then checks password
 instructor can add/remove class, add/remove students, add/remove assignments
 info is stored in SQL database, accessed via PHP
 instructor can download submissions to local computer for grading
empirical.cs.creighton.edu/submissions
Example: email redirection
17
most Web sites give visitor option of sending feedback
 can be accomplished using mailto: link
<a href=mailto:davereed@creighton.edu>Feedback?</a>
potential problem: not all client computers are email-enabled
 can instead use a PHP program as a front-end for email
 user enters address, subject, message
 PHP program receives & bundles these pieces into an email message, sends on
 if desired, can be used for anonymous email redirection (no return address supplied)
Example: email redirection
<?php function show_form($email="",$message="",$subject="") { ?>
<h2>Send Me an E-mail</h2>
<form action="http://empirical.cs.creighton.edu/~davereed/email.php"
 method="post">
Your E-mail address:<br>
<input type=text name=email size=30 value="<?php print($email); ?>"><br>
The Subject:<br>
<input type=text name=subject size=30 value="<?php print($subject); ?>"><br>
Your Message:<br>
<textarea rows=10 cols=50 name=message><?php print($message); ?></textarea><br>
<input type=submit value="Send E-mail">
</form>
<?php }
.
.
.
18
this part of the page
defines a function for
generating the input
page
Example: email redirection
(cont.)
19
 $email = $_POST['email'];
 $subject = $_POST['subject'];
 $message = $_POST['message'];
 if (!isset($email) or !isset($message)) {
 show_form();
 }
 else {
 if (empty($message)) {
 print("Please write something and resend.");
 show_form($email,$message,$subject);
 }
 else {
 if (empty($email)) {
 $email="anonymous";
 }
 if (empty($subject)) {
 $subject="stuff";
 }
 $sent = mail( "davereed@creighton.edu", $subject, $message, "From: $email" );
 if ($sent) {
 print("<H1>Your Message Has Been Sent.</H1>");
 }
 else {
 print("<p>The server was unable to send your mail.");
 }
 }
 }
 ?>
if no inputs to page (not called from
form), show input page
if message field is empty, warn user
and show the input page again
if email or subject fields are empty,
give default values
send the email message and
report status

More Related Content

PPTX
Operating System PPT
PPT
Php Lecture Notes
PPTX
Introduction to php
DOCX
Web Vulnerability Scanner project Report
PDF
Real Time Systems
PDF
INTRODUCTION TO UML DIAGRAMS
PPTX
Opportunities, Challenges, and Threats in Media and Information
PPTX
Zener Diode Full Presentation
Operating System PPT
Php Lecture Notes
Introduction to php
Web Vulnerability Scanner project Report
Real Time Systems
INTRODUCTION TO UML DIAGRAMS
Opportunities, Challenges, and Threats in Media and Information
Zener Diode Full Presentation

What's hot (20)

PPTX
Php.ppt
PDF
4.2 PHP Function
PPT
Chapter 02 php basic syntax
PPTX
Form Handling using PHP
PPTX
JSON: The Basics
PDF
JavaScript - Chapter 12 - Document Object Model
PPT
Php Presentation
PPT
Php forms
PPT
Php Ppt
PPTX
Php string function
PPTX
C# Delegates
PPTX
PPTX
Database Connectivity in PHP
PPTX
Operators php
PPT
PDF
Introduction to php
PPTX
Data types in php
PPT
Class 5 - PHP Strings
PPT
Asp.net.
Php.ppt
4.2 PHP Function
Chapter 02 php basic syntax
Form Handling using PHP
JSON: The Basics
JavaScript - Chapter 12 - Document Object Model
Php Presentation
Php forms
Php Ppt
Php string function
C# Delegates
Database Connectivity in PHP
Operators php
Introduction to php
Data types in php
Class 5 - PHP Strings
Asp.net.
Ad

Similar to PHP POWERPOINT SLIDES (20)

TXT
Ip lab
PPTX
Quick beginner to Lower-Advanced guide/tutorial in PHP
PDF
2014 database - course 2 - php
PDF
SULTHAN's - PHP MySQL programs
PPT
Framework
PDF
Php (1)
PDF
The History of PHPersistence
PDF
Web 8 | Introduction to PHP
PDF
Practical PHP by example Jan Leth-Kjaer
PPTX
Topological indices (t is) of the graphs to seek qsar models of proteins com...
TXT
My shell
PDF
Grok Drupal (7) Theming
PPT
PHP Tutorial (funtion)
PDF
PPT
Intro to php
PDF
R57shell
PDF
Web Scraping with PHP
PDF
Blog Hacks 2011
TXT
DOC
Ip lab
Quick beginner to Lower-Advanced guide/tutorial in PHP
2014 database - course 2 - php
SULTHAN's - PHP MySQL programs
Framework
Php (1)
The History of PHPersistence
Web 8 | Introduction to PHP
Practical PHP by example Jan Leth-Kjaer
Topological indices (t is) of the graphs to seek qsar models of proteins com...
My shell
Grok Drupal (7) Theming
PHP Tutorial (funtion)
Intro to php
R57shell
Web Scraping with PHP
Blog Hacks 2011
Ad

More from Ismail Mukiibi (15)

PDF
Relational database (Unit 2)
PDF
Relational data base management system (Unit 1)
PPT
Quality of service
PPT
IP/MAC Address Translation
PPT
Traffic Characterization
PDF
Html notes
PPT
Microprocessor application (Introduction)
PPTX
Advanced computer architecture lesson 1 and 2
PPT
Advanced computer architect lesson 3 and 4
PPT
Advanced computer architecture lesson 5 and 6
DOCX
Pc hardware course work
PPTX
Mac addresses(media access control)
DOCX
Kinds of networks
DOC
Why building collapse in kampala
DOCX
Compare peer
Relational database (Unit 2)
Relational data base management system (Unit 1)
Quality of service
IP/MAC Address Translation
Traffic Characterization
Html notes
Microprocessor application (Introduction)
Advanced computer architecture lesson 1 and 2
Advanced computer architect lesson 3 and 4
Advanced computer architecture lesson 5 and 6
Pc hardware course work
Mac addresses(media access control)
Kinds of networks
Why building collapse in kampala
Compare peer

Recently uploaded (20)

PDF
top salesforce developer skills in 2025.pdf
PDF
System and Network Administraation Chapter 3
PPT
Introduction Database Management System for Course Database
PDF
AI in Product Development-omnex systems
PPTX
Materi-Enum-and-Record-Data-Type (1).pptx
PDF
A REACT POMODORO TIMER WEB APPLICATION.pdf
PPTX
CHAPTER 12 - CYBER SECURITY AND FUTURE SKILLS (1) (1).pptx
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
L1 - Introduction to python Backend.pptx
PPTX
ManageIQ - Sprint 268 Review - Slide Deck
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PPTX
Materi_Pemrograman_Komputer-Looping.pptx
PDF
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Multi-factor Authentication (MFA) requirement for Microsoft 365 Admin Center_...
PPTX
Mastering-Cybersecurity-The-Crucial-Role-of-Antivirus-Support-Services.pptx
PDF
How Creative Agencies Leverage Project Management Software.pdf
PPTX
Presentation of Computer CLASS 2 .pptx
top salesforce developer skills in 2025.pdf
System and Network Administraation Chapter 3
Introduction Database Management System for Course Database
AI in Product Development-omnex systems
Materi-Enum-and-Record-Data-Type (1).pptx
A REACT POMODORO TIMER WEB APPLICATION.pdf
CHAPTER 12 - CYBER SECURITY AND FUTURE SKILLS (1) (1).pptx
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
L1 - Introduction to python Backend.pptx
ManageIQ - Sprint 268 Review - Slide Deck
VVF-Customer-Presentation2025-Ver1.9.pptx
Odoo POS Development Services by CandidRoot Solutions
Upgrade and Innovation Strategies for SAP ERP Customers
Materi_Pemrograman_Komputer-Looping.pptx
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
Softaken Excel to vCard Converter Software.pdf
Multi-factor Authentication (MFA) requirement for Microsoft 365 Admin Center_...
Mastering-Cybersecurity-The-Crucial-Role-of-Antivirus-Support-Services.pptx
How Creative Agencies Leverage Project Management Software.pdf
Presentation of Computer CLASS 2 .pptx

PHP POWERPOINT SLIDES

  • 1. Server-side programming & PHP  server-side includes  Netscape LiveWire  Active Server Pages (ASP)  Java Servlets  PHP − variables, control statements, file access − form handling − file uploading, email redirection Internet & Web Programming
  • 2. PHP 2  PHP is similar to JavaScript, only server-side PHP code is embedded in HTML using tags when a page request arrives, the server recognizes PHP content via the file extension (.php , .php3, or .phtml) the server executes the PHP code, substitutes output into the HTML the resulting page is then downloaded to the client user never sees the PHP code, only the output in the page developed in 1995 by Rasmus Lerdorf (member of the Apache Group)  originally designed as a tool for tracking visitors at Lerdorf's Web site  within 2 years, widely used in conjunction with the Apache server  developed into full-featured, scripting language for server-side programming  free, open-source  server plug-ins exist for various servers
  • 3. PHP execution 3 PHP code can be embedded within a <?php...?> tag output is displayed using print <!-- hello.php --> <html> <head> <title>Server-side Hello</title> </head> <body> <table border=1 align="center"> <tr><td> <?php print("Hello and welcome to <i>my</i> page!"); ?> </table> </body> </html> <!-- hello.php --> <html> <head> <title>Server-side Hello</title> </head> <body> <table border=1 align="center"> <tr><td> Hello and welcome to <i>my</i> page! </table> </body> </html> the server executes the print statement, substitutes output, downloads resulting page
  • 4. PHP variables 4 similar to JavaScript, PHP variables are not declared, dynamically typed scalar data types: Boolean, integer, double, string compound data types: array, object special types: resource, NULL all variable names begin with $ <html> <head> <title>Server-side Fortune</title> <?php $list = array("Live long and prosper", "Save for tomorrow", "You will meet someone"); $fortune = $list[rand(0, count($list)-1)]; ?> </head> <body> <table border=1 align="center"> <tr><td> <?php print($fortune); ?> </table> </body> </html> variables are flexible  any unassigned variable has value NULL  can test if NULL using IsSet e.g., IsSet($name)  can set mode so that unbound access is reported, or automatically coerced to default values
  • 5. PHP: handling form data 5  <html> <!-- helloNice.php -->  <head> <title>Server-side Greeting</title> </head>  <body>  <?php  $yourName = $_POST['yourName'];  print("Hello and welcome to my page <i>$yourName</i>.<br />n");  print("If you like it, " .  "<a href='mailto:[email protected]'>email me</a>!n");  ?>  </body>  </html> can write server-side programs in PHP as an alternative to CGI  no need for CGIinput class, can use either GET or POST  form data is automatically accessible via variable with form element name  similar to Perl, '.' is used for string concatenation <html> <!-- helloNicePHP.html --> <head> <title>PHP Form Handling</title> </head> <body> <form action="http://empirical.cs.creighton.edu/~davereed/helloNice.php" method="post"> Enter your name: <input type="text" name="yourName"/> <br /><br /> <input type="submit" value="click for greeting" /> </form> </body> </html>
  • 6. PHP: email database example 6 <html> <head> <title>PHP Email DB</title> <?php $emailDB = array("Jim Carlson", "[email protected]", "Davendar Malik", "[email protected]", "Prem Nair", "[email protected]", "Dave Reed", "[email protected]", "Mark Wierman", "[email protected]"); ?> </head> <body> <?php $person = $_POST['person']; print("Search results for: " . $person . "<br /><br />n"); $found = false; for ($i = 0; $i < count($emailDB); $i+=2) { if ($person == "" || strpos("?".strtolower($emailDB[$i]), strtolower($person))) { $entry1 = $emailDB[$i]; $entry2 = $emailDB[$i+1]; print("$entry1: <a href='mailto:$entry2'>$entry2</a><br />n"); $found = true; } } if (!$found) { print("No matching names were found. Please try again.<br />n"); } ?> </body> </html> since PHP source is not seen by user, can embed protected data safely string functions include: • strlen • strcmp • strpos • substr • strtolower • strtoupper • trim
  • 7. PHP: file example 7 <html> <head> <title>PHP Email DB</title> <?php $emailDB = file("email.txt"); ?> </head> <body> <?php $person = $_POST['person']; print("Search results for: " . $person . "<br /><br />n"); $found = false; for ($i = 0; $i < count($emailDB); $i+=2) { if ($person == "" || strpos("?".strtolower($emailDB[$i]), strtolower($person))) { $entry1 = $emailDB[$i]; $entry2 = $emailDB[$i+1]; print("$entry1: <a href='mailto:$entry2'>$entry2</a><br />n"); $found = true; } } if (!$found) { print("No matching names were found. Please try again.<br />n"); } ?> </body> </html> various routines exist for reading/writing files simplest is file, which reads a file into an array of strings (one per line)
  • 8. Word ladder in PHP 8  <html>  <head>  <title>Word Ladder Challenge</title>  <?php  $dictionary = file("words5.txt");  $start = $dictionary[rand(0, count($dictionary)-1)];  $end = $dictionary[rand(0, count($dictionary)-1)];  ?>  </head>  <body>  <div style="text-align:center">  <h2>Dave's Word Ladder Challenge</h2>  <p>Create a word ladder between <b> <?php print($start); ?> </b>  and <b> <?php print($end); ?> </b>  <form name="ladderForm"  action="http://empirical.cs.creighton.edu/~davereed/ladderCheck.php"  method="post">  <textarea name="ladder" rows=10 cols=8 wrap="virtual"></textarea>  <br /><br />  <input type="hidden" name="start" value="<?php print($start); ?>">  <input type="hidden" name="end" value="<?php print($end); ?>">  <input type="submit" value="Submit Ladder">  </form>  </div>  </body>  </html> ladder.php contains start of game: • PHP displays start & end words • static HTML gives form with text area & submit button
  • 9. Word ladder in PHP 9  <html>  <head>  <title>Word Ladder Challenge</title>  <?php  function binsearch($needle, $haystack)  {  $high = count($haystack)-1;  $low = 0;  while ($low <= $high){  $middle = floor(($high + $low) / 2);  if (trim($haystack[$middle]) == trim($needle)){  return true;  }  else if (trim($haystack[$middle]) < trim($needle)){  $low = $middle+1;  }  else{  $high = $middle-1;  }  }  return false;  }  function LetterDiff($word1, $word2)  {  $diffCount = 0;  for ($z = 0; $z < strlen(word1); $z++) {  if ($word1{$z} != $word2{$z}) {  $diffCount++;  }  }  return $diffCount;  }  ?>  </head> ladderCheck.php page • defines functions for checking a ladder • static HTML gives form with text area & submit button
  • 10. 10  <body>  <div style="text-align:center">  <h2>Dave's Word Ladder Challenge</h2>  <?php  $dictionary = file("words5.txt");  $start = trim($_POST['start']);  $end = trim($_POST['end']);  $ladder = trim($_POST['ladder']);  $ladderArr = preg_split("/[ns]+/", $ladder);  if ($start != $ladderArr[0]) {  print("INVALID LADDER: starting word should be $start<br />");  }  else if ($end != $ladderArr[count($ladderArr)-1]) {  print("INVALID LADDER: ending word should be $end<br />");  }  else {  $OK = true;  for ($i = 1; $i < count($ladderArr) and $OK; $i++) {  if (!binsearch($ladderArr[$i], $dictionary)) {  print("INVALID LADDER: ".$ladderArr[$i]." is not a legal word.<br />");  $OK = false;  }  else if (LetterDiff($ladderArr[$i], $ladderArr[$i-1]) != 1) {  print("INVALID LADDER: ".$ladderArr[$i]." is not connected to" .  $ladderArr[$i-1].".<br />");  $OK = false;  }  }  if ($OK) {  print("$ladder is a valid ladder. Congratulations!<br />");  }  }  ?>  <form name="ladderForm"  action="http://empirical.cs.creighton.edu/~davereed/ladder.php" method="post">  <input type="submit" value="Play Again?">  </form>  </div></body></html> rest of ladderCheck.php • gets data from form elements • verifies the correctness of the ladder
  • 11. Standalone PHP 11  <?php  $emailDB = file("email.txt");  $person = $_POST['person'];  print("Search results for: " . $person . "<br /><br />n");  $found = false;  for ($i = 0; $i < count($emailDB); $i+=2) {  if ($person == "" ||  strpos("?".strtolower($emailDB[$i]), strtolower($person))) {  $entry1 = $emailDB[$i];  $entry2 = $emailDB[$i+1];  print("$entry1: <a href='mailto:$entry2'>" .  "$entry2</a><br />n");  $found = true;  }  }  if (!$found) {  print("No matching names were found. Please try again.<br />n");  }  ?> previous examples have shown how PHP code can be nested in HTML  browsers don't really require HTML, HEAD, BODY tags  if no static content in the page, can ignore HTML elements  PHP output text will be treated as the body of a default Web page
  • 12. Another example: file uploading 12 the HTML file input element allows the user to browse for a file <input type="file" name="ELEMENT_NAME">  once the user selects a file, can use a submit button to call a CGI or PHP program to process that file <html> <head> <title>Simple File Uploader</title> </head> <body> <form name="uploader" action="http://empirical.cs.creighton.edu/~davereed/upload.php" enctype="multipart/form-data" method="post"> Select file for uploading: <input type="file" name="userfile"> <br /><br /> <input type="submit" value="Upload File"> </form> </body> </html>
  • 13. PHP file manipulations 13  <?php  $BASEDIR = "/var/www/davereed/files/";  if (!file_exists($BASEDIR.$_FILES['userfile']['name'])) {  move_uploaded_file($_FILES['userfile']['tmp_name'],  $BASEDIR.$_FILES['userfile']['name']);  print("File uploaded successfully");  }  else {  print("File already exists - no upload performed.");  }  ?> PHP provides extensive support for file/directory manipulation $_FILES[$FORM_ELE_NAME]['name'] original name of the file uploaded via the specified form input element $_FILES[$FORM_ELE_NAME]['tmp_name'] temporary name of the file where it is uploaded onto the server move_uploaded_file($_FILES[$FORM_ELE_NAME]['tmp_name'], $FILE_PATH_NAME) copies uploaded file to specified loc.
  • 14. Robust file uploading <html> <head> <title>Simple File Uploader</title> </head> <body> <form name="uploader" action="http://empirical.cs.creighton.edu/~davereed/upload.php" enctype="multipart/form-data" method="post"> <table> <tr><td>Enter your user name: <td><input type="text" name="userID" size=10 value=""> <tr><td>Select file for uploading: <td><input type="file" name="userfile"> </table> <input type="submit" value="Upload File"> </form> </body> </html> 14 could utilize other PHP features to make file uploading more robust  allow multiple students to submit same assignment  each student specifies a user name, file is uploaded into a subdirectory
  • 15. Robust file uploading 15  <?php  $userID = $_POST['userID'];  $BASEDIR = "/var/www/davereed/files/";  $_FILES['userfile']['name'] = explode(' ', $_FILES['userfile']['name']);  $_FILES['userfile']['name'] = implode('_', $_FILES['userfile']['name']);  if (IsSet($userID)) {  $BASEDIR = $BASEDIR.$userID."/";  if (!file_exists($BASEDIR)) {  mkdir($BASEDIR, 755);  }  }  if (!file_exists($BASEDIR.$_FILES['userfile']['name'])) {  move_uploaded_file($_FILES['userfile']['tmp_name'],  $BASEDIR.$_FILES['userfile']['name']);  print("File uploaded successfully");  }  else {  print("File already exists - no upload performed.");  }  ?> get the user ID from text box replace ' ' with '_' in file name if user ID is entered, extend path & create directory if deosn't already exist
  • 16. Homework submission program 16  Joel van Brandwijk has extended this program to create a generic homework submission utility  student interface is password driven  connects with Active Directory to verify password for given user name  student can select among current classes and assignments  course/assignment info is stored in an SQL database, accessed via PHP  student can specify multiple files, even structure into subdirectories for uploading  instructor interface is also password driven  checks database to make sure a legit instructor, then checks password  instructor can add/remove class, add/remove students, add/remove assignments  info is stored in SQL database, accessed via PHP  instructor can download submissions to local computer for grading empirical.cs.creighton.edu/submissions
  • 17. Example: email redirection 17 most Web sites give visitor option of sending feedback  can be accomplished using mailto: link <a href=mailto:[email protected]>Feedback?</a> potential problem: not all client computers are email-enabled  can instead use a PHP program as a front-end for email  user enters address, subject, message  PHP program receives & bundles these pieces into an email message, sends on  if desired, can be used for anonymous email redirection (no return address supplied)
  • 18. Example: email redirection <?php function show_form($email="",$message="",$subject="") { ?> <h2>Send Me an E-mail</h2> <form action="http://empirical.cs.creighton.edu/~davereed/email.php"  method="post"> Your E-mail address:<br> <input type=text name=email size=30 value="<?php print($email); ?>"><br> The Subject:<br> <input type=text name=subject size=30 value="<?php print($subject); ?>"><br> Your Message:<br> <textarea rows=10 cols=50 name=message><?php print($message); ?></textarea><br> <input type=submit value="Send E-mail"> </form> <?php } . . . 18 this part of the page defines a function for generating the input page
  • 19. Example: email redirection (cont.) 19  $email = $_POST['email'];  $subject = $_POST['subject'];  $message = $_POST['message'];  if (!isset($email) or !isset($message)) {  show_form();  }  else {  if (empty($message)) {  print("Please write something and resend.");  show_form($email,$message,$subject);  }  else {  if (empty($email)) {  $email="anonymous";  }  if (empty($subject)) {  $subject="stuff";  }  $sent = mail( "[email protected]", $subject, $message, "From: $email" );  if ($sent) {  print("<H1>Your Message Has Been Sent.</H1>");  }  else {  print("<p>The server was unable to send your mail.");  }  }  }  ?> if no inputs to page (not called from form), show input page if message field is empty, warn user and show the input page again if email or subject fields are empty, give default values send the email message and report status