Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
206 views

Web Design Using PHP Language PDF

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
206 views

Web Design Using PHP Language PDF

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 144

WEB PROGRAMMING

T. Ahmed Abbas

1
PHP
What You Should Already Know?
Before you continue you should have a basic understanding of the following:

 HTML
 CSS
 JavaScript

What is PHP?
 PHP is an acronym for "PHP: Hypertext Preprocessor"
 PHP is a widely-used, open source scripting language
 PHP scripts are executed on the server
 PHP is free to download and use

PHP is an amazing and popular language!

It is powerful enough to be at the core of the biggest blogging system on the


web (WordPress)!
It is deep enough to run the largest social network (Facebook)!
It is also easy enough to be a beginner's first server side language!

What is a PHP File?


 PHP files can contain text, HTML, CSS, JavaScript, and PHP code
 PHP code are executed on the server, and the result is returned to the
browser as plain HTML
 PHP files have extension ".php"

2
What Can PHP Do?
 PHP can generate dynamic page content
 PHP can create, open, read, write, delete, and close files on the server
 PHP can collect form data
 PHP can send and receive cookies
 PHP can add, delete, modify data in your database
 PHP can be used to control user-access
 PHP can encrypt data

With PHP you are not limited to output HTML. You can output images, PDF files,
and even Flash movies. You can also output any text, such as XHTML and XML.

Why PHP?
 PHP runs on various platforms (Windows, Linux, Unix, Mac OS X, etc.)
 PHP is compatible with almost all servers used today (Apache, IIS, etc.)
 PHP supports a wide range of databases
 PHP is free. Download it from the official PHP resource: www.php.net
 PHP is easy to learn and runs efficiently on the server side

PHP Support
If your server has activated support for PHP you do not need to do anything.

Just create some .php files, place them in your web directory, and the server
will automatically parse them for you.

You do not need to compile anything or install any extra tools.

Because PHP is free, most web hosts offer PHP support.

Set Up PHP on Your Own PC


However, if your server does not support PHP, you must:

 install a web server


 install PHP
 install a database, such as MySQL

OR

 Install WAMP server or XAMPP server

3
A PHP script is executed on the server, and the plain HTML result is sent
back to the browser.

Basic PHP Syntax


A PHP script can be placed anywhere in the document.

A PHP script starts with <?php and ends with ?>:

<?php
// PHP code goes here
?>

The default file extension for PHP files is ".php".

A PHP file normally contains HTML tags, and some PHP scripting code.

Below, we have an example of a simple PHP file, with a PHP script that uses a
built-in PHP function "echo" to output the text "Hello World!" on a web page:

Example
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>

Outputs

My first PHP page


Hello World!

Variables are "containers" for storing information.

Creating (Declaring) PHP Variables


In PHP, a variable starts with the $ sign, followed by the name of the variable:

4
Example
<?php
$txt = "Hello world!";
$x = 5;
$y = 10.5;
?>

Outputs

Hello world!
5
10.5

After the execution of the statements above, the variable $txt will hold the
value Hello world!, the variable $x will hold the value 5, and the
variable $y will hold the value 10.5.

Note: When you assign a text value to a variable, put quotes around the value.

Note: Unlike other programming languages, PHP has no command for declaring
a variable. It is created the moment you first assign a value to it.

Think of variables as containers for storing data.

PHP Variables
A variable can have a short name (like x and y) or a more descriptive name
(age, carname, total_volume).

Rules for PHP variables:

 A variable starts with the $ sign, followed by the name of the variable
 A variable name must start with a letter or the underscore character
 A variable name cannot start with a number
 A variable name can only contain alpha-numeric characters and
underscores (A-z, 0-9, and _ )
 Variable names are case-sensitive ($age and $AGE are two different
variables)

Remember that PHP variable names are case-sensitive!

Output Variables
The PHP echo statement is often used to output data to the screen.

5
The following example will show how to output text and a variable:

Example
<?php
$txt = "My University ";
echo "I love $txt!";
?>
Outputs

I love My University!

The following example will produce the same output as the example above:

Example
<?php
$txt = " My University ";
echo "I love " . $txt . "!";
?>

Outputs

I love My University!

The following example will output the sum of two variables:

Example
<?php
$x = 5; $y = 4;
echo $x + $y;
?>

Outputs 9

PHP is a Loosely Typed Language


In the example above, notice that we did not have to tell PHP which data type
the variable is.

6
PHP automatically converts the variable to the correct data type, depending on
its value.

In other languages such as C, C++, and Java, the programmer must declare
the name and type of the variable before using it.

PHP Variables Scope


In PHP, variables can be declared anywhere in the script.

The scope of a variable is the part of the script where the variable can be
referenced/used.

PHP has three different variable scopes:

 local
 global
 static

Global and Local Scope


A variable declared outside a function has a GLOBAL SCOPE and can only be
accessed outside a function:

Example
<?php
$x = 5; // global scope

function myTest() {
// using x inside this function will generate an error
echo "<p>Variable x inside function is: $x</p>";
}
myTest();

echo "<p>Variable x outside function is: $x</p>";


?>
Outputs

Variable x inside function is:

Variable x outside function is: 5

A variable declared within a function has a LOCAL SCOPE and can only be
accessed within that function:

7
Example
<?php
function myTest() {
$x = 5; // local scope
echo "<p>Variable x inside function is: $x</p>"; }
myTest();
// using x outside the function will generate an error
echo "<p>Variable x outside function is: $x</p>";
?>

Outputs

Variable x inside function is: 5

Variable x outside function is:

You can have local variables with the same name in different functions, because
local variables are only recognized by the function in which they are declared.

PHP The global Keyword


The global keyword is used to access a global variable from within a function.

To do this, use the global keyword before the variables (inside the function):

Example
<?php
$x = 5;
$y = 10;
function myTest() {
global $x, $y;
$y = $x + $y; }
myTest();
echo $y; // outputs 15
?>

PHP also stores all global variables in an array called $GLOBALS[index].


The index holds the name of the variable. This array is also accessible from
within functions and can be used to update global variables directly.

The example above can be rewritten like this:

Example

8
<?php
$x = 5;
$y = 10;
function myTest() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // outputs 15
?>

PHP The static Keyword


Normally, when a function is completed/executed, all of its variables are
deleted. However, sometimes we want a local variable NOT to be deleted. We
need it for a further job.

To do this, use the static keyword when you first declare the variable:

Example
<?php
function myTest() {
static $x = 0;
echo $x;
$x++;
}

myTest();
myTest();
myTest();
?>

Outputs

0
1
2

Then, each time the function is called, that variable will still have the
information it contained from the last time the function was called.

Note: The variable is still local to the function.

In PHP there are two basic ways to get output: echo and print.

9
In this tutorial we use echo (and print) in almost every example. So, this
chapter contains a little more info about those two output statements.

PHP echo and print Statements


echo and print are more or less the same. They are both used to output data
to the screen.

The differences are small: echo has no return value while print has a return
value of 1 so it can be used in expressions. echo can take multiple parameters
(although such usage is rare) while print can take one argument. echo is
marginally faster than print.

The PHP echo Statement


The echo statement can be used with or without parentheses: echo or echo().

Display Text

The following example shows how to output text with the echo command
(notice that the text can contain HTML markup):

Example
<?php
echo "<h2>PHP is Fun!</h2>";
echo "Hello world!<br>";
echo "I'm about to learn PHP!<br>";
echo "This ", "string ", "was ", "made ", "with multiple parameters.";
?>

Outputs

PHP is Fun!
Hello world!
I'm about to learn PHP!
This string was made with multiple parameters.

Display Variables

11
The following example shows how to output text and variables with
the echo statement:

Example
<?php
$txt1 = "Learn PHP";
$txt2 = "W3Schools.com";
$x = 5;
$y = 4;
echo "<h2>" . $txt1 . "</h2>";
echo "Study PHP at " . $txt2 . "<br>";
echo $x + $y;
?>

Outputs

Learn PHP
Study PHP at W3Schools.com
9

The PHP print Statement


The print statement can be used with or without
parentheses: print or print().

Display Text

The following example shows how to output text with the print command
(notice that the text can contain HTML markup):

Example
<?php
print "<h2>PHP is Fun!</h2>";
print "Hello world!<br>";
print "I'm about to learn PHP!";
?>

Outputs

PHP is Fun!

11
Hello world!
I'm about to learn PHP!

Display Variables

The following example shows how to output text and variables with
the print statement:

Example
<?php
$txt1 = "Learn PHP";
$txt2 = "W3Schools.com";
$x = 5;
$y = 4;

print "<h2>" . $txt1 . "</h2>";


print "Study PHP at " . $txt2 . "<br>";
print $x + $y;
?>

Outputs

Learn PHP
Study PHP at W3Schools.com
9

PHP Data Types


Variables can store data of different types, and different data types can do
different things.

PHP supports the following data types:

 String
 Integer
 Float (floating point numbers - also called double)
 Boolean
 Array
 Object
 NULL

12
 Resource

PHP String
A string is a sequence of characters, like "Hello world!".

A string can be any text inside quotes. You can use single or double quotes:

Example
<?php
$x = "Hello world!";
$y = 'Hello world!';

echo $x;
echo "<br>";
echo $y;
?>
Outputs

Hello world!
Hello world!

PHP Integer
An integer data type is a non-decimal number between -2,147,483,648 and
2,147,483,647.

Rules for integers:

 An integer must have at least one digit


 An integer must not have a decimal point
 An integer can be either positive or negative
 Integers can be specified in three formats: decimal (10-based),
hexadecimal (16-based - prefixed with 0x) or octal (8-based - prefixed
with 0)

In the following example $x is an integer. The PHP var_dump() function returns


the data type and value:

13
Example
<?php
$x = 5985;
var_dump($x);
?>
Outputs

int(5985)

PHP Float
A float (floating point number) is a number with a decimal point or a number in
exponential form.

In the following example $x is a float. The PHP var_dump() function returns the
data type and value:

Example
<?php
$x = 10.365;
var_dump($x);
?>

Outputs

float(10.365)

PHP Boolean
A Boolean represents two possible states: TRUE or FALSE.

$x = true;
$y = false;

Booleans are often used in conditional testing. You will learn more about
conditional testing in a later chapter of this tutorial.

PHP Array
An array stores multiple values in one single variable.

14
In the following example $cars is an array. The PHP var_dump() function
returns the data type and value:

Example
<?php
$cars = array("Volvo","BMW","Toyota");
var_dump($cars);
?>

Outputs

array(3) { [0]=> string(5) "Volvo" [1]=> string(3) "BMW" [2]=> string(6) "Toyota" }

You will learn a lot more about arrays in later chapters of this tutorial.

PHP Object
An object is a data type which stores data and information on how to process
that data.

In PHP, an object must be explicitly declared.

First we must declare a class of object. For this, we use the class keyword. A
class is a structure that can contain properties and methods:

Example
<?php
class Car {
function Car() {
$this->model = "VW";
}
}

// create an object
$herbie = new Car();

// show object properties


echo $herbie->model;
?>

Outputs

VW
15
PHP NULL Value
Null is a special data type which can have only one value: NULL.

A variable of data type NULL is a variable that has no value assigned to it.

Tip: If a variable is created without a value, it is automatically assigned a value


of NULL.

Variables can also be emptied by setting the value to NULL:

Example
<?php
$x = "Hello world!";
$x = null;
var_dump($x);
?>

Outputs

NULL

PHP Resource
The special resource type is not an actual data type. It is the storing of a
reference to functions and resources external to PHP.

A common example of using the resource data type is a database call.

We will not talk about the resource type here, since it is an advanced topic.

A string is a sequence of characters, like "Hello world!".

PHP String Functions


In this chapter we will look at some commonly used functions to manipulate
strings.

Get The Length of a String


The PHP strlen() function returns the length of a string.

16
The example below returns the length of the string "Hello world!":

Example
<?php
echo strlen("Hello world!"); // outputs 12
?>

The output of the code above will be: 12.

Count The Number of Words in a String


The PHP str_word_count() function counts the number of words in a string:

Example
<?php
echo str_word_count("Hello world!"); // outputs 2
?>

Reverse a String
The PHP strrev() function reverses a string:

Example
<?php
echo strrev("Hello world!"); // outputs !dlrow olleH
?>

Search For a Specific Text Within a String


The PHP strpos() function searches for a specific text within a string.

If a match is found, the function returns the character position of the first
match. If no match is found, it will return FALSE.

The example below searches for the text "world" in the string "Hello world!":

Example
<?php
echo strpos("Hello world!", "world"); // outputs 6
?>

17
The output of the code above will be: 6.

Tip: The first character position in a string is 0 (not 1).

Replace Text Within a String


The PHP str_replace() function replaces some characters with some other
characters in a string.

The example below replaces the text "world" with "Dolly":

Example
<?php
echo str_replace("world", "Dolly", "Hello world!"); // outputs Hello Dolly!
?>

The output of the code above will be: Hello Dolly!

PHP Constants
A constant is an identifier (name) for a simple value. The value cannot be
changed during the script.

A valid constant name starts with a letter or underscore (no $ sign before the
constant name).

Note: Unlike variables, constants are automatically global across the entire
script.

Create a PHP Constant


To create a constant, use the define() function.

Syntax
define(name, value, case-insensitive)

18
Parameters:

 name: Specifies the name of the constant


 value: Specifies the value of the constant
 case-insensitive: Specifies whether the constant name should be case-
insensitive. Default is false

The example below creates a constant with a case-sensitive name:

Example
<?php
define("GREETING", "Welcome to W3Schools.com!");
echo GREETING;
?>

The example below creates a constant with a case-insensitive name:

Example
<?php
define("GREETING", "Welcome to W3Schools.com!", true);
echo greeting;
?>

Constants are Global


Constants are automatically global and can be used across the entire script.

The example below uses a constant inside a function, even if it is defined


outside the function:

Example
<?php
define("GREETING", "Welcome to W3Schools.com!");

function myTest() {
echo GREETING;
}

myTest();
?>

PHP Operators

19
Operators are used to perform operations on variables and values.

PHP divides the operators in the following groups:

 Arithmetic operators
 Assignment operators
 Comparison operators
 Increment/Decrement operators
 Logical operators
 String operators
 Array operators

PHP Arithmetic Operators


The PHP arithmetic operators are used with numeric values to perform common
arithmetical operations, such as addition, subtraction, multiplication etc.

If $x=10,$y=6;

Operator Name Example Result Result

+ Addition $x + $y Sum of $x 16
and $y

- Subtraction $x - $y Difference 4
of $x and
$y

* Multiplication $x * $y Product of 60
$x and $y

/ Division $x / $y Quotient of 1.6666666666667


$x and $y

21
% Modulus $x % $y Remainder 4
of $x
divided by
$y

PHP Assignment Operators


The PHP assignment operators are used with numeric values to write a value to
a variable.

The basic assignment operator in PHP is "=". It means that the left operand
gets set to the value of the assignment expression on the right.

Assignment Same as... Description Example

x=y x=y The left operand gets set <?php


to the value of the $x = 10;
expression on the right echo $x;
?>

//output 10

x += y x=x+y Addition <?php


$x = 20;
$x += 100;

echo $x;
?>

//output 120

x -= y x=x–y Subtraction <?php


$x = 50;
$x -= 30;

echo $x;
?>

//output 20

21
x *= y x=x*y Multiplication <?php
$x = 10;
$y = 6;

echo $x * $y;
?>

//output 60

x /= y x=x/y Division <?php


$x = 10;
$x /= 5;

echo $x;
?>

//output 2

x %= y x=x%y Modulus <?php


$x = 15;
$x %= 4;

echo $x;
?>

//output 3

PHP Comparison Operators

Oper Name Example Result Example


ator

== Equal $x == $y Returns true if $x is <?php


equal to $y $x = 100;
$y = "100";

var_dump($x == $y); //
returns true because

22
values are equal
?>

//output bool(true)

=== Identical $x === Returns true if $x is <?php


$y equal to $y, and they $x = 100;
are of the same type $y = "100";

var_dump($x === $y); //


returns false because
types are not equal
?>

!= Not equal $x != $y Returns true if $x is <?php


not equal to $y $x = 100;
$y = "100";

var_dump($x != $y); //
returns false because
values are equal
?>

<> Not equal $x <> $y Returns true if $x is <?php


not equal to $y $x = 100;
$y = "100";

var_dump($x <> $y); //


returns false because
values are equal
?>

!== Not identical $x !== $y Returns true if $x is <?php


not equal to $y, or $x = 100;
they are not of the $y = "100";
same type
var_dump($x !== $y); //
returns true because
types are not equal
?>

> Greater than $x > $y Returns true if $x is <?php


greater than $y $x = 100;
$y = 50;

23
var_dump($x > $y); //
returns true because $x
is greater than $y
?>

< Less than $x < $y Returns true if $x is <?php


less than $y $x = 10;
$y = 50;

var_dump($x < $y); //


returns true because $x
is less than $y
?>

>= Greater than $x >= $y Returns true if $x is <?php


or equal to greater than or equal $x = 50;
to $y $y = 50;

var_dump($x >= $y); //


returns true because $x
is greater than or equal
to $y
?>

<= Less than or $x <= $y Returns true if $x is <?php


equal to less than or equal to $x = 50;
$y $y = 50;

var_dump($x <= $y); //


returns true because $x
is less than or equal to
$y
?>

The PHP comparison operators are used to compare two values (number or
string):

Operator Name Description Show it

++$x Pre-increment Increments $x by <?php


$x = 10;

24
one, then returns $x echo ++$x;
?>

//output 11

$x++ Post-increment Returns $x, then <?php


increments $x by one $x = 10;
echo $x++;
?>

//output 10

--$x Pre-decrement Decrements $x by <?php


one, then returns $x $x = 10;
echo --$x;
?>

//output 9

$x-- Post-decrement Returns $x, then <?php


decrements $x by $x = 10;
one echo $x--;
?>

//output 10

PHP Increment / Decrement Operators


The PHP increment operators are used to increment a variable's value.

The PHP decrement operators are used to decrement a variable's value.

PHP Logical Operators


The PHP logical operators are used to combine conditional statements.

Operator Name Example Result Show it

And And $x and $y True if both $x and <?php


$y are true $x = 100;
$y = 50;

25
if ($x == 100 and $y == 50){
echo "Hello world!"; }
?>

//Hello world!

Or Or $x or $y True if either $x or <?php


$y is true $x = 100;
$y = 50;
if ($x == 100 or $y == 80) {
echo "Hello world!";
}
?>

//Hello world!

Xor Xor $x xor $y True if either $x or <?php


$y is true, but not $x = 100;
both $y = 50;

if ($x == 100 xor $y == 80)


{
echo "Hello world!";
}
?>

//Hello world!

<?php
$x = 100;
&& And $x && $y True if both $x and $y = 50;
$y are true
if ($x == 100 && $y == 50) {
echo "Hello world!";
}
?>

//Hello world!

|| Or $x || $y True if either $x or <?php


$y is true $x = 100;
$y = 50;

if ($x == 100 || $y == 80) {


echo "Hello world!";
}

26
?>

//Hello world!

! Not !$x True if $x is not true <?php


$x = 100;

if ($x !== 90) {


echo "Hello world!";
}
?>

//Hello world!

PHP String Operators


PHP has two operators that are specially designed for strings.

Operator Name Example Result Show it

. Concatenation $txt1 . $txt2 Concatenation <?php


of $txt1 and $txt1 = "Hello";
$txt2 $txt2 = " world!";
echo $txt1 . $txt2;
?>

//Hello world!

.= Concatenation $txt1 .= $txt2 Appends $txt2 <?php


assignment to $txt1 $txt1 = "Hello";
$txt2 = " world!";
$txt1 .= $txt2;
echo $txt1;
?>

PHP Array Operators


The PHP array operators are used to compare arrays.

27
Oper Name Example Result Show it
ator

+ Union $x + $y Union of $x <?php


and $y $x
= array("a" => "red", "b" => "green");
$y
= array("c" => "blue", "d" => "yellow");

print_r($x + $y); // union of $x and $y


?>

//output

Array ( [a] => red [b] => green [c] => blue [d] => yellow )

== Equality $x == $y Returns <?php


true if $x $x= array("a" => "red", "b" => "green");
and $y $y= array("c" => "blue", "d" => "yellow");
have the
same
key/value var_dump($x == $y);
pairs ?>

//output

bool(false)

=== Identity $x === $y Returns <?php


true if $x $x= array("a" => "red", "b" => "green");
and $y $y= array("c" => "blue", "d" => "yellow");
have the var_dump($x === $y);
same ?>
key/value
pairs in the //output
same order
and of the bool(false)
same types

!= Inequalit $x != $y Returns <?php


y true if $x is $x= array("a" => "red", "b" => "green");
not equal $y= array("c" => "blue", "d" => "yellow");
to $y

28
var_dump($x != $y);
?>

//output

bool(true)

<> Inequalit $x <> $y Returns <?php


y true if $x is $x= array("a" => "red", "b" => "green");
not equal $y= array("c" => "blue", "d" => "yellow");
to $y var_dump($x <> $y);
?> //output

bool(true)

!== Non- $x !== $y Returns <?php


identity true if $x is $x= array("a" => "red", "b" => "green");
not $y= array("c" => "blue", "d" => "yellow");
identical to var_dump($x !== $y);
$y ?>

//output

bool(true)

PHP 5 if...else...elseif Statements


Conditional statements are used to perform different actions based on
different conditions.

PHP Conditional Statements


Very often when you write code, you want to perform different actions for
different conditions. You can use conditional statements in your code to do this.

In PHP we have the following conditional statements:

 if statement - executes some code if one condition is true

29
 if...else statement - executes some code if a condition is true and
another code if that condition is false
 if...elseif....else statement - executes different codes for more than
two conditions
 switch statement - selects one of many blocks of code to be executed

PHP - The if Statement


The if statement executes some code if one condition is true.

Syntax
if (condition) {
code to be executed if condition is true;
}

The example below will output "Have a good day!" if the current time (HOUR) is
less than 20:

Example
<?php
$t = date("H");

if ($t < "20") {


echo "Have a good day!";
}
?>

PHP - The if...else Statement


The if....else statement executes some code if a condition is true and
another code if that condition is false.

Syntax
if (condition) {
code to be executed if condition is true;
} else {
code to be executed if condition is false;
}

The example below will output "Have a good day!" if the current time is less
than 20, and "Have a good night!" otherwise:

31
Example
<?php
$t = date("H");

if ($t < "20") {


echo "Have a good day!";
} else {
echo "Have a good night!";
}
?>

PHP - The if...elseif....else Statement


The if....elseif...else statement executes different codes for more than
two conditions.

Syntax
if (condition) {
code to be executed if this condition is true;
} elseif (condition) {
code to be executed if this condition is true;
} else {
code to be executed if all conditions are false;
}

The example below will output "Have a good morning!" if the current time is
less than 10, and "Have a good day!" if the current time is less than 20.
Otherwise it will output "Have a good night!":

Example
<?php
$t = date("H");

if ($t < "10") {


echo "Have a good morning!";
} elseif ($t < "20") {
echo "Have a good day!";
} else {
echo "Have a good night!";
}
?>

31
PHP - The switch Statement
The switch statement is used to perform different actions based on different
conditions.

The PHP switch Statement


Use the switch statement to select one of many blocks of code to be
executed.

Syntax
switch (n) {
case label1:
code to be executed if n=label1;
break;
case label2:
code to be executed if n=label2;
break;
case label3:
code to be executed if n=label3;
break;
...
default:
code to be executed if n is different from all labels;
}

This is how it works: First we have a single expression n (most often a


variable), that is evaluated once. The value of the expression is then compared
with the values for each case in the structure. If there is a match, the block of
code associated with that case is executed. Use break to prevent the code from
running into the next case automatically. The default statement is used if no
match is found.

32
Example
<?php
$favcolor = "red";

switch ($favcolor) {
case "red":
echo "Your favorite color is red!";
break;
case "blue":
echo "Your favorite color is blue!";
break;
case "green":
echo "Your favorite color is green!";
break;
default:
echo "Your favorite color is neither red, blue, nor green!";
}
?>

PHP while loops execute a block of code while the specified condition is true.

PHP Loops
Often when you write code, you want the same block of code to run over and
over again in a row. Instead of adding several almost equal code-lines in a
script, we can use loops to perform a task like this.

In PHP, we have the following looping statements:

 while - loops through a block of code as long as the specified condition is


true
 do...while - loops through a block of code once, and then repeats the
loop as long as the specified condition is true
 for - loops through a block of code a specified number of times
 foreach - loops through a block of code for each element in an array

33
The PHP while Loop
The while loop executes a block of code as long as the specified condition is
true.

Syntax
while (condition is true) {
code to be executed;
}

The example below first sets a variable $x to 1 ($x = 1). Then, the while loop
will continue to run as long as $x is less than, or equal to 5 ($x <= 5). $x will
increase by 1 each time the loop runs ($x++):

Example
<?php
$x = 1;

while($x <= 5) {
echo "The number is: $x <br>";
$x++;
}
?>

The PHP do...while Loop


The do...while loop will always execute the block of code once, it will then
check the condition, and repeat the loop while the specified condition is true.

Syntax
do {
code to be executed;
} while (condition is true);

The example below first sets a variable $x to 1 ($x = 1). Then, the do while
loop will write some output, and then increment the variable $x with 1. Then
the condition is checked (is $x less than, or equal to 5?), and the loop will
continue to run as long as $x is less than, or equal to 5:

34
Example
<?php
$x = 1;

do {
echo "The number is: $x <br>";
$x++;
} while ($x <= 5);
?>

Notice that in a do while loop the condition is tested AFTER executing the
statements within the loop. This means that the do while loop would execute
its statements at least once, even if the condition is false the first time.

The example below sets the $x variable to 6, then it runs the loop, and then
the condition is checked:

Example
<?php
$x = 6;

do {
echo "The number is: $x <br>";
$x++;
} while ($x <= 5);
?>

The for loop and the foreach loop will be explained in the next chapter.

PHP for loops execute a block of code a specified number of times.

The PHP for Loop


The for loop is used when you know in advance how many times the script
should run.

Syntax
for (init counter; test counter; increment counter) {
code to be executed;
}

35
Parameters:

 init counter: Initialize the loop counter value


 test counter: Evaluated for each loop iteration. If it evaluates to TRUE,
the loop continues. If it evaluates to FALSE, the loop ends.
 increment counter: Increases the loop counter value

The example below displays the numbers from 0 to 10:

Example
<?php
for ($x = 0; $x <= 10; $x++) {
echo "The number is: $x <br>";
}
?>

The PHP foreach Loop


The foreach loop works only on arrays, and is used to loop through each
key/value pair in an array.

Syntax
foreach ($array as $value) {
code to be executed;
}

For every loop iteration, the value of the current array element is assigned to
$value and the array pointer is moved by one, until it reaches the last array
element.

The following example demonstrates a loop that will output the values of the
given array ($colors):

Example
<?php
$colors = array("red", "green", "blue", "yellow");

foreach ($colors as $value) {


echo "$value <br>";
}
?>

36
The real power of PHP comes from its functions; it has more than 1000 built-
in functions.

PHP User Defined Functions


Besides the built-in PHP functions, we can create our own functions.

A function is a block of statements that can be used repeatedly in a program.

A function will not execute immediately when a page loads.

A function will be executed by a call to the function

Create a User Defined Function in PHP


A user-defined function declaration starts with the word function:

Syntax
function functionName() {
code to be executed;
}

Note: A function name can start with a letter or underscore (not a number).

Tip: Give the function a name that reflects what the function does!

Function names are NOT case-sensitive.

In the example below, we create a function named "writeMsg()". The opening


curly brace ( { ) indicates the beginning of the function code and the closing
curly brace ( } ) indicates the end of the function. The function outputs "Hello
world!". To call the function, just write its name:

Example
<?php
function writeMsg() {
echo "Hello world!";
}

writeMsg(); // call the function


?>

37
PHP Function Arguments
Information can be passed to functions through arguments. An argument is just
like a variable.

Arguments are specified after the function name, inside the parentheses. You
can add as many arguments as you want, just separate them with a comma.

The following example has a function with one argument ($fname). When the
familyName() function is called, we also pass along a name (e.g. Jani), and the
name is used inside the function, which outputs several different first names,
but an equal last name:

Example
<?php
function familyName($fname) {
echo "$fname Refsnes.<br>";
}

familyName("Jani");
familyName("Ali");
familyName("Mohammed");
familyName("Sameer Jim");
familyName("Borge");
?>

The following example has a function with two arguments ($fname and $year):

Example
<?php
function familyName($fname, $year) {
echo "$fname Refsnes. Born in $year <br>";
}

familyName("Ali", "1975");
familyName("Mohammed", "1978");
familyName("Sameer", "1983");
?>

38
PHP Default Argument Value
The following example shows how to use a default parameter. If we call the
function setHeight() without arguments it takes the default value as argument:

Example
<?php
function setHeight($minheight = 50) {
echo "The height is : $minheight <br>";
}

setHeight(350);
setHeight(); // will use the default value of 50
setHeight(135);
setHeight(80);
?>

PHP Functions - Returning values


To let a function return a value, use the return statement:

Example
<?php
function sum($x, $y) {
$z = $x + $y;
return $z;
}

echo "5 + 10 = " . sum(5, 10) . "<br>";


echo "7 + 13 = " . sum(7, 13) . "<br>";
echo "2 + 4 = " . sum(2, 4);
?>

39
PHP 5 Arrays
An array stores multiple values in one single variable:

Example
<?php
$cars = array("Volvo", "BMW", "Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>

What is an Array?
An array is a special variable, which can hold more than one value at a time.

If you have a list of items (a list of car names, for example), storing the cars in
single variables could look like this:

$cars1 = "Volvo";
$cars2 = "BMW";
$cars3 = "Toyota";

However, what if you want to loop through the cars and find a specific one? And
what if you had not 3 cars, but 300?

The solution is to create an array!

An array can hold many values under a single name, and you can access the
values by referring to an index number.

Create an Array in PHP


In PHP, the array() function is used to create an array:

array();

In PHP, there are three types of arrays:

 Indexed arrays - Arrays with a numeric index


 Associative arrays - Arrays with named keys
 Multidimensional arrays - Arrays containing one or more arrays

41
PHP Indexed Arrays
There are two ways to create indexed arrays:

The index can be assigned automatically (index always starts at 0), like this:

$cars = array("Volvo", "BMW", "Toyota");

or the index can be assigned manually:

$cars[0] = "Volvo";
$cars[1] = "BMW";
$cars[2] = "Toyota";

The following example creates an indexed array named $cars, assigns three
elements to it, and then prints a text containing the array values:

Example
<?php
$cars = array("Volvo", "BMW", "Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>

Get The Length of an Array - The count()


Function
The count() function is used to return the length (the number of elements) of
an array:

Example
<?php
$cars = array("Volvo", "BMW", "Toyota");
echo count($cars);
?>

Loop Through an Indexed Array


To loop through and print all the values of an indexed array, you could use
a for loop, like this:

41
Example
<?php
$cars = array("Volvo", "BMW", "Toyota");
$arrlength = count($cars);
for($x = 0; $x < $arrlength; $x++) {
echo $cars[$x];
echo "<br>"; }
?>

PHP Associative Arrays


Associative arrays are arrays that use named keys that you assign to them.

There are two ways to create an associative array:

$age = array("Ali"=>"35", "Sameer"=>"37", "Mohammed"=>"20");

or:

$age['Ali'] = "35";
$age['Mohammed'] = "37";
$age['Sameer'] = "20";

The named keys can then be used in a script:

Example
<?php
$age = array("Ali"=>"35", "Mohammed"=>"37", "Sameer"=>"20");
echo "Ali is " . $age['Ali'] . " years old.";
?>

Loop Through an Associative Array


To loop through and print all the values of an associative array, you could use
a foreach loop, like this:

Example
<?php
$age = array("Ali"=>"35", "Mohammed"=>"37", "Sameer"=>"20");
foreach($age as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>"; }
?>

42
PHP 5 Multidimensional Arrays
Earlier , we have described arrays that are a single list of key/value pairs.

However, sometimes you want to store values with more than one key.

This can be stored in multidimensional arrays.

PHP - Multidimensional Arrays


A multidimensional array is an array containing one or more arrays.

PHP understands multidimensional arrays that are two, three, four, five, or
more levels deep. However, arrays more than three levels deep are hard to
manage for most people.

The dimension of an array indicates the number of indices you need to


select an element.

 For a two-dimensional array you need two indices to select an element


 For a three-dimensional array you need three indices to select an element

PHP - Two-dimensional Arrays


A two-dimensional array is an array of arrays (a three-dimensional array is an
array of arrays of arrays).

First, take a look at the following table:

43
We can store the data from the table above in a two-dimensional array, like
this:

$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);

Now the two-dimensional $cars array contains four arrays, and it has two
indices: row and column.

To get access to the elements of the $cars array we must point to the two
indices (row and column):

Example

44
We can also put a for loop inside another for loop to get the elements of the
$cars array (we still have to point to the two indices):

Example

45
PHP 5 Sorting Arrays
The elements in an array can be sorted in alphabetical or numerical order,
descending or ascending.

PHP - Sort Functions For Arrays


In this chapter, we will go through the following PHP array sort functions:

 sort() - sort arrays in ascending order


 rsort() - sort arrays in descending order
 asort() - sort associative arrays in ascending order, according to the
value
 ksort() - sort associative arrays in ascending order, according to the key
 arsort() - sort associative arrays in descending order, according to the
value
 krsort() - sort associative arrays in descending order, according to the
key

Sort Array in Ascending Order - sort()


The following example sorts the elements of the $cars array in ascending
alphabetical order:

Example
<!DOCTYPE html>
<html>
<body>
<?php
$cars = array("Volvo", "BMW", "Toyota");
sort($cars);
$clength = count($cars);
for($x = 0; $x < $clength; $x++) {
echo $cars[$x];
echo "<br>";
}
?>

</body>
</html>

The following example sorts the elements of the $numbers array in ascending
numerical order:

46
Example (same as the above example)
<?php
$numbers = array(4, 6, 2, 22, 11);
sort($numbers);
$arrlength = count($numbers);
for($x = 0; $x < $arrlength; $x++) {
echo $numbers[$x];
echo "<br>";
}
?>

Sort Array in Descending Order - rsort()


The following example sorts the elements of the $cars array in descending
alphabetical order:

Example
<?php
$cars = array("Volvo", "BMW", "Toyota");
rsort($cars);

$clength = count($cars);
for($x = 0; $x < $clength; $x++) {
echo $cars[$x];
echo "<br>";
}
?>

The following example sorts the elements of the $numbers array in descending
numerical order:

Example
<?php
$numbers = array(4, 6, 2, 22, 11);
rsort($numbers);
$arrlength = count($numbers);
for($x = 0; $x < $arrlength; $x++) {
echo $numbers[$x];
echo "<br>";
} ?>

47
Sort Array (Ascending Order), According to
Value - asort()
The following example sorts an associative array in ascending order, according
to the value:

Example
<?php
$age = array("Ali"=>"35", "Mohammed"=>"37", "Sameer"=>"20");
asort($age);

foreach($age as $x => $x_value) {


echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>

Sort Array (Ascending Order), According to Key


- ksort()
The following example sorts an associative array in ascending order, according
to the key:

Example
Do this Example by yourself

Sort Array (Descending Order), According to


Value - arsort()
The following example sorts an associative array in descending order, according
to the value:

Example
<?php
$age = array("Ali"=>"35", "Mohammed"=>"37", "Sameer"=>"20");
arsort($age);

Complete this program yourself .


?>

48
Sort Array (Descending Order), According to
Key - krsort()
The following example sorts an associative array in descending order, according
to the key:

Example
<?php
$age = array("Ali"=>"35", "Mohammed"=>"37", "Sameer"=>"20");
krsort($age);

Complete this program yourself .

?>

Homework

Write a search of all array functions and their use ?

49
Forms
PHP Registration Form using GET, POST Methods with Example

What is Form?
When you login into a website or into your mail box, you are interacting with a form.

Forms are used to get input from the user and submit it to the web server for
processing.

The diagram below illustrates the form handling process.

A form is an HTML tag that contains graphical user interface items such as input
box, check boxes radio buttons etc.

The form is defined using the <form>...</form> tags and GUI items are defined using
form elements such as input.

When and why we are using forms?


 Forms come in handy when developing flexible and dynamic applications that
accept user input.
 Forms can be used to edit already existing data from the database

Create a form
We will use HTML tags to create a form. Below is the minimal list of things you need
to create a form.

 Opening and closing form tags <form>…</form>


 Form submission type POST or GET
 Submission URL that will process the submitted data

51
 Input fields such as input boxes, text areas, buttons,checkboxes etc.

The code below creates a simple registration form

<html>
<head>
<title>Registration Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

<h2>Registration Form</h2>

<form action="registration_form.php" method="POST"> First name:

<input type="text" name="firstname"> <br> Last name:

<input type="text" name="lastname">

<input type="hidden" name="form_submitted" value="1" />

<input type="submit" value="Submit">

</form>
</body>
</html>

Viewing the above code in a web browser displays the following form.

HERE,

 <form…>…</form> are the opening and closing form tags


 action="registration_form.php" method="POST"> specifies the destination
URL and the submission type.
 First/Last name: are labels for the input boxes
 <input type=”text”…> are input box tags
 <br> is the new line tag

51
 <input type="hidden" name="form_submitted" value="1"/> is a hidden value
that is used to check whether the form has been submitted or not
 <input type="submit" value="Submit"> is the button that when clicked submits
the form to the server for processing

Submitting the form data to the server


The action attribute of the form specifies the submission URL that processes the
data. The method attribute specifies the submission type.

PHP POST method


 This is the built in PHP super global array variable that is used to get values
submitted via HTTP POST method.
 The array variable can be accessed from any script in the program; it has a
global scope.
 This method is ideal when you do not want to display the form post values in
the URL.
 A good example of using post method is when submitting login details to the
server.

It has the following syntax.

<?php
$_POST['variable_name'];
?>

HERE,

 “$_POST[…]” is the PHP array


 “'variable_name'” is the URL variable name.

PHP GET method


 This is the built in PHP super global array variable that is used to get values
submitted via HTTP GET method.
 The array variable can be accessed from any script in the program; it has a
global scope.
 This method displays the form values in the URL.
 It’s ideal for search engine forms as it allows the users to book mark the
results.

It has the following syntax.

52
<?php
$_GET['variable_name'];
?>

HERE,

 “$_GET[…]” is the PHP array


 “'variable_name'” is the URL variable name.

GET vs POST Methods


POST GET

Values not visible in the URL Values visible in the URL

Has not limitation of the length of the Has limitation on the length of the values
values since they are submitted via usually 255 characters. This is because the
the body of HTTP values are displayed in the URL. Note the
upper limit of the characters is dependent
on the browser.

Has lower performance compared to Has high performance compared to POST


Php_GET method due to time spent method dues to the simple nature of
encapsulation the Php_POST values in appending the values in the URL.
the HTTP body

Supports many different data types Supports only string data types because the
such as string, numeric, binary etc. values are displayed in the URL

Results cannot be book marked Results can be book marked due to the
visibility of the values in the URL

The below diagram shows the difference between get and post

53
Processing the registration form data
The registration form submits data to itself as specified in the action attribute of the
form.

When a form has been submitted, the values are populated in the $_POST super
global array.

We will use the PHP isset function to check if the form values have been filled in the
$_POST array and process the data.

We will modify the registration form to include the PHP code that processes the
data. Below is the modified code

54
<html>
<head>
<title>Registration Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>

<body>

<?php if (isset($_POST['form_submitted'])): ?> //this code is executed when t


he form is submitted

<h2>Thank You <?php echo $_POST['firstname']; ?> </h2>

<p>
You have been registered as
<?php echo $_POST['firstname'] . ' ' . $_POST['lastname']; ?>
</p>

<p>Go <a href="/registration_form.php">back</a> to the form</p>

<?php else: ?>

<h2>Registration Form</h2>

<form action="registration_form.php" method="POST">

First name:<input type="text" name="firstname"><br>


Last name:<input type="text" name="lastname">

<input type="hidden" name="form_submitted" value="1" />


<input type="submit" value="Submit">

</form>

<?php endif; ? >


</body>
</html>

HERE,

 <?php if (isset($_POST['form_submitted'])): ?> checks if the form_submitted


hidden field has been filled in the $_POST[] array and display a thank you and
first name message.

If the form_fobmitted field hasn’t been filled in the $_POST[] array, the form is
displayed.

55
More examples
Simple search engine
We will design a simple search engine that uses the PHP_GET method as the form
submission type.

For simplicity’s sake, we will use a PHP If statement to determine the output.

We will use the same HTML code for the registration form above and make minimal
modifications to it.

<html>
<head>
<title>Simple Search Engine</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

<?php if (isset($_GET['form_submitted'])): ?>

<h2>Search Results For <?php echo $_GET['search_term']; ?> </h2>


<?php if ($_GET['search_term'] == "GET"): ?>

<p>The GET method displays its values in the URL</p>

<?php else: ?>


<p>Sorry, no matches found for your search term</p>

<?php endif; ?>

<p>Go <a href="/search_engine.php">back</a> to the form</p>

<?php else: ?>

<h2>Simple Search Engine - Type in GET </h2>

<form action="search_engine.php" method="GET">

Search Term:
<input type="text" name="search_term">
<br>

<input type="hidden" name="form_submitted" value="1" />

<input type="submit" value="Submit">

56
</form>
<?php endif; ?>
</body>
</html>

View the above page in a web browser

The following form will be shown

Type GET in upper case letter then click on submit button.

The following will be shown

The diagram below shows the URL for the above results

Note the URL has displayed the value of search_term and form_submitted. Try to
enter anything different from GET then click on submit button and see what results
you will get.

Working with check boxes, radio buttons


If the user does not select a check box or radio button, no value is submitted, if the
user selects a check box or radio button, the value one (1) or true is submitted.

We will modify the registration form code and include a check button that allows the
user to agree to the terms of service.

<html>

57
<head>
<title>Registration Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

<?php if (isset($_POST['form_submitted'])): ?>


<?php if (!isset($_POST['agree'])): ?>

<p>You have not accepted our terms of service</p>

<?php else: ?>

<h2>Thank You <?php echo $_POST['firstname']; ?></h2>

<p>
You have been registered as
<?php echo $_POST['firstname'] . ' ' . $_POST['lastname']; ?>
</p>

<p> Go <a href="/registration_form2.php">back</a> to the form</p>

<?php endif; ?>

<?php else: ?>

<h2>Registration Form</h2>
form action="registration_form2.php" method="POST">
First name: <input type="text" name="firstname"><br>
Last name: <input type="text" name="lastname"><br>
Agree to Terms of Service: <input type="checkbox" name="agree"><br>
<input type="hidden" name="form_submitted" value="1" />
<input type="submit" value="Submit">
</form>
<?php endif; ?>
</body>
</html>

View the above form in a browser

58
Fill in the first and last names

Note the Agree to Terms of Service checkbox has not been selected.

Click on submit button

You will get the following results

Click on back to the form link and then select the checkbox

Click on submit button

You will get the following results

Summary

59
 Forms are used to get data from the users
 Forms are created using HTML tags
 Forms can be submitted to the server for processing using either POST or
GET method
 Form values submitted via the POST method are encapsulated in the HTTP
body.
 Form values submitted via the GET method are appended and displayed in
the URL.

PHP - A Simple HTML Form


The example below displays a simple HTML form with two input fields and a
submit button:

Example
<html>
<body>

<form action="welcome.php" method="post">


Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>

After pressing ‫ إرسال‬Button you will get the following result :

When the user fills out the form above and clicks the submit button, the form
data is sent for processing to a PHP file named "welcome.php". The form data is
sent with the HTTP POST method.

To display the submitted data you could simply echo all the variables. The
"welcome.php" looks like this:

<html>
<body>

61
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>

</body>
</html>

The same result could also be achieved using the HTTP GET method:

Example
<html>
<body>

<form action="welcome_get.php" method="get">


Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>

and "welcome_get.php" looks like this:

<html>
<body>

Welcome <?php echo $_GET["name"]; ?><br>


Your email address is: <?php echo $_GET["email"]; ?>

</body>
</html>

The code above is quite simple. However, the most important thing is missing.
You need to validate form data to protect your script from malicious code.

Think SECURITY when processing PHP forms!

This page does not contain any form validation, it just shows how you can send
and retrieve form data.

However, the next pages will show how to process PHP forms with security in
mind! Proper validation of form data is important to protect your form from
hackers and spammers!

61
GET vs. POST
Both GET and POST create an array (e.g. array( key => value, key2 => value2,
key3 => value3, ...)). This array holds key/value pairs, where keys are the
names of the form controls and values are the input data from the user.

Both GET and POST are treated as $_GET and $_POST. These are super global ,
which means that they are always accessible, regardless of scope - and you can
access them from any function, class or file without having to do anything
special.

$_GET is an array of variables passed to the current script via the URL
parameters.

$_POST is an array of variables passed to the current script via the HTTP POST
method.

When to use GET?


Information sent from a form with the GET method is visible to everyone (all
variable names and values are displayed in the URL). GET also has limits on the
amount of information to send. The limitation is about 2000 characters.
However, because the variables are displayed in the URL, it is possible to
bookmark the page. This can be useful in some cases.

GET may be used for sending non-sensitive data.

Note: GET should NEVER be used for sending passwords or other sensitive
information!

When to use POST?


Information sent from a form with the POST method is invisible to others (all
names/values are embedded within the body of the HTTP request) and has no
limits on the amount of information to send.

Moreover POST supports advanced functionality such as support for multi-part


binary input while uploading files to server.

However, because the variables are not displayed in the URL, it is not possible
to bookmark the page.

Developers prefer POST for sending form data.

62
PHP Form Validation
Think SECURITY when processing PHP forms!

These pages will show how to process PHP forms with security in mind. Proper
validation of form data is important to protect your form from hackers and
spammers!

The HTML form we will be working at in these chapters, contains various input
fields: required and optional text fields, radio buttons, and a submit button:

63
The validation rules for the form above are as follows:

Field Validation Rules

Name Required. + Must only contain letters and whitespace

E-mail Required. + Must contain a valid email address (with @ and .)

Website Optional. If present, it must contain a valid URL

Comment Optional. Multi-line input field (textarea)

Gender Required. Must select one

First we will look at the plain HTML code for the form:

Text Fields
The name, email, and website fields are text input elements, and the comment
field is a textarea. The HTML code looks like this:

Name: <input type="text" name="name">


E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

64
Radio Buttons
The gender fields are radio buttons and the HTML code looks like this:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

The Form Element


The HTML code of the form looks like this:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"];


?>">

When the form is submitted, the form data is sent with method="post".

What is the $_SERVER["PHP_SELF"] variable?

The $_SERVER["PHP_SELF"] is a super global variable that returns the filename


of the currently executing script.

So, the $_SERVER["PHP_SELF"] sends the submitted form data to the page
itself, instead of jumping to a different page. This way, the user will get error
messages on the same page as the form.

What is the htmlspecialchars() function?

The htmlspecialchars() function converts special characters to HTML entities.


This means that it will replace HTML characters like < and > with &lt; and &gt;.
This prevents attackers from exploiting the code by injecting HTML or Javascript
code (Cross-site Scripting attacks) in forms.

Big Note on PHP Form Security


The $_SERVER["PHP_SELF"] variable can be used by hackers!

If PHP_SELF is used in your page then a user can enter a slash (/) and then
some Cross Site Scripting (XSS) commands to execute.

Cross-site scripting (XSS) is a type of computer security vulnerability


typically found in Web applications. XSS enables attackers to inject
client-side script into Web pages viewed by other users.

65
Assume we have the following form in a page named "test_form.php":

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Now, if a user enters the normal URL in the address bar like
"http://www.example.com/test_form.php", the above code will be translated to:

<form method="post" action="test_form.php">

So far, so good.

However, consider that a user enters the following URL in the address bar:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/scr
ipt%3E

In this case, the above code will be translated to:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

This code adds a script tag and an alert command. And when the page loads,
the JavaScript code will be executed (the user will see an alert box). This is just
a simple and harmless example how the PHP_SELF variable can be exploited.

Be aware of that any JavaScript code can be added inside the <script>
tag! A hacker can redirect the user to a file on another server, and that file can
hold malicious code that can alter the global variables or submit the form to
another address to save the user data, for example.

How To Avoid $_SERVER["PHP_SELF"] Exploits?


$_SERVER["PHP_SELF"] exploits can be avoided by using the htmlspecialchars()
function.

The form code should look like this:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"])


;?>">

The htmlspecialchars() function converts special characters to HTML entities.


Now if the user tries to exploit the PHP_SELF variable, it will result in the
following output:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hack


ed')&lt;/script&gt;">

66
The exploit attempt fails, and no harm is done!

Validate Form Data With PHP


The first thing we will do is to pass all variables through PHP's
htmlspecialchars() function.

When we use the htmlspecialchars() function; then if a user tries to submit the
following in a text field:

<script>location.href('http://www.hacked.com')</script>

- this would not be executed, because it would be saved as HTML escaped code,
like this:

&lt;script&gt;location.href('http://www.hacked.com')&lt;/script&gt;

The code is now safe to be displayed on a page or inside an e-mail.

We will also do two more things when the user submits the form:

1. Strip unnecessary characters (extra space, tab, newline) from the user
input data (with the PHP trim() function)
2. Remove backslashes (\) from the user input data (with the PHP
stripslashes() function)

The next step is to create a function that will do all the checking for us (which is
much more convenient than writing the same code over and over again).

We will name the function test_input().

Now, we can check each $_POST variable with the test_input() function, and
the script looks like this:

67
Example
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>

<h2>PHP Form Validation Example</h2>


<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SEL
F"]);?>">
Name: <input type="text" name="name">
<br><br>
E-mail: <input type="text" name="email">
<br><br>
Website: <input type="text" name="website">
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other
<br><br>
<input type="submit" name="submit" value="Submit">
</form>

68
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>

</body>
</html>

Notice that at the start of the script, we check whether the form has been
submitted using $_SERVER["REQUEST_METHOD"]. If the REQUEST_METHOD is

69
POST, then the form has been submitted - and it should be validated. If it has
not been submitted, skip the validation and display a blank form.

However, in the example above, all input fields are optional. The script works
fine even if the user does not enter any data.

PHP 5 Forms - Required Fields


This chapter shows how to make input fields required and create error
messages if needed.

PHP - Required Fields


From the validation rules table on the previous page, we see that the "Name",
"E-mail", and "Gender" fields are required. These fields cannot be empty and
must be filled out in the HTML form.

Field Validation Rules

Name Required. + Must only contain letters and whitespace

E-mail Required. + Must contain a valid email address (with @ and .)

Website Optional. If present, it must contain a valid URL

Comment Optional. Multi-line input field (textarea)

Gender Required. Must select one

71
In the previous chapter, all input fields were optional.

In the following code we have added some new variables: $nameErr, $emailErr,
$genderErr, and $websiteErr. These error variables will hold error messages for
the required fields. We have also added an if else statement for each $_POST
variable. This checks if the $_POST variable is empty (with the
PHP empty() function). If it is empty, an error message is stored in the different
error variables, and if it is not empty, it sends the user input data through
the test_input() function:

<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
}

if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
}

if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
}

if (empty($_POST["comment"])) {
$comment = "";

71
} else {
$comment = test_input($_POST["comment"]);
}

if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>

<h2>PHP Form Validation Example</h2>


<p><span class="error">* required field</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SEL
F"]);?>">
Name: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website: <input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>

72
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>

</body>
</html>

PHP - Display The Error Messages


Then in the HTML form, we add a little script after each required field, which
generates the correct error message if needed (that is if the user tries to submit
the form without filling out the required fields):

73
Example
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"])
;?>">

Name: <input type="text" name="name">


<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail:
<input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website:
<input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">

</form>

The next step is to validate the input data, that is "Does the Name field contain
only letters and whitespace?", and "Does the E-mail field contain a valid e-mail
address syntax?", and if filled out, "Does the Website field contain a valid
URL?".

PHP 5 Forms - Validate E-mail and


URL
This chapter shows how to validate names, e-mails, and URLs.

PHP - Validate Name


The code below shows a simple way to check if the name field only contains
letters and whitespace. If the value of the name field is not valid, then store an
error message:

74
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}

The preg_match() function searches a string for pattern, returning true


if the pattern exists, and false otherwise.

PHP - Validate E-mail


The easiest and safest way to check whether an email address is well-formed is
to use PHP's filter_var() function.

In the code below, if the e-mail address is not well-formed, then store an error
message:

$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}

PHP - Validate URL


The code below shows a way to check if a URL address syntax is valid (this
regular expression also allows dashes in the URL). If the URL address syntax is
not valid, then store an error message:

$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-
9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}

75
PHP - Validate Name, E-mail, and URL
Now, the script looks like this:

Example
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}

if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}

if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also
allows dashes in the URL)
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-
9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}
}

if (empty($_POST["comment"])) {
$comment = "";

76
} else {
$comment = test_input($_POST["comment"]);
}

if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
}
?>

PHP 5 Complete Form Example


This chapter shows how to keep the values in the input fields when the user
hits the submit button.

PHP - Keep The Values in The Form


To show the values in the input fields after the user hits the submit button, we
add a little PHP script inside the value attribute of the following input fields:
name, email, and website. In the comment textarea field, we put the script
between the <textarea> and </textarea> tags. The little script outputs the
value of the $name, $email, $website, and $comment variables.

Then, we also need to show which radio button that was checked. For this, we
must manipulate the checked attribute (not the value attribute for radio
buttons):

Name: <input type="text" name="name" value="<?php echo $name;?>">

E-mail: <input type="text" name="email" value="<?php echo $email;?>">

Website: <input type="text" name="website" value="<?php echo $website;?>">

Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></


textarea>

Gender:
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="female") echo "checked";?>
value="female">Female
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="male") echo "checked";?>
value="male">Male

77
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="other") echo "checked";?>
value="other">Other

PHP 5 Date and Time


The PHP date() function is used to format a date and/or a time.

The PHP Date() Function


The PHP date() function formats a timestamp to a more readable date and
time.

Syntax
date(format,timestamp)

Parameter Description

format Required. Specifies the format of the timestamp

timestamp Optional. Specifies a timestamp. Default is the


current date and time

A timestamp is a sequence of characters, denoting the date and/or time at


which a certain event occurred.

Get a Simple Date


The required format parameter of the date() function specifies how to format
the date (or time).

Here are some characters that are commonly used for dates:

 d - Represents the day of the month (01 to 31)


 m - Represents a month (01 to 12)
 Y - Represents a year (in four digits)
 l (lowercase 'L') - Represents the day of the week

78
Other characters, like"/", ".", or "-" can also be inserted between the characters
to add additional formatting.

The example below formats today's date in three different ways:

Outputs

79
PHP 5 Include Files
The include (or require) statement takes all the text/code/markup that
exists in the specified file and copies it into the file that uses the include
statement.

Including files is very useful when you want to include the same PHP, HTML,
or text on multiple pages of a website.

PHP include and require Statements


It is possible to insert the content of one PHP file into another PHP file (before
the server executes it), with the include or require statement.

The include and require statements are identical, except upon failure:

 require will produce a fatal error (E_COMPILE_ERROR) and stop the


script
 include will only produce a warning (E_WARNING) and the script will
continue

So, if you want the execution to go on and show users the output, even if the
include file is missing, use the include statement. Otherwise, in case of
FrameWork, CMS, or a complex PHP application coding, always use the require
statement to include a key file to the flow of execution. This will help avoid
compromising your application's security and integrity, just in-case one key file
is accidentally missing.

Including files saves a lot of work. This means that you can create a standard
header, footer, or menu file for all your web pages. Then, when the header
needs to be updated, you can only update the header include file.

Syntax
include 'filename';

or

require 'filename';

81
PHP include Examples
Example 1
Assume we have a standard footer file called "footer.php", that looks like this:

<?php
echo "<p>Copyright &copy; 1999-" . date("Y") . " W3Schools.com</p>";
?>

To include the footer file in a page, use the include statement:

Example
<html>
<body>

<h1>Welcome to my home page!</h1>


<p>Some text.</p>
<p>Some more text.</p>
<?php include 'footer.php';?>

</body>
</html>

Output

Welcome to my home page!

Some text.

Some more text.

Copyright © 1999-2018 W3Schools.com

81
Example 2
Assume we have a file called "vars.php", with some variables defined:

<?php
$color='red';
$car='BMW';
?>

Then, if we include the "vars.php" file, the variables can be used in the calling
file:

Example
<html>
<body>
<h1>Welcome to my home page!</h1>
<?php include 'vars.php';
echo "I have a $color $car.";
?>
</body>
</html>

output

Welcome to my home page!


I have a red BMW.

PHP include vs. require


The require statement is also used to include a file into the PHP code.

However, there is one big difference between include and require; when a file is
included with the include statement and PHP cannot find it, the script will
continue to execute:

82
Example
<html>
<body>

<h1>Welcome to my home page!</h1>


<?php include 'noFileExists.php';
echo "I have a $color $car.";
?>

</body>
</html>

output

Welcome to my home page!


I have a .

If we do the same example using the require statement, the echo statement
will not be executed because the script execution dies after
the require statement returned a fatal error:

Example
<html>
<body>

<h1>Welcome to my home page!</h1>


<?php require 'noFileExists.php';
echo "I have a $color $car.";
?>

</body>
</html>

output

Welcome to my home page!

Use require when the file is required by the application.

Use include when the file is not required and application should continue when
file is not found.

83
Files
File Handling

File handling is an important part of any web application. You often need to open and
process a file for different tasks.

PHP Manipulating Files


PHP has several functions for creating, reading, uploading, and editing files.

Be careful when manipulating files!

When you are manipulating files you must be very careful.

You can do a lot of damage if you do something wrong. Common errors are: editing the wrong
file, filling a hard-drive with garbage data, and deleting the content of a file by accident.

PHP readfile() Function


The readfile() function reads a file and writes it to the output buffer.

Assume we have a text file called "webdictionary.txt", stored on the server, that looks like this:

AJAX = Asynchronous JavaScript and XML


CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language

The PHP code to read the file and write it to the output buffer is as follows
(the readfile() function returns the number of bytes read on success):

84
The readfile() function is useful if all you want to do is open up a file and read its contents.

PHP Open File - fopen()


A better method to open files is with the fopen() function. This function gives you more options
than the readfile() function.

We will use the text file, "webdictionary.txt", during the lessons:

AJAX = Asynchronous JavaScript and XML


CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language

The first parameter of fopen() contains the name of the file to be opened and the second
parameter specifies in which mode the file should be opened. The following example also
generates a message if the fopen() function is unable to open the specified file:

85
PHP Read File - fread()
The fread() function reads from an open file.

The first parameter of fread() contains the name of the file to read from and the second
parameter specifies the maximum number of bytes to read.

The following PHP code reads the "webdictionary.txt" file to the end:

fread($myfile,filesize("webdictionary.txt"));

86
PHP Close File - fclose()
The fclose() function is used to close an open file.

It's a good programming practice to close all files after you have finished with them. You don't
want an open file running around on your server taking up resources!The fclose() requires the
name of the file (or a variable that holds the filename) we want to close:<?php$myfile =
fopen("webdictionary.txt", "r");// some code to be executed....
fclose($myfile);
?>

PHP Read Single Line - fgets()


The fgets() function is used to read a single line from a file.

The example below outputs the first line of the "webdictionary.txt" file:

Note: After a call to the fgets() function, the file pointer has moved to the next line.

PHP Check End-Of-File - feof()


The feof() function checks if the "end-of-file" (EOF) has been reached.

The feof() function is useful for looping through data of unknown length.

The example below reads the "webdictionary.txt" file line by line, until end-of-file is reached:

87
PHP Read Single Character - fgetc()
The fgetc() function is used to read a single character from a file.

The example below reads the "webdictionary.txt" file character by character, until end-of-file
is reached:

Note: After a call to the fgetc() function, the file pointer moves to the next character.

PHP Create File - fopen()


The fopen() function is also used to create a file. Maybe a little confusing, but in PHP, a file is
created using the same function used to open files.

If you use fopen() on a file that does not exist, it will create it, given that the file is opened for
writing (w) or appending (a).

The example below creates a new file called "testfile.txt". The file will be created in the same
directory where the PHP code resides:

88
Example
$myfile = fopen("testfile.txt", "w")

PHP File Permissions


If you are having errors when trying to get this code to run, check that you have granted your
PHP file access to write information to the hard drive.

PHP Write to File - fwrite()


The fwrite() function is used to write to a file.

The first parameter of fwrite() contains the name of the file to write to and the second
parameter is the string to be written.

The example below writes a couple of names into a new file called "newfile.txt":

Example

Notice that we wrote to the file "newfile.txt" twice. Each time we wrote to the file we sent the
string $txt that first contained "Ahmed Abbas" and second contained "Mohammed Ali". After
we finished writing, we closed the file using the fclose() function.

If we open the "newfile.txt" file it would look like this:

Ahmed Abbas
Mohammed Ali

89
PHP Overwriting
Now that "newfile.txt" contains some data we can show what happens when we open an
existing file for writing. All the existing data will be ERASED and we start with an empty file.

In the example below we open our existing file "newfile.txt", and write some new data into it:

Example

If we now open the "newfile.txt" file, both Ahmed and Mohammed have vanished, and only the
data we just wrote is present:

Mickey Mouse
Minnie Mouse

PHP 5 File Upload

With PHP, it is easy to upload files to the server.

However, with ease comes danger, so always be careful when allowing file uploads!

Configure The "php.ini" File


First, ensure that PHP is configured to allow file uploads.

In your "php.ini" file, search for the file_uploads directive, and set it to On:

file_uploads = On

Create The HTML Form


Next, create an HTML form that allow users to choose the image file they want to upload:

91
Some rules to follow for the HTML form above:

 Make sure that the form uses method="post"


 The form also needs the following attribute: enctype="multipart/form-data". It
specifies which content-type to use when submitting the form

Without the requirements above, the file upload will not work.

Other things to notice:

 The type="file" attribute of the <input> tag shows the input field as a file-select control,
with a "Browse" button next to the input control

The form above sends data to a file called "upload.php", which we will create next.

Create The Upload File PHP Script


The "upload.php" file contains the code for uploading a file:

91
PHP script explained:

 $target_dir = "uploads/" - specifies the directory where the file is going to be placed
 $target_file specifies the path of the file to be uploaded
 $uploadOk=1 is not used yet (will be used later)
 $imageFileType holds the file extension of the file (in lower case)
 Next, check if the image file is an actual image or a fake image

Note: You will need to create a new directory called "uploads" in the directory where
"upload.php" file resides. The uploaded files will be saved there.

Check if File Already Exists


Now we can add some restrictions.

First, we will check if the file already exists in the "uploads" folder. If it does, an error message
is displayed, and $uploadOk is set to 0:

// Check if file already exists


if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}

92
Limit File Size
The file input field in our HTML form above is named "fileToUpload".

Now, we want to check the size of the file. If the file is larger than 500KB, an error message is
displayed, and $uploadOk is set to 0:

// Check file size


if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}

Limit File Type


The code below only allows users to upload JPG, JPEG, PNG, and GIF files. All other file types
gives an error message before setting $uploadOk to 0:

// Allow certain file formats


if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}

93
Complete Upload File PHP Script
The complete "upload.php" file now looks like this:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0; } }
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
} }
?>

A cookie is often used to identify a user.

94
What is a Cookie?
A cookie is often used to identify a user. A cookie is a small file that the server
embeds on the user's computer. Each time the same computer requests a page
with a browser, it will send the cookie too. With PHP, you can both create and
retrieve cookie values.

Create Cookies With PHP


A cookie is created with the setcookie() function.

Syntax
setcookie(name, value, expire, path, domain, secure, httponly);

Only the name parameter is required. All other parameters are optional.

PHP Create/Retrieve a Cookie


The following example creates a cookie named "user" with the value "John
Doe". The cookie will expire after 30 days (86400 * 30). The "/" means that the
cookie is available in entire website (otherwise, select the directory you prefer).

We then retrieve the value of the cookie "user" (using the global variable
$_COOKIE). We also use the isset() function to find out if the cookie is set:

Example
<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400
= 1 day
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
echo "Cookie '" . $cookie_name . "' is set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}
?>

95
</body>
</html>

Note: The setcookie() function must appear BEFORE the <html> tag.

Note: The value of the cookie is automatically URLencoded when sending the
cookie, and automatically decoded when received (to prevent URLencoding,
use setrawcookie() instead).

Modify a Cookie Value


To modify a cookie, just set (again) the cookie using the setcookie() function:

Example
<?php
$cookie_name = "user";
$cookie_value = "Alex Porter";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
echo "Cookie '" . $cookie_name . "' is set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}
?>

</body>
</html>

96
Delete a Cookie
To delete a cookie, use the setcookie() function with an expiration date in the
past:

Example
<?php
// set the expiration date to one hour ago
setcookie("user", "", time() - 3600);
?>
<html>
<body>

<?php
echo "Cookie 'user' is deleted.";
?>

</body>
</html>

Check if Cookies are Enabled


The following example creates a small script that checks whether cookies are
enabled. First, try to create a test cookie with the setcookie() function, then
count the $_COOKIE array variable:

Example
<?php
setcookie("test_cookie", "test", time() + 3600, '/');
?>
<html>
<body>
<?php
if(count($_COOKIE) > 0) {
echo "Cookies are enabled.";
} else {
echo "Cookies are disabled.";
}
?>

</body>
</html>

97
A session is a way to store information (in variables) to be used across
multiple pages.

Unlike a cookie, the information is not stored on the users computer.

What is a PHP Session?


When you work with an application, you open it, do some changes, and then
you close it. This is much like a Session. The computer knows who you are. It
knows when you start the application and when you end. But on the internet
there is one problem: the web server does not know who you are or what you
do, because the HTTP address doesn't maintain state.

Session variables solve this problem by storing user information to be used


across multiple pages (e.g. username, favorite color, etc). By default, session
variables last until the user closes the browser.

So; Session variables hold information about one single user, and are available
to all pages in one application.

Tip: If you need a permanent storage, you may want to store the data in
a database.

Start a PHP Session


A session is started with the session_start() function.

Session variables are set with the PHP global variable: $_SESSION.

Now, let's create a new page called "demo_session1.php". In this page, we start
a new PHP session and set some session variables:

Example
<?php
// Start the session
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Set session variables
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Session variables are set."; ?> </body> </html>

98
Note: The session_start() function must be the very first thing in your
document. Before any HTML tags.

Get PHP Session Variable Values


Next, we create another page called "demo_session2.php". From this page, we
will access the session information we set on the first page
("demo_session1.php").

Notice that session variables are not passed individually to each new page,
instead they are retrieved from the session we open at the beginning of each
page (session_start()).

Also notice that all session variable values are stored in the global $_SESSION
variable:

Example
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// Echo session variables that were set on previous page
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
?>

</body>
</html>

Another way to show all the session variable values for a user session is to run
the following code:

99
Example
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
print_r($_SESSION);
?>
</body>
</html>

How does it work? How does it know it's me?

Most sessions set a user-key on the user's computer that looks something like
this: 765487cf34ert8dede5a562e4f3a7e12. Then, when a session is opened on
another page, it scans the computer for a user-key. If there is a match, it
accesses that session, if not, it starts a new session.

Modify a PHP Session Variable


To change a session variable, just overwrite it:

Example
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// to change a session variable, just overwrite it
$_SESSION["favcolor"] = "yellow";
print_r($_SESSION);
?>
</body>
</html>

111
Destroy a PHP Session
To remove all global session variables and destroy the session,
use session_unset() and session_destroy():

Example
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// remove all session variables
session_unset();

// destroy the session


session_destroy();
?>
</body>
</html>

PHP MySQL Database


With PHP, you can connect to and manipulate databases.

MySQL is the most popular database system used with PHP.

What is MySQL?
 MySQL is a database system used on the web
 MySQL is a database system that runs on a server
 MySQL is ideal for both small and large applications
 MySQL is very fast, reliable, and easy to use
 MySQL uses standard SQL
 MySQL compiles on a number of platforms
 MySQL is free to download and use
 MySQL is developed, distributed, and supported by Oracle Corporation

The data in a MySQL database are stored in tables. A table is a collection of


related data, and it consists of columns and rows.

111
Database Queries
A query is a question or a request.

We can query a database for specific information and have a recordset


returned.

Look at the following query (using standard SQL):

SQL is a standard language for storing, manipulating and retrieving data in


databases.

What Can SQL do?


 SQL can execute queries against a database
 SQL can retrieve data from a database
 SQL can insert records in a database
 SQL can update records in a database
 SQL can delete records from a database
 SQL can create new databases
 SQL can create new tables in a database
 SQL can create stored procedures in a database
 SQL can create views in a database
 SQL can set permissions on tables, procedures, and views

Some of The Most Important SQL Commands


 SELECT - extracts data from a database
 UPDATE - updates data in a database
 DELETE - deletes data from a database
 INSERT INTO - inserts new data into a database
 CREATE DATABASE - creates a new database
 ALTER DATABASE - modifies a database
 CREATE TABLE - creates a new table
 ALTER TABLE - modifies a table
 DROP TABLE - deletes a table

For sure you have already studied SQL

PHP 5 and later can work with a MySQL database using:

 MySQLi extension (the "i" stands for improved)


 PDO (PHP Data Objects)

112
Should I Use MySQLi or PDO?
If you need a short answer, it would be "Whatever you like".

Both MySQLi and PDO have their advantages:

PDO will work on 12 different database systems, whereas MySQLi will only work
with MySQL databases.

So, if you have to switch your project to use another database, PDO makes the
process easy. You only have to change the connection string and a few queries.
With MySQLi, you will need to rewrite the entire code - queries included.

Both are object-oriented, but MySQLi also offers a procedural API.

Both support Prepared Statements. Prepared Statements protect from SQL


injection, and are very important for web application security.

Open a Connection to MySQL


Before we can access data in the MySQL database, we need to be able to
connect to the server:

server anme=localhost

User name=root;

Password="";

113
PHP is an amazing and popular language!

Note on the object-oriented example above: $connect_error was broken until


PHP 5.2.9 and 5.3.0. If you need to ensure compatibility with PHP versions prior
to 5.2.9 and 5.3.0, use the following code instead:

// Check connection
if (mysqli_connect_error()) {
die("Database connection failed: " . mysqli_connect_error());
}

114
Note: In the PDO example above we have also specified a database
(myDB). PDO require a valid database to connect to. If no database is
specified, an exception is thrown.

Tip: A great benefit of PDO is that it has an exception class to handle any
problems that may occur in our database queries. If an exception is thrown
within the try{ } block, the script stops executing and flows directly to the first
catch(){ } block.

Close the Connection


The connection will be closed automatically when the script ends. To close the
connection before, use the following:

115
PHP Create a MySQL Database
A database consists of one or more tables.

You will need special CREATE privileges to create or to delete a MySQL


database.

Create a MySQL Database Using MySQLi and


PDO
The CREATE DATABASE statement is used to create a database in MySQL.

The following examples create a database named "myDB":

116
Note: When you create a new database, you must only specify the first three
arguments to the mysqli object (servername, username and password).

Tip: If you have to use a specific port, add an empty string for the database-
name argument, like this: new mysqli("localhost", "username", "password", "",
port)

117
Note: The following PDO example create a database named "myDBPDO":

118
Tip: A great benefit of PDO is that it has exception class to handle any problems
that may occur in our database queries. If an exception is thrown within the
try{ } block, the script stops executing and flows directly to the first catch(){ }
block. In the catch block above we echo the SQL statement and the generated
error message.

119
PHP Insert Data Into MySQL
Insert Data Into MySQL Using MySQLi and
PDO
After a database and a table have been created, we can start adding data in
them.

Here are some syntax rules to follow:

 The SQL query must be quoted in PHP


 String values inside the SQL query must be quoted
 Numeric values must not be quoted
 The word NULL must not be quoted

The INSERT INTO statement is used to add new records to a MySQL table:

INSERT INTO table_name (column1, column2, column3,...)


VALUES (value1, value2, value3,...)

To learn more about SQL, please visit our SQL tutorial.

In the previous chapter we created an empty table named "MyGuests" with five
columns: "id", "firstname", "lastname", "email" and "reg_date". Now, let us fill
the table with data.

Note: If a column is AUTO_INCREMENT (like the "id" column) or TIMESTAMP


(like the "reg_date" column), it is no need to be specified in the SQL query;
MySQL will automatically add the value.

The following examples add a new record to the "MyGuests" table:

Example (MySQLi Object-oriented)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error); }

111
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>

Example (MySQLi Procedural)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>

111
Example (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
$password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
// use exec() because no results are returned
$conn->exec($sql);
echo "New record created successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>

PHP Insert Multiple Records Into


MySQL
Insert Multiple Records Into MySQL Using
MySQLi and PDO
Multiple SQL statements must be executed with
the mysqli_multi_query() function.

112
The following examples add three new records to the "MyGuests" table:

Example (MySQLi Object-oriented)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";
if ($conn->multi_query($sql) === TRUE) {
echo "New records created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>

Note that each SQL statement must be separated by a semicolon.

113
Example (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)


VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";

if (mysqli_multi_query($conn, $sql)) {
echo "New records created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>

114
The PDO way is a little bit different:

Example (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
$password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// begin the transaction


$conn->beginTransaction();
// our SQL statements
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')");
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com')");
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')");

// commit the transaction


$conn->commit();
echo "New records created successfully";
}
catch(PDOException $e)
{
// roll back the transaction if something failed
$conn->rollback();
echo "Error: " . $e->getMessage();
}

$conn = null;
?>

115
Prepared Statements and Bound Parameters
A prepared statement is a feature used to execute the same (or similar) SQL
statements repeatedly with high efficiency.

Prepared statements basically work like this:

1. Prepare: SQL statement template is created and sent to the database.


Certain values are left unspecified, called parameters (labeled "?").
Example: INSERT INTO MyGuests VALUES(?, ?, ?)
2. The database parses, compiles, and performs query optimization on the
SQL statement template, and stores the result without executing it
3. Execute: At a later time, the application binds the values to the
parameters, and the database executes the statement. The application
may execute the statement as many times as it wants with different
values

Compared to executing SQL statements directly, prepared statements have


three main advantages:

 Prepared statements reduce parsing time as the preparation on the query


is done only once (although the statement is executed multiple times)
 Bound parameters minimize bandwidth to the server as you need send
only the parameters each time, and not the whole query
 Prepared statements are very useful against SQL injections, because
parameter values, which are transmitted later using a different protocol,
need not be correctly escaped. If the original statement template is not
derived from external input, SQL injection cannot occur.

116
Prepared Statements in MySQLi
The following example uses prepared statements and bound parameters in
MySQLi:

Example (MySQLi with Prepared Statements)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

// prepare and bind


$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// set parameters and execute


$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "New records created successfully";
$stmt->close();
$conn->close();
?>

117
Code lines to explain from the example above:

"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"

In our SQL, we insert a question mark (?) where we want to substitute in an


integer, string, double or blob value.

Then, have a look at the bind_param() function:

$stmt->bind_param("sss", $firstname, $lastname, $email);

This function binds the parameters to the SQL query and tells the database
what the parameters are. The "sss" argument lists the types of data that the
parameters are. The s character tells mysql that the parameter is a string.

The argument may be one of four types:

 i - integer
 d - double
 s - string
 b - BLOB

We must have one of these for each parameter.

By telling mysql what type of data to expect, we minimize the risk of SQL
injections.

Note: If we want to insert any data from external sources (like user input), it is
very important that the data is sanitized and validated.

118
Prepared Statements in PDO
The following example uses prepared statements and bound parameters in
PDO:

Example (PDO with Prepared Statements)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
$password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// prepare sql and bind parameters


$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
VALUES (:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
// insert a row
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
// insert another row
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
// insert another row
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "New records created successfully"; }
catch(PDOException $e) {
echo "Error: " . $e->getMessage(); }
$conn = null;
?>

119
Select Data From a MySQL Database
The SELECT statement is used to select data from one or more tables:

SELECT column_name(s) FROM table_name

or we can use the * character to select ALL columns from a table:

SELECT * FROM table_name

Select Data With MySQLi


The following example selects the id, firstname and lastname columns from the
MyGuests table and displays it on the page:

Example (MySQLi Object-oriented)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error); }
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " .
$row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>

Code lines to explain from the example above:

121
First, we set up an SQL query that selects the id, firstname and lastname
columns from the MyGuests table. The next line of code runs the query and puts
the resulting data into a variable called $result.

Then, the function num_rows() checks if there are more than zero rows
returned.

If there are more than zero rows returned, the function fetch_assoc() puts all
the results into an associative array that we can loop through. The while() loop
loops through the result set and outputs the data from the id, firstname and
lastname columns.

The following example shows the same as the example above, in the MySQLi
procedural way:

Example (MySQLi Procedural)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT id, firstname, lastname FROM MyGuests";


$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " .
$row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>

121
You can also put the result in an HTML table:

Example (MySQLi Object-oriented)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, firstname, lastname FROM MyGuests";


$result = $conn->query($sql);

if ($result->num_rows > 0) {
echo "<table><tr><th>ID</th><th>Name</th></tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]."
".$row["lastname"]."</td></tr>";
}
echo "</table>";
} else {
echo "0 results";
}
$conn->close();
?>

Select Data With PDO (+ Prepared Statements)


The following example uses prepared statements.

It selects the id, firstname and lastname columns from the MyGuests table and
displays it in an HTML table:

122
Example (PDO)
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";

class TableRows extends RecursiveIteratorIterator {


function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}

function current() {
return "<td style='width:150px;border:1px solid black;'>" .
parent::current(). "</td>";
}

function beginChildren() {
echo "<tr>";
}

function endChildren() {
echo "</tr>" . "\n";
}
}
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
$password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->
fetchAll())) as $k=>$v) {
echo $v; } }
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

123
Delete Data From a MySQL Table Using
MySQLi and PDO
The DELETE statement is used to delete records from a table:

DELETE FROM table_name


WHERE some_column = some_value

Notice the WHERE clause in the DELETE syntax: The WHERE clause
specifies which record or records that should be deleted. If you omit the WHERE
clause, all records will be deleted!

Let's look at the "MyGuests" table:

Id Firstname lastname email reg_date

1 John Doe john@example.com 2014-10-22 14:26:15

2 Mary Moe mary@example.com 2014-10-23 10:22:30

3 Julie Dooley julie@example.com 2014-10-26 10:48:23

The following examples delete the record with id=3 in the "MyGuests" table:

124
Example (MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

// sql to delete a record


$sql = "DELETE FROM MyGuests WHERE id=3";

if ($conn->query($sql) === TRUE) {


echo "Record deleted successfully";
} else {
echo "Error deleting record: " . $conn->error;
}

$conn->close();
?>

125
Example (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// sql to delete a record
$sql = "DELETE FROM MyGuests WHERE id=3";
if (mysqli_query($conn, $sql)) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " . mysqli_error($conn); }
mysqli_close($conn);
?>

Example (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
$password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// sql to delete a record
$sql = "DELETE FROM MyGuests WHERE id=3";
// use exec() because no results are returned
$conn->exec($sql);
echo "Record deleted successfully";}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>

126
After the record is deleted, the table will look like this:

Id Firstname Lastname email reg_date

1 John Doe john@example.com 2014-10-22 14:26:15

2 Mary Moe mary@example.com 2014-10-23 10:22:30

Update Data In a MySQL Table Using MySQLi


and PDO
The UPDATE statement is used to update existing records in a table:

UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value

Notice the WHERE clause in the UPDATE syntax: The WHERE clause
specifies which record or records that should be updated. If you omit the
WHERE clause, all records will be updated!

Let's look at the "MyGuests" table:

Id Firstname lastname email reg_date

1 John Doe john@example.com 2014-10-22 14:26:15

2 Mary Moe mary@example.com 2014-10-23 10:22:30

The following examples update the record with id=2 in the "MyGuests" table:

127
Example (MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
$conn->close();
?>

Example (MySQLi Procedural)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error()); }
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";
if (mysqli_query($conn, $sql)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn); }

mysqli_close($conn);
?>

128
Example (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
$password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";

// Prepare statement
$stmt = $conn->prepare($sql);

// execute the query


$stmt->execute();

// echo a message to say the UPDATE succeeded


echo $stmt->rowCount() . " records UPDATED successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>

After the record is updated, the table will look like this:

Id Firstname lastname email reg_date

1 John Doe john@example.com 2014-10-22 14:26:15

2 Mary Doe mary@example.com 2014-10-23 10:22:30

129
Limit Data Selections From a MySQL Database
MySQL provides a LIMIT clause that is used to specify the number of records to
return.

The LIMIT clause makes it easy to code multi page results or pagination with
SQL, and is very useful on large tables. Returning a large number of records can
impact on performance.

Assume we wish to select all records from 1 - 30 (inclusive) from a table called
"Orders". The SQL query would then look like this:

$sql = "SELECT * FROM Orders LIMIT 30";

When the SQL query above is run, it will return the first 30 records.

What if we want to select records 16 - 25 (inclusive)?

Mysql also provides a way to handle this: by using OFFSET.

The SQL query below says "return only 10 records, start on record 16 (OFFSET
15)":

$sql = "SELECT * FROM Orders LIMIT 10 OFFSET 15";

You could also use a shorter syntax to achieve the same result:

$sql = "SELECT * FROM Orders LIMIT 15, 10";

Notice that the numbers are reversed when you use a comma.

131
Complete user registration system using PHP and MySQL database

In this lecture, we will go through the complete process of creating a user registration
system where users can create an account by providing username, email and password,
login and logout using PHP and MySQL. I will also show you how you can make some
pages accessible only to logged in users. Any other user not logged in will not be able to
access the page.

The first thing we'll need to do is set up our database.

Create a database called registration. In the registration database, add a table


called users. The users table will take the following four fields.

 id
 username - varchar(100)
 email - varchar(100)
 password - varchar(100)

You can create this using a MySQL client like PHPMyAdmin.

131
Or you can create it on the MySQL prompt using the following SQL script:

And that's it with the database.

Now create a folder called registration in a directory accessible to our server. i.e
create the folder inside htdocs (if you are using XAMPP server) or inside www (if
you are using wampp server).

Inside the folder registration, create the following files:

Open these files up in a text editor of your choice. Mine is Notepad++ .

Registering a user

132
Open the register.php file and paste the following code in it:

regiser.php:

<?php include('server.php') ?>


<!DOCTYPE html>
<html>
<head>
<title>Registration system PHP and MySQL</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="header">
<h2>Register</h2>
</div>

<form method="post" action="register.php">


<?php include('errors.php'); ?>
<div class="input-group">
<label>Username</label>
<input type="text" name="username" value="<?php echo
$username; ?>">
</div>
<div class="input-group">
<label>Email</label>
<input type="email" name="email" value="<?php echo
$email; ?>">
</div>
<div class="input-group">
<label>Password</label>
<input type="password" name="password_1">
</div>
<div class="input-group">

133
<label>Confirm password</label>
<input type="password" name="password_2">
</div>
<div class="input-group">
<button type="submit" class="btn"
name="reg_user">Register</button>
</div>
<p>
Already a member? <a href="login.php">Sign in</a>
</p>
</form>
</body>
</html>

Nothing complicated so far right?

A few things to note here:

First is that our form's action attribute is set to register.php. This means that
when the form submit button is clicked, all the data in the form will be submitted
to the same page (register.php). The part of the code that receives this form
data is written in the server.php file and that's why we are including it at the
very top of the register.php file.

Notice also that we are including the errors.php file to display form errors. We
will come to that soon.

As you can see in the head section, we are linking to a style.css file. Open up
the style.css file and paste the following CSS in it:

* {
margin: 0px;
padding: 0px;
}
body {
font-size: 120%;

134
background: #F8F8FF;
}

.header {
width: 30%;
margin: 50px auto 0px;
color: white;
background: #5F9EA0;
text-align: center;
border: 1px solid #B0C4DE;
border-bottom: none;
border-radius: 10px 10px 0px 0px;
padding: 20px;
}
form, .content {
width: 30%;
margin: 0px auto;
padding: 20px;
border: 1px solid #B0C4DE;
background: white;
border-radius: 0px 0px 10px 10px;
}
.input-group {
margin: 10px 0px 10px 0px;
}
.input-group label {
display: block;
text-align: left;
margin: 3px;
}
.input-group input {
height: 30px;

135
width: 93%;
padding: 5px 10px;
font-size: 16px;
border-radius: 5px;
border: 1px solid gray;
}
.btn {
padding: 10px;
font-size: 15px;
color: white;
background: #5F9EA0;
border: none;
border-radius: 5px;
}
.error {
width: 92%;
margin: 0px auto;
padding: 10px;
border: 1px solid #a94442;
color: #a94442;
background: #f2dede;
border-radius: 5px;
text-align: left;
}
.success {
color: #3c763d;
background: #dff0d8;
border: 1px solid #3c763d;
margin-bottom: 20px;
}

Now the form looks beautiful.

136
Let's now write the code that will receive information submitted from the form and
store (register) the information in the database. As promised earlier, we do this in
the server.php file.

Open server.php and paste this code in it:

server.php

<?php
session_start();

// initializing variables
$username = "";
$email = "";
$errors = array();

// connect to the database


$db = mysqli_connect('localhost', 'root', '', 'registration');

// REGISTER USER
if (isset($_POST['reg_user'])) {
// receive all input values from the form
$username = mysqli_real_escape_string($db, $_POST['username']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$password_1 = mysqli_real_escape_string($db,
$_POST['password_1']);
$password_2 = mysqli_real_escape_string($db,
$_POST['password_2']);

// form validation: ensure that the form is correctly filled


...
// by adding (array_push()) corresponding error unto $errors
array
if (empty($username)) { array_push($errors, "Username is
required"); }
137
if (empty($email)) { array_push($errors, "Email is required");
}
if (empty($password_1)) { array_push($errors, "Password is
required"); }
if ($password_1 != $password_2) {
array_push($errors, "The two passwords do not match");
}

// first check the database to make sure


// a user does not already exist with the same username and/or
email
$user_check_query = "SELECT * FROM users WHERE
username='$username' OR email='$email' LIMIT 1";
$result = mysqli_query($db, $user_check_query);
$user = mysqli_fetch_assoc($result);

if ($user) { // if user exists


if ($user['username'] === $username) {
array_push($errors, "Username already exists");
}

if ($user['email'] === $email) {


array_push($errors, "email already exists");
}
}

// Finally, register user if there are no errors in the form


if (count($errors) == 0) {
$password = md5($password_1);//encrypt the password before
saving in the database

$query = "INSERT INTO users (username, email, password)

138
VALUES('$username', '$email', '$password')";
mysqli_query($db, $query);
$_SESSION['username'] = $username;
$_SESSION['success'] = "You are now logged in";
header('location: index.php');
}
}
// ...

Sessions are used to track logged in users and so we include a session_start()


at the top of the file.

The comments in the code pretty much explain everything, but I'll highlight a few
things here.

The if statement determines if the reg_user button on the registration form is


clicked. Remember, in our form, the submit button has a name attribute set to
reg_user and that is what we are referencing in the if statement.

All the data is received from the form and checked to make sure that the user
correctly filled the form. Passwords are also compared to make sure they match.

mysqli_real_escape_string function is used to create a legal SQL string that


you can use in an SQL statement. The given string is encoded to an escaped
SQL string, taking into account the current character set of the connection.

If no errors were encountered, the user is registered in the users table in the
database with a hashed password. The hashed password is for security reasons.
It ensures that even if a hacker manages to gain access to your database, they
would not be able to read your password.

But error messages are not displaying now because our errors.php file is still
empty. To display the errors, paste this code in the errors.php file.

139
<?php if (count($errors) > 0) : ?>
<div class="error">
<?php foreach ($errors as $error) : ?>
<p><?php echo $error ?></p>
<?php endforeach ?>
</div>
<?php endif ?>

When a user is registered in the database, they are immediately logged in and
redirected to the index.php page.

And that's it for registration. Let's look at user login.

Login user

Logging a user in is an even easier thing to do. Just open the login page and put
this code inside it:

<?php include('server.php') ?>


<!DOCTYPE html>
<html>
<head>
<title>Registration system PHP and MySQL</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="header">
<h2>Login</h2>
</div>

<form method="post" action="login.php">


<?php include('errors.php'); ?>
<div class="input-group">
<label>Username</label>

141
<input type="text" name="username" >
</div>
<div class="input-group">
<label>Password</label>
<input type="password" name="password">
</div>
<div class="input-group">
<button type="submit" class="btn"
name="login_user">Login</button>
</div>
<p>
Not yet a member? <a href="register.php">Sign up</a>
</p>
</form>
</body>
</html>

Everything on this page is quite similar to the register.php page.

Now the code that logs the user in is to be written in the same server.php file.
So open the server.php file and add this code at the end of the file:

// ...

// LOGIN USER
if (isset($_POST['login_user'])) {
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);

if (empty($username)) {
array_push($errors, "Username is required");
}
if (empty($password)) {
array_push($errors, "Password is required");

141
}

if (count($errors) == 0) {
$password = md5($password);
$query = "SELECT * FROM users WHERE username='$username'
AND password='$password'";
$results = mysqli_query($db, $query);
if (mysqli_num_rows($results) == 1) {
$_SESSION['username'] = $username;
$_SESSION['success'] = "You are now logged in";
header('location: index.php');
}else {
array_push($errors, "Wrong username/password
combination");
}
}
}

?>

Again all this does is check if the user has filled the form correctly, verifies that
their credentials match a record from the database and logs them in if it does.
After logging in, the user is redirected them to the index.php file with a success
message.

Now let's see what happens in the index.php file. Open it up and paste the
following code in it:

<?php
session_start();

if (!isset($_SESSION['username'])) {
$_SESSION['msg'] = "You must log in first";
header('location: login.php');
}

142
if (isset($_GET['logout'])) {
session_destroy();
unset($_SESSION['username']);
header("location: login.php");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>

<div class="header">
<h2>Home Page</h2>
</div>
<div class="content">
<!-- notification message -->
<?php if (isset($_SESSION['success'])) : ?>
<div class="error success" >
<h3>
<?php
echo $_SESSION['success'];
unset($_SESSION['success']);
?>
</h3>
</div>
<?php endif ?>

<!-- logged in user information -->


<?php if (isset($_SESSION['username'])) : ?>

143
<p>Welcome <strong><?php echo $_SESSION['username'];
?></strong></p>
<p> <a href="index.php?logout='1'" style="color:
red;">logout</a> </p>
<?php endif ?>
</div>

</body>
</html>

The first if statement checks if the user is already logged in. If they are not logged in,
they will be redirected to the login page. Hence this page is accessible to only logged in
users. If you'd like to make any page accessible only to logged in users, all you have
to do is place this if statement at the top of the file.

The second if statement checks if the user has clicked the logout button. If yes,
the system logs them out and redirects them back to the login page.

And that's it!

Now go on, customize it to suit your needs and build an awesome site. If you
have any worries or anything you need to clarify, leave it in the comments below
and help will come.

You can always support by sharing on social media or recommending my blog to


your friends and colleagues.

144

You might also like