What You Should Already Know
What You Should Already Know
PHP is a server scripting language, and is a powerful tool for making dynamic and
interactive Web pages quickly.
PHP is a widely-used, free, and efficient alternative to competitors such as Microsoft's
ASP.
PHP 5 Introduction
PHP scripts are executed on the server.
HTML
CSS
JavaScript
What is PHP?
PHP
PHP
PHP
PHP
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"
PHP
PHP
PHP
PHP
PHP
PHP
PHP
can
can
can
can
can
can
can
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
PHP
PHP
PHP
PHP
PHP 5 Installation
What Do I Need?
To start using PHP, you can:
Tip: To get PHP up and running immediately for Windows, you can:
Download WebMatrix
PHP 5 Syntax
The PHP script is executed on the server, and the plain HTML result is sent back to the
browser.
Example
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
Note: PHP statements are terminated by semicolon (;). The closing tag of a block of PHP
code also automatically implies a semicolon (so you do not have to have a semicolon
terminating the last line of a PHP block).
Comments in PHP
A comment in PHP code is a line that is not read/executed as part of the program. Its only
purpose is to be read by someone who is editing the code!
Comments are useful for:
To let others understand what you are doing - Comments let other programmers
understand what you were doing in each step (if you work in a group)
To remind yourself what you did - Most programmers have experienced coming back
to their own work a year or two later and having to re-figure out what they did.
Comments can remind you of what you were thinking when you wrote the code
Example
<!DOCTYPE html>
<html>
<body>
<?php
// This is a single line comment
# This is also a single line comment
/*
This is a multiple lines comment block
that spans over more than
one line
*/
?>
</body>
</html>
Example
<!DOCTYPE html>
<html>
<body>
<?php
ECHO "Hello World!<br>";
echo "Hello World!<br>";
EcHo "Hello World!<br>";
?>
</body>
</html>
However; in PHP, all variables are case-sensitive.
In the example below, only the first statement will display the value of the $color variable
(this is because $color, $COLOR, and $coLOR are treated as three different variables):
Example
<!DOCTYPE html>
<html>
<body>
<?php
$color="red";
echo "My car is " . $color . "<br>";
echo "My house is " . $COLOR . "<br>";
echo "My boat is " . $coLOR . "<br>";
?>
</body>
</html>
PHP 5 Variables
Variables are "containers" for storing information:
Example
<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>
PHP Variables
As with algebra, PHP variables can be used to hold values (x=5) or expressions (z=x+y).
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, 09, and _ )
Variable names are case sensitive ($y and $Y are two different variables)
Example
<?php
$txt="Hello world!";
$x=5;
$y=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.
local
global
static
Example
<?php
$x=5; // global scope
function myTest()
{
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
In the example above there are two variables $x and $y and a function myTest(). $x
is a global variable since it is declared outside the function and $y is a local variable since it
is created inside the function. When we output the values of the two variables inside the
myTest() function, it prints the value of $y as it is the locally declared, but cannot print the
value of $x since it is created outside the function. Then, when we output the values of the
two variables outside the myTest() function, it prints the value of $x, but cannot print the
value of $y since it is a local variable and it is created inside the myTest() function.
You can have local variables with the same name in different functions, because local variables are on
recognized by the function in which they are declared.
Example
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // outputs 15
?>
Example
<?php
$x=5;
$y=10;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y; // outputs 15
?>
Example
<?php
function myTest()
{
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
Then, each time the function is called, that variable will still have the information it
contained from the last time the function was called.
Tip: echo is marginally faster compared to print as echo does not return any value.
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.";
?>
Display Variables
The following example shows how to display strings and variables with the echo command:
Example
<?php
$txt1="Learn PHP";
$txt2="W3Schools.com";
$cars=array("Volvo","BMW","Toyota");
echo
echo
echo
echo
?>
$txt1;
"<br>";
"Study PHP at $txt2";
"My car is a {$cars[0]}";
Example
<?php
print "<h2>PHP is fun!</h2>";
print "Hello world!<br>";
print "I'm about to learn PHP!";
?>
Display Variables
The following example shows how to display strings and variables with the print command:
Example
<?php
$txt1="Learn PHP";
$txt2="W3Schools.com";
$cars=array("Volvo","BMW","Toyota");
print
print
print
print
?>
$txt1;
"<br>";
"Study PHP at $txt2";
"My car is a {$cars[0]}";
PHP Strings
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!";
echo $x;
echo "<br>";
$x = 'Hello world!';
echo $x;
?>
PHP Integers
An integer is a number without decimals.
Rules for integers:
In the following example we will test different numbers. The PHP var_dump() function
returns the data type and value of variables:
Example
<?php
$x = 5985;
var_dump($x);
echo "<br>";
$x = -345; // negative number
var_dump($x);
echo "<br>";
$x = 0x8C; // hexadecimal number
var_dump($x);
echo "<br>";
$x = 047; // octal number
var_dump($x);
?>
Example
<?php
$x = 10.365;
var_dump($x);
echo "<br>";
$x = 2.4e3;
var_dump($x);
echo "<br>";
$x = 8E-5;
var_dump($x);
?>
PHP Booleans
Booleans can be either 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 Arrays
An array stores multiple values in one single variable.
In the following example we create an array, and then use the PHP var_dump() function to
return the data type and value of the array:
Example
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
You will learn a lot more about arrays in later chapters of this tutorial.
PHP Objects
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.
We then define the data type in the object class, and then we use the data type in instances
of that class:
Example
<?php
class Car
{
var $color;
function Car($color="green")
{
$this->color = $color;
}
function what_color()
{
return $this->color;
}
}
?>
You will learn more about objects in a later chapter of this tutorial.
Example
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>
Example
<?php
echo strlen("Hello world!");
?>
The output of the code above will be: 12
Tip: strlen() is often used in loops or other functions, when it is important to know when a string ends. (i.e. in a
loop, we might want to stop the loop after the last character in a string).
The example below searches for the text "world" in the string "Hello world!":
Example
<?php
echo strpos("Hello world!","world");
?>
PHP Operators
This chapter shows the different operators that can be used in PHP scripts.
Name
Example
Result
Addition
$x + $y
Sum of $x and $y
Subtraction
$x - $y
Difference of $x and $y
Multiplication
$x * $y
Product of $x and $y
Division
$x / $y
Quotient of $x and $y
Modulus
$x % $y
Remainder of $x divided by $y
The example below shows the different results of using the different arithmetic operators:
Example
<?php
$x=10;
$y=6;
echo ($x
echo ($x
echo ($x
echo ($x
echo ($x
?>
+
*
/
%
$y);
$y);
$y);
$y);
$y);
//
//
//
//
//
outputs
outputs
outputs
outputs
outputs
16
4
60
1.6666666666667
4
Same as...
Description
x=y
x=y
x += y
x=x+y
Addition
x -= y
x=x-y
Subtraction
x *= y
x=x*y
Multiplication
x /= y
x=x/y
Division
x %= y
x=x%y
Modulus
the right
The example below shows the different results of using the different assignment operators:
Example
<?php
$x=10;
echo $x; // outputs 10
$y=20;
$y += 100;
echo $y; // outputs 120
$z=50;
$z -= 25;
echo $z; // outputs 25
$i=5;
$i *= 6;
echo $i; // outputs 30
$j=10;
$j /= 5;
echo $j; // outputs 2
$k=15;
$k %= 4;
echo $k; // outputs 3
?>
Name
Concatenation
Example
$txt1 = "Hello"
Result
Now $txt2 contains "Hello
world!"
world!"
.=
Concatenation
$txt1 = "Hello"
assignment
world!"
The example below shows the results of using the string operators:
Example
<?php
$a = "Hello";
$b = $a . " world!";
echo $b; // outputs Hello world!
$x="Hello";
$x .= " world!";
echo $x; // outputs Hello world!
?>
Name
Description
++$x
Pre-increment
$x++
Post-increment
--$x
Pre-decrement
$x--
Post-decrement
The example below shows the different results of using the different increment/decrement operators:
Example
<?php
$x=10;
echo ++$x; // outputs 11
$y=10;
echo $y++; // outputs 10
$z=5;
echo --$z; // outputs 4
$i=5;
echo $i--; // outputs 5
?>
Name
Example
Result
==
Equal
$x == $y
===
Identical
$x === $y
!=
Not equal
$x != $y
<>
Not equal
$x <> $y
!==
Not identical
$x !== $y
>
Greater than
$x > $y
<
Less than
$x < $y
>=
<=
$x >= $y
$x <= $y
True if $x is equal to $y
True if $x is equal to $y, and
they are of the same type
The example below shows the different results of using some of the comparison operators:
Example
<?php
$x=100;
$y="100";
var_dump($x == $y);
echo "<br>";
var_dump($x === $y);
echo "<br>";
var_dump($x != $y);
echo "<br>";
var_dump($x !== $y);
echo "<br>";
$a=50;
$b=90;
Name
Example
Result
and
And
$x and $y
or
Or
$x or $y
xor
Xor
$x xor $y
&&
And
$x && $y
||
Or
$x || $y
Not
!$x
Name
Example
Result
Union of $x and $y (but
Union
$x + $y
==
Equality
$x == $y
===
Identity
$x === $y
!=
Inequality
$x != $y
<>
Inequality
$x <> $y
!==
Non-identity
$x !== $y
The example below shows the different results of using the different array operators:
Example
<?php
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y; // union of $x and $y
var_dump($z);
var_dump($x == $y);
var_dump($x === $y);
var_dump($x != $y);
var_dump($x <> $y);
var_dump($x !== $y);
?>
if...else statement - executes some code if a condition is true and another code if
the condition is false
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!";
}
?>
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:
Example
<?php
$t=date("H");
if ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
Syntax
if (condition)
{
code to be executed if condition is true;
}
elseif (condition)
{
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!";
}
?>
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.
Example
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "Your favorite
break;
case "blue":
echo "Your favorite
break;
case "green":
echo "Your favorite
break;
default:
echo "Your favorite
}
?>
color is red!";
color is blue!";
color is green!";
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
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 will increase by 1 each time the loop runs ($x++;):
Example
<?php
$x=1;
while($x<=5)
{
echo "The number is: $x <br>";
$x++;
}
?>
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:
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 fails 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)
?>
Syntax
for (init counter; test counter; increment counter)
{
code to be executed;
}
Parameters:
test counter: Evaluated for each loop iteration. If it evaluates to TRUE, the loop
continues. If it evaluates to FALSE, the loop ends.
Example
<?php
for ($x=0; $x<=10; $x++)
{
echo "The number is: $x <br>";
}
?>
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>";
}
?>
PHP Functions
The real power of PHP comes from its functions; it has more than 1000 built-in functions.
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!
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
?>
Example
<?php
function familyName($fname)
{
echo "$fname Refsnes.<br>";
}
familyName("Jani");
familyName("Hege");
familyName("Stale");
familyName("Kai 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("Hege","1975");
familyName("Stle","1978");
familyName("Kai Jim","1983");
?>
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);
?>
Example
<?php
function sum($x,$y)
{
$z=$x+$y;
return $z;
}
echo "5 + 10 = " . sum(5,10) . "<br>";
PHP 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.
Example
<?php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>
Example
<?php
$cars=array("Volvo","BMW","Toyota");
echo count($cars);
?>
Example
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br>";
}
?>
Example
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>
Example
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
Example
<?php
$cars=array("Volvo","BMW","Toyota");
sort($cars);
?>
The following example sorts the elements of the $numbers array in ascending numerical order:
Example
<?php
$numbers=array(4,6,2,22,11);
sort($numbers);
?>
Example
<?php
$cars=array("Volvo","BMW","Toyota");
rsort($cars);
?>
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);
?>
Example
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
asort($age);
?>
Example
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
ksort($age);
?>
Example
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
arsort($age);
?>
Example
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
krsort($age);
?>
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
This chapter will explain some of the superglobals, and the rest will be explained in later chapters.
PHP $GLOBAL
$GLOBAL is a PHP super global variable which is used to access global variables from anywhere in the PHP script
(also from within functions or methods).
PHP stores all global variables in an array called $GLOBALS[index]. The index holds the name of the variable.
The example below shows how to use the super global variable $GLOBAL:
Example
<?php
$x = 75;
$y = 25;
function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
In the example above, since z is a variable present within the $GLOBALS array, it is also accessible form outside
the function!
PHP $_SERVER
$_SERVER is a PHP super global variable which holds information about headers, paths, and script locations.
The example below shows how to use some of the elements in $_SERVER:
Example
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
The following table lists the most important elements that can go inside $_SERVER:
Element/Code
$_SERVER['PHP_SELF']
$_SERVER['GATEWAY_INTERFACE']
$_SERVER['SERVER_ADDR']
$_SERVER['SERVER_NAME']
$_SERVER['SERVER_SOFTWARE']
$_SERVER['SERVER_PROTOCOL']
$_SERVER['REQUEST_METHOD']
$_SERVER['REQUEST_TIME']
$_SERVER['QUERY_STRING']
$_SERVER['HTTP_ACCEPT']
$_SERVER['HTTP_ACCEPT_CHARSET']
Description
Returns the filename of the currently executing script
Returns the version of the Common Gateway
Interface (CGI) the server is using
Returns the IP address of the host server
Returns the name of the host server (such as
www.w3schools.com)
Returns the server identification string (such as
Apache/2.2.24)
Returns the name and revision of the information
protocol (such as HTTP/1.1)
Returns the request method used to access the page
(such as POST)
Returns the timestamp of the start of the request
(such as 1377687496)
Returns the query string if the page is accessed via a
query string
Returns the Accept header from the current request
Returns the Accept_Charset header from the current
request (such as utf-8,ISO-8859-1)
$_SERVER['HTTP_HOST']
$_SERVER['HTTP_REFERER']
$_SERVER['HTTPS']
$_SERVER['REMOTE_ADDR']
$_SERVER['REMOTE_HOST']
$_SERVER['REMOTE_PORT']
$_SERVER['SCRIPT_FILENAME']
$_SERVER['SERVER_ADMIN']
$_SERVER['SERVER_PORT']
$_SERVER['SERVER_SIGNATURE']
$_SERVER['PATH_TRANSLATED']
$_SERVER['SCRIPT_NAME']
$_SERVER['SCRIPT_URI']
PHP $_REQUEST
PHP $_REQUEST is used to collect data after submitting an HTML form.
The example below shows a form with an input field and a submit button. When a user submits the data by clicking
on "Submit", the form data is sent to the file specified in the action attribute of the <form> tag. In this example, we
point to this file itself for processing form data. If you wish to use another PHP file to process form data, replace that
with the filename of your choice. Then, we can use the super global variable $_REQUEST to collect the value of the
input field:
Example
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
echo $name;
?>
</body>
</html>
PHP $_POST
PHP $_POST is widely used to collect form data after submitting an HTML form with method="post". $_POST is
also widely used to pass variables.
The example below shows a form with an input field and a submit button. When a user submits the data by clicking
on "Submit", the form data is sent to the file specified in the action attribute of the <form> tag. In this example, we
point to this file itself for processing form data. If you wish to use another PHP file to process form data, replace that
with the filename of your choice. Then, we can use the super global variable $_POST to collect the value of the
input field:
Example
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_POST['fname'];
echo $name;
?>
</body>
</html>
PHP $_GET
PHP $_GET can also be used to collect form data after submitting an HTML form with method="get".
Example
<html>
<body>
<?php
echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
?>
</body>
</html>
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>
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>
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>
</body>
</html>
The output could be something like this:
Welcome John
Your email address is [email protected]
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.
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:
The validation rules for the form above are as follows:
Field
Validation Rules
Name
Website
Comment
Gender
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>
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
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.
<script>location.href('http://www.hacked.com')</script>
- this would not be executed, because it would be saved as HTML escaped code, like this:
<script>location.href('http://www.hacked.com')</script>
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 look like this:
Example
<?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;
}
?>
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 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 do not enter any
data.
Validation Rules
Name
Website
Comment
Gender
{$website = "";}
else
{$website = test_input($_POST["website"]);}
if (empty($_POST["comment"]))
{$comment = "";}
else
{$comment = test_input($_POST["comment"]);}
if (empty($_POST["gender"]))
{$genderErr = "Gender is required";}
else
{$gender = test_input($_POST["gender"]);}
}
?>
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>
<label>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
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
The preg_match() function searches a string for pattern, returning true if the
pattern exists, and false otherwise.
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 syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$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-z09+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
{
$websiteErr = "Invalid URL";
}
}
if (empty($_POST["comment"]))
{$comment = "";}
else
{$comment = test_input($_POST["comment"]);}
if (empty($_POST["gender"]))
{$genderErr = "Gender is required";}
else
{$gender = test_input($_POST["gender"]);}
}
?>