Tutorial PHP
Tutorial PHP
What is MySQL?
MySQL
MySQL
MySQL
MySQL
MySQL
is a database server
is ideal for both small and large applications
supports standard SQL
compiles on a number of platforms
is free to download and use
PHP + MySQL
PHP combined with MySQL are cross-platform (you can develop in Windows and serve on a Unix
platform)
Why PHP?
PHP
PHP
PHP
PHP
Where to Start?
To get access to a web server with PHP support, you can:
Install Apache (or IIS) on your own server, install PHP, and MySQL
A PHP scripting block always starts with <?php and ends with ?>. A PHP scripting block can be placed
anywhere in the document.
On servers with shorthand support enabled you can start a scripting block with <? and end with ?>.
For maximum compatibility, we recommend that you use the standard form (<?php) rather than the
shorthand form.
<?php
?>
A PHP file normally contains HTML tags, just like an HTML file, and some PHP scripting code.
Below, we have an example of a simple PHP script which sends the text "Hello World" to the browser:
<html>
<body>
<?php
echo "Hello World";
?>
</body>
</html>
Each code line in PHP must end with a semicolon. The semicolon is a separator and is used to distinguish
one set of instructions from another.
There are two basic statements to output text with PHP: echo and print. In the example above we have
used the echo statement to output the text "Hello World".
Note: The file must have a .php extension. If the file has a .html extension, the PHP code will not be
executed.
Comments in PHP
In PHP, we use // to make a single-line comment or /* and */ to make a large comment block.
<html>
<body>
<?php
//This is a comment
/*
This is
a comment
block
*/
?>
</body>
</html>
Variables in PHP
Variables are used for storing a values, like text strings, numbers or arrays.
When a variable is declared, it can be used over and over again in your script.
All variables in PHP start with a $ sign symbol.
The correct way of declaring a variable in PHP:
$var_name = value;
New PHP programmers often forget the $ sign at the beginning of the variable. In that case it will not work.
Let's try creating a variable containing a string, and a variable containing a number:
<?php
$txt="Hello World!";
$x=16;
?>
A variable
A variable
A variable
separated
<?php
$txt="Hello World";
echo $txt;
?>
The output of the code above will be:
Hello World
Now, lets try to use some different functions and operators to manipulate the string.
<?php
$txt1="Hello World!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
The output of the code above will be:
<?php
echo strlen("Hello world!");
?>
The output of the code above will be:
12
The length of a string is often used in loops or other functions, when it is important to know when the string
ends. (i.e. in a loop, we would want to stop the loop after the last character in the string).
<?php
echo strpos("Hello world!","world");
?>
The output of the code above will be:
6
The position of the string "world" in our string is position 6. The reason that it is 6 (and not 7), is that the
first position in the string is 0, and not 1.
PHP Operators
This section lists the different operators used in PHP.
Arithmetic Operators
Operator
Description
Example
Result
Addition
x=2
x+2
Subtraction
x=2
5-x
Multiplication
x=4
x*5
20
Division
15/5
5/2
3
2.5
5%2
10%8
10%2
1
2
0
++
Increment
x=5
x++
x=6
--
Decrement
x=5
x--
x=4
Assignment Operators
Operator
Example
Is The Same As
x=y
x=y
+=
x+=y
x=x+y
-=
x-=y
x=x-y
*=
x*=y
x=x*y
/=
x/=y
x=x/y
.=
x.=y
x=x.y
%=
x%=y
x=x%y
Comparison Operators
Operator
Description
Example
==
is equal to
!=
is not equal
>
is greater than
<
is less than
>=
<=
Logical Operators
Operator
Descriptio
n
&&
and
Example
x=6
y=3
(x < 10 && y > 1) returns true
||
or
x=6
y=3
(x==5 || y==5) returns false
not
x=6
y=3
!(x==y) returns true
Conditional Statements
Very often when you write code, you want to perform different actions for different
decisions.
You can use conditional statements in your code to do this.
In PHP we have the following conditional statements:
The if Statement
Use the if statement to execute some code only if a specified condition is true.
Syntax
if (condition) code to be executed if condition
is true;
The following example will output "Have a nice weekend!" if the current day is Friday:
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri") echo "Have a nice weekend!";
?>
</body>
</html>
Notice that there is no ..else.. in this syntax. You tell the browser to execute some code only if the
specified condition is true.
Syntax
if (condition)
code to be executed if condition is true;
else
code to be executed if condition is false;
Example
The following example will output "Have a nice weekend!" if the current day is Friday, otherwise it will output
"Have a nice day!":
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
echo "Have a nice weekend!";
else
echo "Have a nice day!";
?>
</body>
</html>
If more than one line should be executed if a condition is true/false, the lines should be enclosed within
curly braces:
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
{
echo "Hello!<br />";
echo "Have a nice weekend!";
echo "See you on Monday!";
}
?>
</body>
</html>
Syntax
if (condition)
code to be executed if condition is true;
elseif (condition)
code to be executed if condition is true;
else
code to be executed if condition is false;
Example
The following example will output "Have a nice weekend!" if the current day is Friday, and "Have a nice
Sunday!" if the current day is Sunday. Otherwise it will output "Have a nice day!":
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
echo "Have a nice weekend!";
elseif ($d=="Sun")
echo "Have a nice Sunday!";
else
echo "Have a nice day!";
?>
</body>
</html>
Syntax
switch (n)
{
case label1:
code to be executed if n=label1;
break;
case label2:
code to be executed if n=label2;
break;
default:
code to be executed if n is different from both label1 and label2;
}
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
<html>
<body>
<?php
switch ($x)
{
case 1:
echo "Number 1";
break;
case 2:
echo "Number 2";
break;
case 3:
echo "Number 3";
break;
default:
echo "No number between 1 and 3";
}
?>
</body>
</html>
What is an Array?
You have already learnt that a variable is a storage area holding numbers and text. The problem is, a
variable will hold only one value.
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="Saab";
$cars2="Volvo";
$cars3="BMW";
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 best solution here is to use an array!
An array can hold all your variable values under a single name. And you can access the values by referring
to the array name.
Each element in the array has its own index so that it can be easily accessed.
In PHP, there are three kind of arrays:
Numeric Arrays
A numeric array stores each array element with a numeric index.
There are two methods to create a numeric array.
1. In the following example the index are automatically assigned (the index starts at 0):
$cars=array("Saab","Volvo","BMW","Toyota");
2. In the following example we assign the index manually:
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
Example
In the following example you access the variable values by referring to the array name and index:
<?php
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
echo $cars[0] . " and " . $cars[1] . " are Swedish cars.";
?>
The code above will output:
Associative Arrays
An associative array, each ID key is associated with a value.
When storing data about specific named values, a numerical array is not always the best way to do it.
With associative arrays we can use the values as keys and assign values to them.
Example 1
In this example we use an array to assign ages to the different persons:
Example 2
This example is the same as example 1, but shows a different way of creating the array:
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
The ID keys can be used in a script:
<?php
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
echo "Peter is " . $ages['Peter'] . " years old.";
?>
The code above will output:
Multidimensional Arrays
In a multidimensional array, each element in the main array can also be an array. And each element in the
sub-array can be an array, and so on.
Example
In this example we create a multidimensional array, with automatically assigned ID keys:
$families = array
(
"Griffin"=>array
(
"Peter",
"Lois",
"Megan"
),
"Quagmire"=>array
(
"Glenn"
),
"Brown"=>array
(
"Cleveland",
"Loretta",
"Junior"
)
);
The array above would look like this if written to the output:
Array
(
[Griffin] => Array
(
[0] => Peter
[1] => Lois
[2] => Megan
)
[Quagmire] => Array
(
[0] => Glenn
)
[Brown] => Array
(
[0] => Cleveland
[1] => Loretta
[2] => Junior
)
)
Example 2
Lets try displaying a single value from the array above:
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 lines in a script we can use loops to perform a task like this.
Syntax
while (condition)
{
code to be executed;
}
Example
The example below defines a loop that starts with i=1. The loop will continue to run as long as i is less than,
or equal to 5. i will increase by 1 each time the loop runs:
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br />";
$i++;
}
?>
</body>
</html>
Output:
The
The
The
The
The
number
number
number
number
number
is
is
is
is
is
1
2
3
4
5
Syntax
do
{
code to be executed;
}
while (condition);
Example
The example below defines a loop that starts with i=1. It will then increment i with 1, and write some
output. Then the condition is checked, and the loop will continue to run as long as i is less than, or equal to
5:
<html>
<body>
<?php
$i=1;
do
{
$i++;
echo "The number is " . $i . "<br />";
}
while ($i<=5);
?>
</body>
</html>
Output:
The
The
The
The
The
number
number
number
number
number
is
is
is
is
is
2
3
4
5
6
for Loop
The for loop is used when you know in advance how many times the script should run.
Syntax
for (init; condition; increment)
{
code to be executed;
}
Parameters:
init: Mostly used to set a counter (but can be any code to be executed once at the beginning of the
loop)
condition: Evaluated for each loop iteration. If it evaluates to TRUE, the loop continues. If it
evaluates to FALSE, the loop ends.
increment: Mostly used to increment a counter (but can be any code to be executed at the end of
the loop)
Note: Each of the parameters above can be empty, or have multiple expressions (separated by commas).
Example
The example below defines a loop that starts with i=1. The loop will continue to run as long as i is less than,
or equal to 5. i will increase by 1 each time the loop runs:
<html>
<body>
<?php
for ($i=1; $i<=5; $i++)
{
echo "The number is " . $i . "<br />";
}
?>
</body>
</html>
Output:
The
The
The
The
The
number
number
number
number
number
is
is
is
is
is
1
2
3
4
5
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) - so on the next loop iteration, you'll be looking at the next array value.
Example
The following example demonstrates a loop that will print the values of the given array:
<html>
<body>
<?php
$x=array("one","two","three");
foreach ($x as $value)
{
echo $value . "<br />";
}
?>
</body>
</html>
Output:
one
two
three
d the foreach loop will be explained in the next chapter
PHP Functions
In this chapter we will show you how to create your own functions.
To keep the browser from executing a script when the page loads, you can put your script into a function.
A function will be executed by a call to the function.
You may call a function from anywhere within a page.
Syntax
function functionName()
{
code to be executed;
}
PHP function guidelines:
Give the function a name that reflects what the function does
The function name can start with a letter or underscore (not a number)
Example
A simple function that writes my name when it is called:
<html>
<body>
<?php
function writeName()
{
echo "Kai Jim Refsnes";
}
echo "My name is ";
writeName();
?>
</body>
</html>
Output:
Example 1
The following example will write different first names, but equal last name:
<html>
<body>
<?php
function writeName($fname)
{
echo $fname . " Refsnes.<br />";
}
echo "My name is ";
writeName("Kai Jim");
echo "My sister's name is ";
writeName("Hege");
echo "My brother's name is ";
writeName("Stale");
?>
</body>
</html>
Output:
Example 2
The following function has two parameters:
<html>
<body>
<?php
function writeName($fname,$punctuation)
{
echo $fname . " Refsnes" . $punctuation . "<br />";
}
echo "My name is ";
writeName("Kai Jim",".");
echo "My sister's name is ";
writeName("Hege","!");
echo "My brother's name is ";
writeName("Stle","?");
?>
</body>
</html>
Output:
Example
<html>
<body>
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
</body>
</html>
Output:
1 + 16 = 17
The PHP $_GET and $_POST variables are used to retrieve information from forms, like user
input.
Example
The example below contains an HTML form with two input fields and a submit button:
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
When a user fills out the form above and click on the submit button, the form data is sent to a PHP file,
called "welcome.php":
"welcome.php" looks like this:
<html>
<body>
Welcome <?php echo $_POST["fname"]; ?>!<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
Output could be something like this:
Welcome John!
You are 28 years old.
The PHP $_GET and $_POST functions will be explained in the next chapters.
Form Validation
User input should be validated on the browser whenever possible (by client scripts). Browser validation is
faster and reduces the server load.
You should consider server validation if the user input will be inserted into a database. A good way to
validate a form on the server is to post the form to itself, instead of jumping to a different page. The user
will then get the error messages on the same page as the form. This makes it easier to discover the error.
Example
<form action="welcome.php" method="get">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
When the user clicks the "Submit" button, the URL sent to the server could look something like this:
http://www.w3schools.com/welcome.php?fname=Peter&age=37
The "welcome.php" file can now use the $_GET function to collect form data (the names of the form fields
will automatically be the keys in the $_GET array):
The built-in $_POST function is used to collect values in a form with method="post".
Example
<form action="welcome.php" method="post">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
When the user clicks the "Submit" button, the URL will look like this:
http://www.w3schools.com/welcome.php
The "welcome.php" file can now use the $_POST function to collect form data (the names of the form fields
will automatically be the keys in the $_POST array):
Example
Welcome <?php echo $_REQUEST["fname"]; ?>!<br />
Syntax
date(format,timestamp)
Parameter
Format
timesta
mp
Description
A list of all the characters that can be used in the format parameter, can be found in our PHP Date reference.
Other characters, like"/", ".", or "-" can also be inserted between the letters to add additional formatting:
<?php
echo date("Y/m/d") . "<br />";
echo date("Y.m.d") . "<br />";
echo date("Y-m-d")
?>
The output of the code above could be something like this:
2009/05/11
2009.05.11
2009-05-11
The Unix timestamp contains the number of seconds between the Unix Epoch (January 1 1970 00:00:00
GMT) and the time specified.
<?php
$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
?>
The output of the code above could be something like this:
Tomorrow is 2009/05/12
These two functions are used to create functions, headers, footers, or elements that will be reused on
multiple pages.
Server side includes saves a lot of work. This means that you can create a standard header, footer, or menu
file for all your web pages. When the header needs to be updated, you can only update the include file, or
when you add a new page to your site, you can simply change the menu file (instead of updating the links
on all your web pages).
Example 1
Assume that you have a standard header file, called "header.php". To include the header file in a page, use
the include() function:
<html>
<body>
<?php include("header.php"); ?>
<h1>Welcome to my home page!</h1>
<p>Some text.</p>
</body>
</html>
Example 2
Assume we have a standard menu file, called "menu.php", that should be used on all pages:
<a
<a
<a
<a
<a
<a
href="/default.php">Home</a>
href="/tutorials.php">Tutorials</a>
href="/references.php">References</a>
href="/examples.php">Examples</a>
href="/about.php">About Us</a>
href="/contact.php">Contact Us</a>
All pages in the Web site should include this menu file. Here is how it can be done:
<html>
<body>
<div class="leftmenu">
<?php include("menu.php"); ?>
</div>
<h1>Welcome to my home page.</h1>
<p>Some text.</p>
</body>
</html>
If you look at the source code of the page above (in a browser), it will look like this:
<html>
<body>
<div class="leftmenu">
<a href="/default.php">Home</a>
<a href="/tutorials.php">Tutorials</a>
<a href="/references.php">References</a>
<a href="/examples.php">Examples</a>
<a href="/about.php">About Us</a>
<a href="/contact.php">Contact Us</a>
</div>
<html>
<body>
<?php
require("wrongFile.php");
echo "Hello World!";
?>
</body>
</html>
Error message:
Opening a File
The fopen() function is used to open files in PHP.
The first parameter of this function contains the name of the file to be opened and the second parameter
specifies in which mode the file should be opened:
<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>
The file may be opened in one of the following modes:
Modes
R
r+
W
w+
A
a+
X
x+
Description
Read only. Starts at the beginning of the file
Read/Write. Starts at the beginning of the file
Write only. Opens and clears the contents of file; or creates a new file if it doesn't exist
Read/Write. Opens and clears the contents of file; or creates a new file if it doesn't exist
Append. Opens and writes to the end of the file or creates a new file if it doesn't exist
Read/Append. Preserves file content by writing to the end of the file
Write only. Creates a new file. Returns FALSE and an error if file already exists
Read/Write. Creates a new file. Returns FALSE and an error if file already exists
Note: If the fopen() function is unable to open the specified file, it returns 0 (false).
Example
The following example generates a message if the fopen() function is unable to open the specified file:
<html>
<body>
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
?>
</body>
</html>
Closing a File
The fclose() function is used to close an open file:
<?php
$file = fopen("test.txt","r");
//some code to be executed
fclose($file);
?>
Check End-of-file
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.
Note: You cannot read from files opened in w, a, and x mode!
Example
The example below reads a file line by line, until the end of file is reached:
<?php
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
Example
The example below reads a file character by character, until the end of file is reached:
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
Notice the following about the HTML form above:
The enctype attribute of the <form> tag specifies which content-type to use when submitting the
form. "multipart/form-data" is used when a form requires binary data, like the contents of a file, to
be uploaded
The type="file" attribute of the <input> tag specifies that the input should be processed as a file.
For example, when viewed in a browser, there will be a browse-button next to the input field
Note: Allowing users to upload files is a big security risk. Only permit trusted users to perform file uploads.
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
By using the global PHP $_FILES array you can upload files from a client computer to the remote server.
The first parameter is the form's input name and the second index can be either "name", "type", "size",
"tmp_name" or "error". Like this:
$_FILES["file"]["tmp_name"] - the name of the temporary copy of the file stored on the server
Restrictions on Upload
In this script we add some restrictions to the file upload. The user may only upload .gif or .jpeg files and the
file size must be under 20 kb:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>
Note: For IE to recognize jpg files the type must be pjpeg, for FireFox it must be jpeg.
The examples above create a temporary copy of the uploaded files in the PHP temp folder on the server.
The temporary copied files disappears when the script ends. To store the uploaded file we need to copy it to
a different location:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
The script above checks if the file already exists, if it does not, it copies the file to the specified folder.
Note: This example saves the file to a new folder called "upload"
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.
Syntax
setcookie(name, value, expire, path, domain);
Example 1
In the example below, we will create a cookie named "user" and assign the value "Alex Porter" to it. We also
specify that the cookie should expire after one hour:
<?php
setcookie("user", "Alex Porter", time()+3600);
?>
<html>
.....
Note: The value of the cookie is automatically URLencoded when sending the cookie, and automatically
decoded when received (to prevent URLencoding, use setrawcookie() instead).
Example 2
You can also set the expiration time of the cookie in another way. It may be easier than using seconds.
<?php
$expire=time()+60*60*24*30;
setcookie("user", "Alex Porter", $expire);
?>
<html>
.....
In the example above the expiration time is set to a month (60 sec * 60 min * 24 hours * 30 days).
<?php
// Print a cookie
echo $_COOKIE["user"];
// A way to view all cookies
print_r($_COOKIE);
?>
In the following example we use the isset() function to find out if a cookie has been set:
<html>
<body>
<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
echo "Welcome guest!<br />";
?>
</body>
</html>
<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
Retrieve the values in the "welcome.php" file like this:
<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
A PHP session variable is used to store information about, or change settings for a user
session. Session variables hold information about one single user, and are available to all
pages in one application.
The correct way to store and retrieve session variables is to use the PHP $_SESSION variable:
<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>
Output:
Pageviews=1
In the example below, we create a simple page-views counter. The isset() function checks if the "views"
variable has already been set. If "views" has been set, we can increment our counter. If "views" doesn't
exist, we create a "views" variable, and set it to 1:
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
Destroying a Session
If you wish to delete some session data, you can use the unset() or the session_destroy() function.
The unset() function is used to free the specified session variable:
<?php
unset($_SESSION['views']);
?>
You can also completely destroy the session by calling the session_destroy() function:
<?php
session_destroy();
?>
Note: session_destroy() will reset your session and you will lose all your stored session data.
The PHP mail() function is used to send emails from inside a script.
Syntax
mail(to,subject,message,headers,parameters)
Parameter
Description
To
Subject
Required. Specifies the subject of the email. Note: This parameter cannot contain any
newline characters
message
Required. Defines the message to be sent. Each line should be separated with a LF
(\n). Lines should not exceed 70 characters
headers
Optional. Specifies additional headers, like From, Cc, and Bcc. The additional headers
should be separated with a CRLF (\r\n)
parameters
Note: For the mail functions to be available, PHP requires an installed and working email system. The
program to be used is defined by the configuration settings in the php.ini file. Read more in our PHP Mail
reference.
The simplest way to send an email with PHP is to send a text email.
In the example below we first declare the variables ($to, $subject, $message, $from, $headers), then we
use the variables in the mail() function to send an e-mail:
<?php
$to = "[email protected]";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "[email protected]";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail( "[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
This is how the example above works:
If it is not set (like when the page is first visited); output the HTML form
If it is set (after the form is filled out); send the email from the form
When submit is pressed after the form is filled out, the page reloads, sees that the email input is
set, and sends the email
Note: This is the simplest way to send e-mail, but it is not secure. In the next chapter of this tutorial you
can read more about vulnerabilities in e-mail scripts, and how to validate user input to make it more secure.
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
The problem with the code above is that unauthorized users can insert data into the mail headers via the
input form.
What happens if the user adds the following text to the email input field in the form?
[email protected]%0ACc:[email protected]
%0ABcc:[email protected],[email protected],
[email protected],[email protected]
%0ABTo:[email protected]
The mail() function puts the text above into the mail headers as usual, and now the header has an extra
Cc:, Bcc:, and To: field. When the user clicks the submit button, the e-mail will be sent to all of the
addresses above!
<html>
<body>
<?php
function spamcheck($field)
{
//filter_var() sanitizes the e-mail
//address using FILTER_SANITIZE_EMAIL
$field=filter_var($field, FILTER_SANITIZE_EMAIL);
//filter_var() validates the e-mail
//address using FILTER_VALIDATE_EMAIL
if(filter_var($field, FILTER_VALIDATE_EMAIL))
{
return TRUE;
}
else
{
return FALSE;
}
}
if (isset($_REQUEST['email']))
{//if "email" is filled out, proceed
//check if the email address is invalid
$mailcheck = spamcheck($_REQUEST['email']);
if ($mailcheck==FALSE)
{
echo "Invalid input";
}
else
{//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
}
else
{//if "email" is not filled out, display the form
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
In the code above we use PHP filters to validate input:
The FILTER_SANITIZE_EMAIL filter removes all illegal e-mail characters from a string
The default error handling in PHP is very simple. An error message with filename, line
number and a message describing the error is sent to the browser.
When creating scripts and web applications, error handling is an important part. If your code lacks error
checking code, your program may look very unprofessional and you may be open to security risks.
This tutorial contains some of the most common error checking methods in PHP.
We will show different error handling methods:
Error reporting
<?php
$file=fopen("welcome.txt","r");
?>
If the file does not exist you might get an error like this:
<?php
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
Now if the file does not exist you get an error like this:
Creating a custom error handler is quite simple. We simply create a special function that can be called when
an error occurs in PHP.
This function must be able to handle a minimum of two parameters (error level and error message) but can
accept up to five parameters (optionally: file, line-number, and the error context):
Syntax
error_function(error_level,error_message,
error_file,error_line,error_context)
Parameter
error_level
error_message
error_file
error_line
error_context
Description
Required. Specifies the error report level for the user-defined error. Must be a value
number. See table below for possible error report levels
Required. Specifies the error message for the user-defined error
Optional. Specifies the filename in which the error occurred
Optional. Specifies the line number in which the error occurred
Optional. Specifies an array containing every variable, and their values, in use when the
error occurred
Description
E_WARNING
E_NOTICE
Run-time notices. The script found something that might be an error, but could
also happen when running a script normally
E_USER_ERRO
R
Fatal user-generated error. This is like an E_ERROR set by the programmer using
the PHP function trigger_error()
8
256
512
E_USER_WARNIN
Non-fatal
1024
4096
8191
usergenerated
warning. This
is like an
E_WARNING
set by the
programmer
using the PHP
function
trigger_error(
)
E_USER_NOTICE
E_RECOVERABLE_ERRO
R
E_ALL
All errors and warnings, except level E_STRICT (E_STRICT will be part of
E_ALL as of PHP 6.0)
set_error_handler("customError");
Since we want our custom function to handle all errors, the set_error_handler() only needed one parameter,
a second parameter could be added to specify an error level.
Example
Testing the error handler by trying to output variable that does not exist:
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
The output of the code above should be something like this:
Trigger an Error
In a script where users can input data it is useful to trigger errors when an illegal input occurs. In PHP, this
is done by the trigger_error() function.
Example
In this example an error occurs if the "test" variable is bigger than "1":
<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>
The output of the code above should be something like this:
E_USER_ERROR - Fatal user-generated run-time error. Errors that can not be recovered from.
Execution of the script is halted
E_USER_NOTICE - Default. User-generated run-time notice. The script found something that might
be an error, but could also happen when running a script normally
Example
In this example an E_USER_WARNING occurs if the "test" variable is bigger than "1". If an
E_USER_WARNING occurs we will use our custom error handler and end the script:
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script";
die();
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
The output of the code above should be something like this:
Error Logging
By default, PHP sends an error log to the servers logging system or a file, depending on how the error_log
configuration is set in the php.ini file. By using the error_log() function you can send error logs to a specified
file or a remote destination.
Sending errors messages to yourself by e-mail can be a good way of getting notified of specific errors.
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"[email protected]","From: [email protected]");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
The output of the code above should be something like this:
What is an Exception
With PHP 5 came a new object oriented way of dealing with errors.
Exception handling is used to change the normal flow of the code execution if a specified error (exceptional)
condition occurs. This condition is called an exception.
This is what normally happens when an exception is triggered:
The code execution will switch to a predefined (custom) exception handler function
Depending on the situation, the handler may then resume the execution from the saved code state,
terminate the script execution or continue the script from a different location in the code
We will show different error handling methods:
Multiple exceptions
Re-throwing an exception
<?php
//create function with an exception
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//trigger exception
checkNum(2);
?>
The code above will get an error like this:
Fatal error:
with message
Stack trace:
checkNum(28)
<?php
//create function with an exception
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//trigger exception in a "try" block
try
{
checkNum(2);
//If the exception is thrown, this text will not be shown
echo 'If you see this, the number is 1 or below';
}
//catch exception
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
The code above will get an error like this:
Example explained:
The code above throws an exception and catches it:
1. The checkNum() function is created. It checks if a number is greater than 1. If it is, an exception is
thrown
2. The checkNum() function is called in a "try" block
3. The exception within the checkNum() function is thrown
4. The "catch" block retrives the exception and creates an object ($e) containing the exception
information
5. The error message from the exception is echoed by calling $e->getMessage() from the exception
object
However, one way to get around the "every throw must have a catch" rule is to set a top level exception
handler to handle errors that slip through.
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "[email protected]";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>
The new class is a copy of the old exception class with an addition of the errorMessage() function. Since it is
a copy of the old class, and it inherits the properties and methods from the old class, we can use the
exception class methods like getLine() and getFile() and getMessage().
Example explained:
The code above throws an exception and catches it with a custom exception class:
1. The customException() class is created as an extension of the old exception class. This way it
inherits all methods and properties from the old exception class
2. The errorMessage() function is created. This function returns an error message if an e-mail address
is invalid
3.
4.
5.
The $email variable is set to a string that is not a valid e-mail address
The "try" block is executed and an exception is thrown since the e-mail address is invalid
The "catch" block catches the exception and displays the error message
Multiple Exceptions
It is possible for a script to use multiple exceptions to check for multiple conditions.
It is possible to use several if..else blocks, a switch, or nest multiple exceptions. These exceptions can use
different exception classes and return different error messages:
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "[email protected]";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
throw new Exception("$email is an example e-mail");
}
}
catch (customException $e)
{
echo $e->errorMessage();
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
Example explained:
The code above tests two conditions and throws an exception if any of the conditions are not met:
1. The customException() class is created as an extension of the old exception class. This way it
inherits all methods and properties from the old exception class
2. The errorMessage() function is created. This function returns an error message if an e-mail address
is invalid
3. The $email variable is set to a string that is a valid e-mail address, but contains the string
"example"
4. The "try" block is executed and an exception is not thrown on the first condition
5. The second condition triggers an exception since the e-mail contains the string "example"
6. The "catch" block catches the exception and displays the correct error message
If there was no customException catch, only the base exception catch, the exception would be handled there
Re-throwing Exceptions
Sometimes, when an exception is thrown, you may wish to handle it differently than the standard way. It is
possible to throw an exception a second time within a "catch" block.
A script should hide system errors from users. System errors may be important for the coder, but is of no
interest to the user. To make things easier for the user you can re-throw the exception with a user friendly
message:
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = $this->getMessage().' is not a valid E-Mail address.';
return $errorMsg;
}
}
$email = "[email protected]";
try
{
try
{
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
//throw exception if email is not valid
throw new Exception($email);
}
}
catch(Exception $e)
{
//re-throw exception
throw new customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>
Example explained:
The code above tests if the email-address contains the string "example" in it, if it does, the exception is rethrown:
1. The customException() class is created as an extension of the old exception class. This way it
inherits all methods and properties from the old exception class
2. The errorMessage() function is created. This function returns an error message if an e-mail address
is invalid
3. The $email variable is set to a string that is a valid e-mail address, but contains the string
"example"
4. The "try" block contains another "try" block to make it possible to re-throw the exception
5. The exception is triggered since the e-mail contains the string "example"
6. The "catch" block catches the exception and re-throws a "customException"
7. The "customException" is caught and displays an error message
If the exception is not caught in its current "try" block, it will search for a catch block on "higher levels".
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>
The output of the code above should be something like this:
Each try block or "throw" must have at least one corresponding catch block
Exceptions can be thrown (or re-thrown) in a catch block within a try block
A simple rule: If you throw something, you have to catch it.
A PHP filter is used to validate and filter data coming from insecure sources.
To test, validate and filter user input or custom data is an important part of any web application.
The PHP filter extension is designed to make data filtering easier and quicker.
Almost all web applications depend on external input. Usually this comes from a user or another application
(like a web service). By using filters you can be sure your application gets the correct input type.
You should always filter all external data!
Input filtering is one of the most important application security issues.
What is external data?
Cookies
Server variables
filter_input_array - Get several input variables and filter them with the same or different filters
In the example below, we validate an integer using the filter_var() function:
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>
The code above uses the "FILTER_VALIDATE_INT" filter to filter the variable. Since the integer is valid, the
output of the code above will be: "Integer is valid".
If we try with a variable that is not an integer (like "123abc"), the output will be: "Integer is not valid".
For a complete list of functions and filters, visit our PHP Filter Reference.
Options and flags are used to add additional filtering options to the specified filters.
Different filters have different options and flags.
In the example below, we validate an integer using the filter_var() and the "min_range" and "max_range"
options:
<?php
$var=300;
$int_options = array(
"options"=>array
(
"min_range"=>0,
"max_range"=>256
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>
Like the code above, options must be put in an associative array with the name "options". If a flag is used it
does not need to be in an array.
Since the integer is "300" it is not in the specified range, and the output of the code above will be: "Integer
is not valid".
For a complete list of functions and filters, visit our PHP Filter Reference. Check each filter to see what
options and flags are available.
Validate Input
Let's try validating input from a form.
The first thing we need to do is to confirm that the input data we are looking for exists.
Then we filter the input data using the filter_input() function.
In the example below, the input variable "email" is sent to the PHP page:
<?php
if(!filter_has_var(INPUT_GET, "email"))
{
echo("Input type does not exist");
}
else
{
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
{
echo "E-Mail is not valid";
}
else
{
echo "E-Mail is valid";
}
}
?>
Example Explained
The example above has an input (email) sent to it using the "GET" method:
1. Check if an "email" input variable of the "GET" type exist
2. If the input variable exists, check if it is a valid e-mail address
Sanitize Input
<?php
if(!filter_has_var(INPUT_POST, "url"))
{
echo("Input type does not exist");
}
else
{
$url = filter_input(INPUT_POST,
"url", FILTER_SANITIZE_URL);
}
?>
Example Explained
The example above has an input (url) sent to it using the "POST" method:
1. Check if the "url" input of the "POST" type exists
2. If the input variable exists, sanitize (take away invalid characters) and store it in the $url variable
If the input variable is a string like this "http://www.W3Schools.com/", the $url variable after the
sanitizing will look like this:
http://www.W3Schools.com/
<?php
$filters = array
(
"name" => array
(
"filter"=>FILTER_SANITIZE_STRING
),
"age" => array
(
"filter"=>FILTER_VALIDATE_INT,
"options"=>array
(
"min_range"=>1,
"max_range"=>120
)
),
"email"=> FILTER_VALIDATE_EMAIL,
);
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"])
{
echo("Age must be a number between 1 and 120.<br />");
}
elseif(!$result["email"])
{
echo("E-Mail is not valid.<br />");
}
else
{
echo("User input is valid");
}
?>
Example Explained
The example above has three inputs (name, age and email) sent to it using the "GET" method:
1. Set an array containing the name of input variables and the filters used on the specified input
variables
2. Call the filter_input_array() function with the GET input variables and the array we just set
3. Check the "age" and "email" variables in the $result variable for invalid inputs. (If any of the input
variables are invalid, that input variable will be FALSE after the filter_input_array() function)
The second parameter of the filter_input_array() function can be an array or a single filter ID.
If the parameter is a single filter ID all values in the input array are filtered by the specified filter.
If the parameter is an array it must follow these rules:
Must be an associative array containing an input variable as an array key (like the "age" input
variable)
The array value must be a filter ID or an array specifying the filter, flags and options
It is possible to call a user defined function and use it as a filter using the FILTER_CALLBACK filter. This way,
we have full control of the data filtering.
You can create your own user defined function or use an existing PHP function
The function you wish to use to filter is specified the same way as an option is specified. In an associative
array with the name "options"
In the example below, we use a user created function to convert all "_" to whitespaces:
<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>
The result from the code above should look like this:
Example Explained
3. What is MySQL?
4.
5.
6.
7.
8.
MySQL is a database.
The data in MySQL is stored in database objects called tables.
A table is a collections of related data entries and it consists of columns and rows.
Databases are useful when storing information categorically. A company may have a database with
the following tables: "Employees", "Products", "Customers" and "Orders".
9. Database Tables
10. A database most often contains one or more tables. Each table is identified by a name (e.g.
"Customers" or "Orders"). Tables contain records (rows) with data.
11. Below is an example of a table called "Persons":
LastName
FirstName
Address
City
Hansen
Ola
Timoteivn 10
Sandnes
Svendson
Tove
Borgvn 23
Sandnes
Pettersen
Kari
Storgt 20
Stavanger
12. The table above contains three records (one for each person) and four columns (LastName,
FirstName, Address, and City).
13. Queries
Syntax
mysql_connect(servername,username,password);
Parameter
servername
Username
password
Description
Optional. Specifies the server to connect to. Default value is "localhost:3306"
Optional. Specifies the username to log in with. Default value is the name of the user
that owns the server process
Optional. Specifies the password to log in with. Default is ""
Note: There are more available parameters, but the ones listed above are the most important. Visit our full
PHP MySQL Reference for more details.
Example
In the following example we store the connection in a variable ($con) for later use in the script. The "die"
part will be executed if the connection fails:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
?>
Closing a Connection
The connection will be closed automatically when the script ends. To close the connection before, use the
mysql_close() function:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
mysql_close($con);
?>
Create a Database
The CREATE DATABASE statement is used to create a database in MySQL.
Syntax
CREATE DATABASE database_name
Example
The following example creates a database called "my_db":
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
mysql_close($con);
?>
Create a Table
The CREATE TABLE statement is used to create a table in MySQL.
Syntax
CREATE TABLE
(
column_name1
column_name2
column_name3
....
)
table_name
data_type,
data_type,
data_type,
Example
The following example creates a table named "Persons", with three columns. The column names will be
"FirstName", "LastName" and "Age":
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Create database
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
// Create table
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Persons
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
// Execute query
mysql_query($sql,$con);
mysql_close($con);
?>
Important: A database must be selected before a table can be created. The database is selected with the
mysql_select_db() function.
Note: When you create a database field of type varchar, you must specify the maximum length of the field,
e.g. varchar(15).
The data type specifies what type of data the column can hold. For a complete reference of all the data
types available in MySQL, go to our complete Data Types reference.
Example
$sql = "CREATE TABLE Persons
(
personID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(personID),
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysql_query($sql,$con);
Syntax
It is possible to write the INSERT INTO statement in two forms.
The first form doesn't specify the column names where the data will be inserted, only their values:
Example
In the previous chapter we created a table named "Persons", with three columns; "Firstname", "Lastname"
and "Age". We will use the same table in this example. The following example adds two new records to the
"Persons" table:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Peter', 'Griffin', '35')");
<html>
<body>
<form action="insert.php" method="post">
Firstname: <input type="text" name="firstname" />
Lastname: <input type="text" name="lastname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
When a user clicks the submit button in the HTML form in the example above, the form data is sent to
"insert.php".
The "insert.php" file connects to a database, and retrieves the values from the form with the PHP $_POST
variables.
Then, the mysql_query() function executes the INSERT INTO statement, and a new record will be added to
the "Persons" table.
Here is the "insert.php" page:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con)
?>
Syntax
SELECT column_name(s)
FROM table_name
To learn more about SQL, please visit our SQL tutorial.
To get PHP to execute the statement above we must use the mysql_query() function. This function is used to
send a query or command to a MySQL connection.
Example
The following example selects all the data stored in the "Persons" table (The * character selects all the data
in the table):
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
mysql_close($con);
?>
The example above stores the data returned by the mysql_query() function in the $result variable.
Next, we use the mysql_fetch_array() function to return the first row from the recordset as an array. Each
call to mysql_fetch_array() returns the next row in the recordset. The while loop loops through all the
records in the recordset. To print the value of each row, we use the PHP $row variable ($row['FirstName']
and $row['LastName']).
The output of the code above will be:
Peter Griffin
Glenn Quagmire
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
The output of the code above will be:
Glenn
Peter
Firstname
Quagmire
Griffin
Lastname
Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name operator value
Example
The following example selects all rows from the "Persons" table where "FirstName='Peter':
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons
WHERE FirstName='Peter'");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
?>
The output of the code above will be:
Peter Griffin
Syntax
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC
To learn more about SQL, please visit our SQL tutorial.
Example
The following example selects all the data stored in the "Persons" table, and sorts the result by the "Age"
column:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons ORDER BY age");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
echo " " . $row['LastName'];
echo " " . $row['Age'];
echo "<br />";
}
mysql_close($con);
?>
The output of the code above will be:
Glenn Quagmire 33
Peter Griffin 35
SELECT column_name(s)
FROM table_name
ORDER BY column1, column2
Syntax
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
Note: 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!
To learn more about SQL, please visit our SQL tutorial.
To get PHP to execute the statement above we must use the mysql_query() function. This function is used to
send a query or command to a MySQL connection.
Example
Earlier in the tutorial we created a table named "Persons". Here is how it looks:
FirstName
LastName
Age
Peter
Griffin
35
Glenn
Quagmire
33
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("UPDATE Persons SET Age = '36'
WHERE FirstName = 'Peter' AND LastName = 'Griffin'");
mysql_close($con);
?>
After the update, the "Persons" table will look like this:
FirstName
LastName
Age
Peter
Griffin
36
Glenn
Quagmire
33
Syntax
DELETE FROM table_name
WHERE some_column = some_value
Note: 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!
To learn more about SQL, please visit our SQL tutorial.
To get PHP to execute the statement above we must use the mysql_query() function. This function is used to
send a query or command to a MySQL connection.
Example
Look at the following "Persons" table:
FirstName
LastName
Age
Peter
Griffin
35
Glenn
Quagmire
33
The following example deletes all the records in the "Persons" table where LastName='Griffin':
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("DELETE FROM Persons WHERE LastName='Griffin'");
mysql_close($con);
?>
After the deletion, the table will look like this:
FirstName
LastName
Age
Glenn
Quagmire
33
Note that this configuration has to be done on the computer where your web site is located. If you are
running Internet Information Server (IIS) on your own computer, the instructions above will work, but if
your web site is located on a remote server, you have to have physical access to that server, or ask your web
host to to set up a DSN for you to use.
Connecting to an ODBC
The odbc_connect() function is used to connect to an ODBC data source. The function takes four
parameters: the data source name, username, password, and an optional cursor type.
Example
The following example creates a connection to a DSN called northwind, with no username and no password.
It then creates an SQL and executes it:
$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
Retrieving Records
The odbc_fetch_row() function is used to return records from the result-set. This function returns true if it is
able to return rows, otherwise false.
The function takes two parameters: the ODBC result identifier and an optional row number:
odbc_fetch_row($rs)
$compname=odbc_result($rs,1);
The code line below returns the value of a field called "CompanyName":
$compname=odbc_result($rs,"CompanyName");
odbc_close($conn);
An ODBC Example
The following example shows how to first create a database connection, then a result-set, and then display
the data in an HTML table.
<html>
<body>
<?php
$conn=odbc_connect('northwind','','');
if (!$conn)
{exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";
while (odbc_fetch_row($rs))
{
$compname=odbc_result($rs,"CompanyName");
$conname=odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
</body>
</html>
What is XML?
XML is used to describe data and to focus on what data is. An XML file describes the structure of the data.
In XML, no tags are predefined. You must define your own tags.
If you want to learn more about XML, please visit our XML tutorial.
What is Expat?
To read and update - create and manipulate - an XML document, you will need an XML parser.
There are two basic types of XML parsers:
Tree-based parser: This parser transforms an XML document into a tree structure. It analyzes the
whole document, and provides access to the tree elements. e.g. the Document Object Model (DOM)
Event-based parser: Views an XML document as a series of events. When a specific event occurs, it
calls a function to handle it
<from>Jani</from>
An event-based parser reports the XML above as a series of three events:
The XML example above contains well-formed XML. However, the example is not valid XML, because there is
no Document Type Definition (DTD) associated with it.
However, this makes no difference when using the Expat parser. Expat is a non-validating parser, and
ignores any DTDs.
As an event-based, non-validating XML parser, Expat is fast and small, and a perfect match for PHP web
applications.
Note: XML documents must be well-formed or Expat will generate an error.
Installation
The XML Expat parser functions are part of the PHP core. There is no installation needed to use these
functions.
An XML File
The XML file below will be used in our example:
Example
<?php
//Initialize the XML parser
$parser=xml_parser_create();
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
{
switch($element_name)
{
case "NOTE":
echo "-- Note --<br />";
break;
case "TO":
echo "To: ";
break;
case "FROM":
echo "From: ";
break;
case "HEADING":
echo "Heading: ";
break;
case "BODY":
echo "Message: ";
}
}
//Function to use at the end of an element
function stop($parser,$element_name)
{
echo "<br />";
}
//Function to use when finding character data
function char($parser,$data)
{
echo $data;
}
//Specify element handler
xml_set_element_handler($parser,"start","stop");
//Specify data handler
xml_set_character_data_handler($parser,"char");
//Open XML file
$fp=fopen("test.xml","r");
//Read data
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
//Free the XML parser
xml_parser_free($parser);
?>
The output of the code above will be:
What is DOM?
The W3C DOM provides a standard set of objects for HTML and XML documents, and a standard interface for
accessing and manipulating them.
The W3C DOM is separated into different parts (Core, XML, and HTML) and different levels (DOM Level
1/2/3):
* Core DOM - defines a standard set of objects for any structured document
* XML DOM - defines a standard set of objects for XML documents
* HTML DOM - defines a standard set of objects for HTML documents
If you want to learn more about the XML DOM, please visit our XML DOM tutorial.
XML Parsing
To read and update - create and manipulate - an XML document, you will need an XML parser.
There are two basic types of XML parsers:
Tree-based parser: This parser transforms an XML document into a tree structure. It analyzes the
whole document, and provides access to the tree elements
Event-based parser: Views an XML document as a series of events. When a specific event occurs, it
calls a function to handle it
Installation
The DOM XML parser functions are part of the PHP core. There is no installation needed to use these
functions.
An XML File
The XML file below will be used in our example:
Example
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
print $xmlDoc->saveXML();
?>
The output of the code above will be:
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
The example above creates a DOMDocument-Object and loads the XML from "note.xml" into it.
Then the saveXML() function to puts the internal XML document into a string, so we can output it.
Example
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
{
print $item->nodeName . " = " . $item->nodeValue . "<br />";
}
?>
The output of the code above will be:
#text =
to = Tove
#text =
from = Jani
#text =
heading = Reminder
#text =
body = Don't forget me this weekend!
#text =
In the example above you see that there are empty text nodes between each element.
When XML generates, it often contains white-spaces between the nodes. The XML DOM parser treats these
as ordinary elements, and if you are not aware of them, they sometimes cause problems.
If you want to learn more about the XML DOM, please visit our XML DOM tutorial
What is SimpleXML?
SimpleXML is new in PHP 5. It is an easy way of getting an element's attributes and text, if you know the
XML document's layout.
Compared to DOM or the Expat parser, SimpleXML just takes a few lines of code to read text data from an
element.
SimpleXML converts the XML document into an object, like this:
Elements - Are converted to single attributes of the SimpleXMLElement object. When there's more
than one element on one level, they're placed inside an array
Attributes - Are accessed using associative arrays, where an index corresponds to the attribute
name
Element Data - Text data from elements are converted to strings. If an element has more than one
text node, they will be arranged in the order they are found
SimpleXML is fast and easy to use when performing basic tasks like:
Installation
As of PHP 5.0, the SimpleXML functions are part of the PHP core. There is no installation needed to use
these functions.
Using SimpleXML
Below is an XML file:
<?php
$xml = simplexml_load_file("test.xml");
echo $xml->getName() . "<br />";
foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br />";
}
?>
The output of the code above will be:
note
to: Tove
from: Jani
heading: Reminder
body: Don't forget me this weekend!
AJAX is not a new programming language, but a new technique for creating better, faster, and more
interactive web applications.
With AJAX, a JavaScript can communicate directly with the server, with the XMLHttpRequest object. With
this object, a JavaScript can trade data with a web server, without reloading the page.
AJAX uses asynchronous data transfer (HTTP requests) between the browser and the web server, allowing
web pages to request small bits of information from the server instead of whole pages.
The AJAX technique makes Internet applications smaller, faster and more user-friendly.
JavaScript
XML
HTML
CSS
AJAX applications are browser- and platform-independent.
Internet-applications have many benefits over desktop applications; they can reach a larger audience, they
are easier to install and support, and easier to develop.
However, Internet-applications are not always as "rich" and user-friendly as traditional desktop applications.
With AJAX, Internet applications can be made richer and more user-friendly.
There is no such thing as an AJAX server. AJAX runs in your browser. AJAX uses HTTP requests to request
small pieces of information from the server, instead of whole pages.
In our PHP tutorial we will demonstrate how a web page can communicate with a PHP web server online.
nformation about the PHP SimpleXML functions, visit our PHP SimpleXML Reference.
To get or send information from/to a database or a file on the server with traditional JavaScript, you will
have to make an HTML form, and a user will have to click the "Submit" button to send/get the information,
wait for the server to respond, then a new page will load with the results. Because the server returns a new
page each time the user submits input, traditional web applications can run slowly and tend to be less userfriendly.
With AJAX, your JavaScript communicates directly with the server, through the JavaScript XMLHttpRequest
object.
With the XMLHttpRequest object, a web page can make a request to, and get a response from a web server
- without reloading the page. The user will stay on the same page, and he or she will not notice that scripts
request pages, or send data to a server in the background.
The XMLHttpRequest object is supported in all major browsers (Internet Explorer, Firefox, Chrome, Opera,
and Safari).
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
Suggestions:
<html>
<head>
<script type="text/javascript" src="clienthint.js"></script>
</head>
<body>
<form>
First Name: <input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p>Suggestions: <span id="txtHint"></span></p>
</body>
</html>
The HTML form above has an input field called "txt1". An event attribute for this field defines a function to
be triggered by the onkeyup event.
The paragraph below the form contains a span called "txtHint". The span is used as a placeholder for data
retrieved from the web server.
When a user inputs data, the function called "showHint()" is executed. The execution of the function is
triggered by the "onkeyup" event. In other words: Each time a user moves the finger away from a keyboard
key inside the input field, the function showHint is called.
var xmlhttp
function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
alert ("Your browser does not support XMLHTTP!");
return;
}
var url="gethint.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
Each time the readyState property changes, the stateChanged() function will be executed
Opens the XMLHTTP object with the given URL
Sends an HTTP request to the server
If the input field is empty, the function simply clears the content of the txtHint placeholder.
<?php
// Fill up array with names
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";
//get the q parameter from URL
$q=$_GET["q"];
//lookup all hints from array if length of q>0
if (strlen($q) > 0)
{
$hint="";
for($i=0; $i<count($a); $i++)
{
if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
{
if ($hint=="")
{
$hint=$a[$i];
}
else
{
$hint=$hint." , ".$a[$i];
}
}
}
}
// Set output to "no suggestion" if no hint were found
// or to the correct values
if ($hint == "")
{
$response="no suggestion";
}
else
{
$response=$hint;
}
//output the response
echo $response;
?>
If there is any text sent from the JavaScript (strlen($q) > 0), the following happens:
1.
2.
3.
4.
The HTML page contains a link to an external JavaScript, an HTML form, and a div element:
<html>
<head>
<script type="text/javascript" src="selectcd.js"></script>
</head>
<body>
<form>
Select a CD:
<select name="cds" onchange="showCD(this.value)">
<option value="Bob Dylan">Bob Dylan</option>
<option value="Bonnie Tyler">Bonnie Tyler</option>
<option value="Dolly Parton">Dolly Parton</option>
</select>
</form>
<div id="txtHint"><b>CD info will be listed here...</b></div>
</body>
</html>
As you can see it is just a simple HTML form with a simple drop down box called "cds".
The <div> below the form will be used as a placeholder for info retrieved from the web server.
When the user selects data, a function called "showCD" is executed. The execution of the function is
triggered by the "onchange" event. In other words: Each time the user change the value in the drop down
box, the function showCD is called.
var xmlhttp
function showCD(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}
var url="getcd.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
The stateChanged() and GetXmlHttpObject functions are the same as in the PHP AJAX Suggest chapter, you
can go to there for an explanation of those.
The showCD() Function
When a CD in the drop-down box is selected, the showCD() function executes the following:
1. Calls the GetXmlHttpObject() function to create an XMLHTTP object
2. Defines an URL (filename) to send to the server
3. Adds a parameter (q) to the URL with the content of the drop-down box
4. Adds a random number to prevent the server from using a cached file
5. Each time the readyState property changes, the stateChanged() function will be executed
6. Opens the XMLHTTP object with the given URL
7. Sends an HTTP request to the server
<?php
$q=$_GET["q"];
$xmlDoc = new DOMDocument();
$xmlDoc->load("cd_catalog.xml");
$x=$xmlDoc->getElementsByTagName('ARTIST');
for ($i=0; $i<=$x->length-1; $i++)
{
//Process only element nodes
if ($x->item($i)->nodeType==1)
{
if ($x->item($i)->childNodes->item(0)->nodeValue == $q)
{
$y=($x->item($i)->parentNode);
}
}
}
$cd=($y->childNodes);
for ($i=0;$i<$cd->length;$i++)
{
//Process only element nodes
if ($cd->item($i)->nodeType==1)
{
echo($cd->item($i)->nodeName);
echo(": ");
echo($cd->item($i)->childNodes->item(0)->nodeValue);
echo("<br />");
}
}
?>
When the CD query is sent from the JavaScript to the PHP page, the following happens:
1. PHP creates an XML DOM object
2. Find all <artist> elements that matches the name sent from the JavaScript
3. Output the album information (send to the "txtHint" placeholder)
The following example will demonstrate how a web page can fetch information from a database with AJAX
technology.
Select a person:
Peter Griffin
Person info will be listed here.
Peter
Griffin
41
Quahog
Brewery
Lois
Griffin
40
Newport
Piano Teacher
Joseph
Swanson
39
Quahog
Police Officer
Glenn
Quagmire
41
Quahog
Pilot
The HTML page contains a link to an external JavaScript, an HTML form, and a div element:
<html>
<head>
<script type="text/javascript" src="selectuser.js"></script>
</head>
<body>
<form>
Select a User:
<select name="users" onchange="showUser(this.value)">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>
</body>
</html>
As you can see it is just a simple HTML form with a drop down box called "customers".
The <div> below the form will be used as a placeholder for info retrieved from the web server.
When the user selects data, a function called "showUser()" is executed. The execution of the function is
triggered by the "onchange" event. In other words: Each time the user change the value in the drop down
box, the function showUser() is called.
var xmlhttp;
function showUser(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="getuser.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
The stateChanged() and GetXmlHttpObject functions are the same as in the PHP AJAX Suggest chapter, you
can go to there for an explanation of those.
The showUser() Function
When a person in the drop-down box is selected, the showUser() function executes the following:
1. Calls the GetXmlHttpObject() function to create an XMLHTTP object
2. Defines an URL (filename) to send to the server
3. Adds a parameter (q) to the URL with the content of the drop-down box
4. Adds a random number to prevent the server from using a cached file
5. Each time the readyState property changes, the stateChanged() function will be executed
6. Opens the XMLHTTP object with the given URL
7. Sends an HTTP request to the server
<?php
$q=$_GET["q"];
$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("ajax_demo", $con);
$sql="SELECT * FROM user WHERE id = '".$q."'";
$result = mysql_query($sql);
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "<td>" . $row['Age'] . "</td>";
echo "<td>" . $row['Hometown'] . "</td>";
echo "<td>" . $row['Job'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
When the query is sent from the JavaScript to the PHP page, the following happens:
1. PHP opens a connection to a MySQL server
2. The correct person is found
3. An HTML table is created, and filled with data, and sent back to the "txtHint" placeholder
The ResponseXML property returns an XML document object, which can be examined and parsed using the
DOM.
The following example will demonstrate how a web page can fetch information from a database with AJAX
technology. The selected data from the database will this time be converted to an XML document, and then
we will use the DOM to extract the values to be displayed.
This example might look equal to the "PHP AJAX and MySQL" example in the previous chapter. However,
there is a big difference: this time we get the data from the PHP page as XML, with the responseXML
function.
Receiving the response as an XML document allows us to update this page several places, instead of just
receiving an HTML output, and displaying it.
In this example we will update several <span> elements with the information we receive from the database.
Select a User:
Peter Griffin
FirstName
LastName
Age Hometown
Job
Lois
Griffin
40
Joseph
Swanson
39
Glenn
Quagmire 41
Peter
Griffin
41 Quahog
Brewery
Quahog Pilot
<html>
<head>
<script type="text/javascript" src="responsexml.js"></script>
</head>
<body>
<form>
Select a User:
<select name="users" onchange="showUser(this.value)">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<h2><span id="firstname"></span> <span id="lastname"></span></h2>
<span id="job"></span>
<div style="text-align: right">
<span id="age_text"></span>
<span id="age"></span>
<span id="hometown_text"></span>
<span id="hometown"></span>
</div>
</body>
</html>
The HTML form contains a drop-down box called "users", with id and names from the database
table, as options
The <span> elements are placeholders for the values we will receive
When a user is selected, a function called "showUser()" is executed (triggered by the "onchange"
event)
In other words: Each time a user changes the value in the drop-down box, the function showUser() is
called, and outputs the result in the <span> elements.
var xmlhttp;
function showUser(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
<?php
$q=$_GET["q"];
The HTML page contains a link to an external JavaScript, some style definitions, an HTML form, and a div
element:
<html>
<head>
<script type="text/javascript" src="livesearch.js"></script>
<style type="text/css">
#livesearch
{
margin:0px;
width:194px;
}
#txt1
{
margin:0px;
}
</style>
</head>
<body>
<form>
<input type="text" id="txt1" size="30" onkeyup="showResult(this.value)" />
<div id="livesearch"></div>
</form>
</body>
</html>
The HTML form works like this:
1. An event is triggered when the user presses, and releases a key in the input field
2. When the event is triggered, the function showResult() is executed
3. The <div id="livesearch"> is a placeholder for the data returned from the showResult() function
var xmlhttp;
function showResult(str)
{
if (str.length==0)
{
document.getElementById("livesearch").innerHTML="";
document.getElementById("livesearch").style.border="0px";
return;
}
xmlhttp=GetXmlHttpObject()
if (xmlhttp==null)
{
alert ("Your browser does not support XML HTTP Request");
return;
}
var url="livesearch.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged ;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("livesearch").innerHTML=xmlhttp.responseText;
document.getElementById("livesearch").style.border="1px solid #A5ACB2";
}
}
function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
The GetXmlHttpObject() function is the same as in the PHP AJAX Suggest chapter.
The showResult() Function
This function executes every time a character is entered in the input field. If there is no input in the text
field (str.length == 0), the function sets the return field to empty and removes the border around it.
However, if there is any input in the text field, the function executes the following:
1. Calls the GetXmlHttpObject() function to create an XMLHTTP object
2. Defines the URL (filename) to send to the server
3. Adds a parameter (q) to the URL with the content of the input field
4. Adds a random number to prevent the server from using a cached file
5. Each time the readyState property changes, the stateChanged() function will be executed
6. Opens the XMLHTTP object with the given URL
7. Sends an HTTP request to the server
The stateChanged() Function
This function executes every time the state of the XMLHTTP object changes. When the state changes to 4
("complete"), the content of the txtHint placeholder is filled with the response text, and a border is set
around the field.
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("links.xml");
$x=$xmlDoc->getElementsByTagName('link');
//get the q parameter from URL
$q=$_GET["q"];
//lookup all links from the xml file if length of q>0
if (strlen($q) > 0)
{
$hint="";
for($i=0; $i<($x->length); $i++)
{
$y=$x->item($i)->getElementsByTagName('title');
$z=$x->item($i)->getElementsByTagName('url');
if ($y->item(0)->nodeType==1)
{
//find a link matching the search text
if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q))
{
if ($hint=="")
{
$hint="<a href='" .
$z->item(0)->childNodes->item(0)->nodeValue .
"' target='_blank'>" .
$y->item(0)->childNodes->item(0)->nodeValue . "</a>";
}
else
{
is any text sent from the JavaScript (strlen($q) > 0), the following happens:
PHP creates an XML DOM object of the "links.xml" file
Loops through all <title> elements to find titles that match the text sent from the JavaScript
Sets the correct link and title in the "$response" variable. If more than one match is found, all
matches are added to the variable
4. If no matches are found, the $response variable is set to "no suggestion"
5. Output the $respone variable to the "livesearch" placeholder
4.
In this example we will demonstrate an RSS reader, where the content from the RSS is loaded into a
webpage without refreshing.
Select an RSS-feed:
Google New s
RSS-feed will be listed here...
<html>
<head>
<script type="text/javascript" src="getrss.js"></script>
</head>
<body>
<form>
Select an RSS-feed:
<select onchange="showRSS(this.value)">
<option value="Google">Google News</option>
<option value="MSNBC">MSNBC News</option>
</select>
</form>
<p><div id="rssOutput">
<b>RSS-feed will be listed here...</b></div></p>
</body>
</html>
The HTML form works like this:
1. An event is triggered when a user selects an option in the drop-down box
2. When the event is triggered, the function showRSS() is executed
3. The <div id="rssOutput"> is a placeholder for the data returned from the showRSS() function
var xmlhttp;
function showRSS(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
alert ("Your browser does not support XML HTTP Request");
return;
}
var url="getrss.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("rssOutput").innerHTML=xmlhttp.responseText;
}
}
function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
The stateChanged() and GetXmlHttpObject functions are the same as in the PHP AJAX Suggest chapter.
The showRSS() Function
Every time an option is selected in the input field, this function executes the following:
1.
2.
3.
4.
5.
6.
7.
<?php
//get the q parameter from URL
$q=$_GET["q"];
//find out which feed was selected
if($q=="Google")
{
$xml=("http://news.google.com/news?ned=us&topic=h&output=rss");
}
elseif($q=="MSNBC")
{
$xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");
}
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;
//output elements from "<channel>"
echo("<p><a href='" . $channel_link
. "'>" . $channel_title . "</a>");
echo("<br />");
echo($channel_desc . "</p>");
//get and output "<item>" elements
$x=$xmlDoc->getElementsByTagName('item');
for ($i=0; $i<=2; $i++)
{
$item_title=$x->item($i)->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$item_link=$x->item($i)->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$item_desc=$x->item($i)->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;
echo ("<p><a href='" . $item_link
. "'>" . $item_title . "</a>");
echo ("<br />");
echo ($item_desc . "</p>");
}
?>
AJAX Poll
This example will demonstrate a poll where a web page can get results without reloading.
<html>
<head>
<script type="text/javascript" src="poll.js"></script>
</head>
<body>
<div id="poll">
<h3>Do you like PHP and AJAX so far?</h3>
<form>
Yes:
<input type="radio" name="vote" value="0" onclick="getVote(this.value)" />
<br />No:
<input type="radio" name="vote" value="1" onclick="getVote(this.value)" />
</form>
</div>
</body>
</html>
The HTML form works like this:
1.
2.
3.
An event is triggered when the user selects the "yes" or "no" option
When the event is triggered, the function getVote() is executed
The data returned from the getVote() function will replace the form, in the <div> tag
var xmlhttp;
function getVote(int)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="poll_vote.php";
url=url+"?vote="+int;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("poll").innerHTML=xmlhttp.responseText;
}
}
function GetXmlHttpObject()
{
var objXMLHttp=null;
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
return objXMLHttp;
}
The stateChanged() and GetXmlHttpObject functions are the same as in the PHP AJAX Suggest chapter.
The getVote() Function
This function executes when "yes" or "no" is selected in the HTML form.
1.
2.
3.
4.
5.
6.
7.
<?php
$vote = $_REQUEST['vote'];
The text file (poll_result.txt) is where we store the data from the poll.
It is stored like this:
0||0
Description
PH
P
array()
Creates an array
array_change_key_case()
array_chunk()
array_combine()
array_count_values()
array_diff()
array_diff_assoc()
array_diff_key()
array_diff_uassoc()
array_diff_ukey()
array_fill()
array_filter()
Installation
The array functions are part of the PHP core.
There is no installation needed to use these
functions.
function
array_flip()
array_intersect()
array_intersect_assoc()
array_intersect_key()
array_intersect_uassoc()
array_intersect_ukey()
array_key_exists()
array_keys()
array_map()
array_merge()
array_merge_recursive()
array_pad()
array_pop()
array_product()
array_push()
array_rand()
array_reduce()
array_reverse()
array_search()
array_shift()
array_slice()
array_splice()
array_sum()
array_udiff()
array_udiff_assoc()
array_udiff_uassoc()
array_uintersect()
array_uintersect_assoc()
array_multisort( Sorts
4
)
multiple or
multidimensiona
l arrays
array_uintersect_uassoc()
array_unique()
array_unshift()
array_values()
array_walk()
array_walk_recursive()
arsort()
asort()
compact()
count()
current()
each()
end()
extract()
in_array()
key()
krsort()
ksort()
list()
natcasesort()
natsort()
Sorts an array 4
using a
"natural order"
algorithm
next()
Advance the 3
internal array
pointer of an
array
pos()
Alias of
current()
prev()
Rewinds the
3
internal array
pointer
range()
Creates an
array
containing a
range of
elements
reset()
Sets the
internal
pointer of an
array to its
first element
rsort()
Sorts an
3
array in
reverse order
shuffle()
Shuffles an
array
sizeof()
Alias of
count()
sort()
Sorts an array
uasort()
uksort()
usort()
Description
CASE_LOWER
CASE_UPPER
SORT_ASC
SORT_DESC
SORT_REGULAR
SORT_NUMERIC
SORT_STRING
SORT_LOCALE_STRING
PH
P
COUNT_NORMAL
COUNT_RECURSIVE
EXTR_OVERWRITE
EXTR_SKIP
EXTR_PREFIX_SAME
EXTR_PREFIX_ALL
EXTR_PREFIX_INVALID
EXTR_PREFIX_IF_EXISTS
EXTR_IF_EXISTS
EXTR_REFS
The calendar functions are useful when working with different calendar formats. The standard it is based on
is the Julian day count (Julian day count is a count of days starting from January 1, 4713 B.C.). Note that
the Julian day count is not the same as the Julian calendar!
Note: To convert between calendar formats, you must first convert to Julian day count, then to the calendar
format.
Installation
The windows version of PHP has built-in support for the calendar extension. So, the calendar functions will
work automatically.
However, if you are running the Linux version of PHP, you will have to compile PHP with --enable-calendar to
get the calendar functions to work.
PHP: indicates the earliest version of PHP that supports the function.
Function
Description
PH
P
cal_days_in_month()
cal_from_jd()
cal_info()
cal_to_jd()
easter_date()
easter_days()
Returns the number of days after March 21, on which Easter falls for
a specified year
FrenchToJD()
GregorianToJD()
JDDayOfWeek()
JDMonthName()
JDToFrench()
JDToGregorian()
jdtojewish()
JDToJulian()
jdtounix()
JewishToJD()
JulianToJD()
unixtojd()
PHP: indicates the earliest version of PHP that supports the constant.
Constant
Description
PH
P
CAL_GREGORIAN
Gregorian calendar
CAL_JULIAN
Julian calendar
CAL_JEWISH
Jewish calendar
CAL_FRENCH
CAL_NUM_CALS
CAL_DOW_DAYNO
CAL_DOW_SHORT
CAL_DOW_LONG
CAL_MONTH_GREGORIAN_SHORT
CAL_MONTH_GREGORIAN_LONG
CAL_MONTH_JULIAN_SHORT
CAL_MONTH_JULIAN_LONG
CAL_MONTH_JEWISH
CAL_MONTH_FRENCH
CAL_EASTER_DEFAULT
CAL_EASTER_DEFAULT
CAL_EASTER_ROMAN
CAL_EASTER_ALWAYS_GREGORIAN
CAL_EASTER_ALWAYS_JULIAN
CAL_JEWISH_ADD_ALAFIM_GERES
H
CAL_JEWISH_ADD_ALAFIM
CAL_JEWISH_ADD_GERESHAYIM
Installation
The date/time functions are part of the PHP core. There is no installation needed to use these functions.
Runtime Configuration
Default
"31.7667"
Description
Changeable
PHP_INI_ALL
date.default_longitud
e
"35.2333"
PHP_INI_ALL
date.sunrise_zenith
"90.83"
PHP_INI_ALL
date.sunset_zenith
"90.83"
PHP_INI_ALL
date.timezone
""
PHP_INI_ALL
PHP: indicates the earliest version of PHP that supports the function.
Function
Description
PH
P
checkdate()
date_default_timezone_get()
date_default_timezone_set()
date_sunrise()
date_sunset()
date()
getdate()
gettimeofday()
gmdate()
gmmktime()
gmstrftime()
idate()
localtime()
microtime()
mktime()
strftime()
strptime()
strtotime()
time()
PHP: indicates the earliest version of PHP that supports the constant.
Constant
Description
PHP
DATE_ATOM
DATE_COOKIE
DATE_ISO8601
DATE_RFC822
DATE_RFC850
DATE_RFC1036
DATE_RFC1123
DATE_RFC2822
DATE_RSS
DATE_W3C
Installation
The directory functions are part of the PHP core. There is no installation needed to use these functions.
Description
PHP
chdir()
chroot()
dir()
closedir()
getcwd()
opendir()
readdir()
Returns an 3
entry from a
directory
handle
rewinddir()
scandir()
Description
PH
P
DIRECTORY_SEPARATOR
PATH_SEPARATOR
The error and logging functions allows error handling and logging.
The error functions allow users to define error handling rules, and modify the way the errors can be logged.
The logging functions allow users to log applications and send log messages to email, system logs or other
machines.
Installation
The error and logging functions are part of the PHP core. There is no installation needed to use these
functions.
PHP: indicates the earliest version of PHP that supports the function.
Function
Description
PH
P
debug_backtrace()
Generates a backtrace
debug_print_backtrace()
Prints a backtrace
error_get_last()
error_log()
error_reporting()
restore_error_handler()
restore_exception_handler()
set_error_handler()
set_exception_handler()
trigger_error()
Alias of trigger_error()
user_error()
PHP: indicates the earliest version of PHP that supports the constant.
Valu
e
Constant
Description
PH
P
E_ERROR
E_WARNING
E_PARSE
E_NOTICE
16
E_CORE_ERROR
32
E_CORE_WARNING
64
E_COMPILE_ERROR
128
E_COMPILE_WARNING
256
E_USER_ERROR
512
E_USER_WARNING
1024
E_USER_NOTICE
2048
E_STRICT
4096
E_RECOVERABLE_ERROR
8191
E_ALL
The filesystem functions allow you to access and manipulate the filesystem.
Installation
The filesystem functions are part of the PHP core. There is no installation needed to use these functions.
Runtime Configuration
Default
Description
Changeable
allow_url_fopen
"1"
user_agent
NULL
PHP_INI_ALL
"60"
PHP_INI_ALL
from
""
PHP_INI_ALL
auto_detect_line_ending "0"
s
When specifying a path on Unix platforms, the forward slash (/) is used as directory separator. However, on
Windows platforms, both forward slash (/) and backslash (\) can be used.
Description
PH
P
basename()
chgrp()
chmod()
chown()
clearstatcache()
copy()
Copies a file
delete()
dirname()
disk_free_space()
disk_total_space()
diskfreespace()
Alias of disk_free_space()
fclose()
feof()
fflush()
fgetc()
fgetcsv()
fgets()
fgetss()
Returns a line, with HTML and PHP tags removed, from an open 3
file
file()
file_exists()
file_get_contents()
file_put_contents
fileatime()
filectime()
filegroup()
fileinode()
filemtime()
fileowner()
fileperms()
filesize()
filetype()
flock()
fnmatch()
fopen()
fpassthru()
Reads from an open file, until EOF, and writes the result to the
output buffer
fputcsv()
fputs()
Alias of fwrite()
fread()
fscanf()
fseek()
Seeks in an open 3
file
fstat()
Returns
information
about an open
file
ftell()
Returns the
current position
in an open file
ftruncate()
Truncates an
open file to a
specified length
fwrite()
Writes to an
open file
glob()
Returns an array 4
of filenames /
directories
matching a
specified pattern
is_dir()
Checks whether
a file is a
directory
is_executable()
is_file()
is_link()
is_readable()
is_uploaded_file()
is_writable()
is_writeable()
Alias of is_writable()
link()
linkinfo()
lstat()
mkdir()
Creates a directory
move_uploaded_file()
parse_ini_file()
pathinfo()
pclose()
popen()
Opens a pipe
readfile()
readlink()
realpath()
rename()
rewind()
rmdir()
set_file_buffer()
stat()
symlink()
tempnam()
tmpfile()
touch()
umask()
unlink()
Deletes a file
PHP: indicates the earliest version of PHP that supports the constant.
Constant
Description
GLOB_BRACE
GLOB_ONLYDIR
GLOB_MARK
GLOB_NOSORT
GLOB_NOCHECK
GLOB_NOESCAPE
PATHINFO_DIRNAME
PATHINFO_BASENAME
PATHINFO_EXTENSION
FILE_USE_INCLUDE_PATH
FILE_APPEND
FILE_IGNORE_NEW_LINES
FILE_SKIP_EMPTY_LINES
Installation
PH
P
The filter functions are part of the PHP core. There is no installation needed to use these functions.
Description
PH
P
filter_has_var()
filter_id()
filter_input()
filter_input_array()
Get multiple inputs from outside the script and filters them
filter_list()
filter_var_array()
filter_var()
PHP Filters
ID Name
FILTER_CALLBACK
FILTER_SANITIZE_STRING
FILTER_SANITIZE_STRIPPED
FILTER_SANITIZE_ENCODED
FILTER_SANITIZE_SPECIAL_CHARS
FILTER_SANITIZE_EMAIL
FILTER_SANITIZE_URL
FILTER_SANITIZE_NUMBER_INT
FILTER_SANITIZE_NUMBER_FLOAT
FILTER_SANITIZE_MAGIC_QUOTES
FILTER_UNSAFE_RAW
FILTER_VALIDATE_INT
FILTER_VALIDATE_BOOLEAN
FILTER_VALIDATE_FLOAT
FILTER_VALIDATE_REGEXP
FILTER_VALIDATE_URL
FILTER_VALIDATE_EMAIL
FILTER_VALIDATE_IP
Description
Call a user-defined function to filter data
Strip tags, optionally strip or encode special characters
Alias of "string" filter
URL-encode string, optionally strip or encode special characters
HTML-escape '"<>& and characters with ASCII value less than 32
Remove all characters, except letters, digits and !#$%&'*+-/=?
^_`{|}~@.[]
Remove all characters, except letters, digits and $-_.+!*'(),
{}|\\^~[]`<>#%";/?:@&=
Remove all characters, except digits and +Remove all characters, except digits, +- and optionally .,eE
Apply addslashes()
Do nothing, optionally strip or encode special characters
Validate value as integer, optionally from the specified range
Return TRUE for "1", "true", "on" and "yes", FALSE for "0", "false",
"off", "no", and "", NULL otherwise
Validate value as float
Validate value against regexp, a Perl-compatible regular expression
Validate value as URL, optionally with required components
Validate value as e-mail
Validate value as IP address, optionally only IPv4 or IPv6 or not from
private or reserved ranges
Installation
The windows version of PHP has built-in support for the FTP extension. So, the FTP functions will work
automatically.
However, if you are running the Linux version of PHP, you will have to compile PHP with --enable-ftp (PHP
4+) or --with-ftp (PHP 3) to get the FTP functions to work.
PHP: indicates the earliest version of PHP that supports the function.
Function
Description
PH
P
ftp_alloc()
ftp_cdup()
ftp_chdir()
ftp_chmod()
ftp_close()
ftp_connect()
ftp_delete()
ftp_exec()
ftp_fget()
Downloads a file from the FTP server and saves it to an open file
ftp_fput()
Uploads from an open file and saves it to a file on the FTP server
ftp_get_option()
ftp_get()
R
4
e
t
u
r
n
s
r
u
n
t
i
m
e
b
e
h
a
v
i
o
r
s
o
f
t
h
e
F
T
P
3 L 3 R3 C 3
Co 4 D 4 U4 D 4 U4 L 3 T3 U3 R 3 A 3 S 5 R 3 R 3 R 3
S 4 S3
o ftp_ e ftp_ r ftp_n nti ftp_ o ft p ft o ft p i
u p ftp_ e ftp_ li ftp_ e ftp_ e ftp_ e ftp_ e ftp_s e ftp e
ftp g
ftp s ftp r ft l
mdt t mk e b_co nu nb_f w p l p w p l
pwd t quit a raw n rawl t rena n rmd met_o t _sit n ftp_siz
_l s
_n t _p n p_ o
u
a
es
n
o
n
o
dir(
ntinu
get(
m()
_ _ _
() u () s () d ist() u me( a ir() o ption s e() d e()
og o
r ) t e() ret )
l n a n l n a lis s as s pu a
r
o
s
r )
m
v () r
s Retur
in(
t() v( t()
n
n
e
rie
o b db o b d t
p d
n
f
a
n
e
e
u
a ns
)
)
t
s
s
vi
a _f s _ a _ s
h a s
s
ft
r
s
s
s
n
S the
o
t
a
ng
d p f g dp a e s a
t
p
a
a
a
a
ti
I size
a
h
n
/s
s ut r et s ut fi fi s f
h
_
w
d
fi
d
m
T of
n
e
e
en
a () o () a () l
l
i
il
e
cl
e
l
ir
e
E the
F
l
w
di
fi m fi e e v e
c
o
t
e
e
o
c speci
c
T
a
ng
l
l
t
s
e t
u
s
a
o
c
p
o fied
o
P
s
a
e a e o i
o
r
e
il
r
t
ti
mfile
d
m
c
t
fil
fr n fr t
n m
r
(
e
d
o
o
m3
i
m
o
m
e
o o o h a o t
e
)
d
ir
r
n
a
r
a
n
o
(n
m
m
e
s
n
li
e
y
s
n ftp_ssl
e
p
d h
n
n
d
on
F p e e
t
s
c
o
f
d _conn
c
e
d
e
if
T e
d
t
t
n
o
t ect()
t
t
n t
F
t
c
i
bl
i
o
o
t
r
o Open
o
h fi h P c
T
o
o
ti
e
oc
if
r
f
r
h
t
t sa
r
e l
e s
P
t
n
o
d
ki
e
i
e
fi
y
e
h
h secur
y
F e F
s
h
n
ti
ng
e
c
l
o
F
e
ee
o
T a T r
e
e
o
m
)
t
e
n
T
F
s SSLn
P n P v d
r
F
r
e
o
s
t
P
T
e FTP
t
s
d s e d
v
T
o
o
i
r
i
h
s
P
r conn
h
e s e r
e
P
f
f
(
r
y
n
e
e
c
v ectio
e
r
a r
r
s
f
a
n
t
F
r
o
en
F
v v v n e
e
s
o
c
a
h
T
v
n
r4
T
e e e
r
p
n t
m
e
P
e
n
P
r
s r
v
e
o
e
s
s
r
e
s
a it (
e
ftp_sy
c
p
e
c
e
n t n b r
r
stype(
if
y
e
r
ti
r
d o o l
)
i
c
v
o
v
s
a n o o
Retur
e
c
n
if
e
n
e
a fi ns
d
i
r
r
v l
b k t
the
fi
i
h
e
e e l
syste
l
d
s
o o n e
m
e
d
it n c g F
type
c
o
n
n
e
c
t
i
o
n
t
o
a
n
o
p
e
n
fi
l
e
(
n
o
n
b
l
o
c
k
i
n
g
)
t
h
e
F
T
P
s
e
r
v
e
r
(
n
o
n
b
l
o
c
k
i
n
g
)
k
i
n
g
)
T
P
s
e
r
v
e
r
i
r
e
c
t
o
r
y
ident
ifier
of
the
FTP
serve
r
3
FTP_
IMA
GE
3
FTP_
TIME
OUT
_SEC
4
FTP_
AUT
OSE
EK
The HTTP functions let you manipulate information sent to the browser by the Web server, before any other
output has been sent.
Installation
The directory functions are part of the PHP core. There is no installation needed to use these functions.
Dete 4
FTP_ rmin
AUT e
ORE resu
SUM me
posit
E
ion
and
start
posit
ion
for
get
and
put
requ
ests
auto
mati
cally
Fun Desc P
Se 3
Retu 5
Ch 3
Se 3
Sen 5
Descri PH
ctio ripti H
nds
ds
ption P
headers rns
headers_ eck setcoo nd
setrawc an
n
on
P head a
s if
_list() a
sent()
kie() s
er() raw
ookie() HTT
list
/
an
HT
of
wh
HT
P
PHP
TP
resp
ere
TP
cook
HTTP
hea
onse
the
co
ie
der
hea
HT
oki
with
Const
to
ders
TP
e
out
a
sent
hea
to
URL
ants
clie
(or
der
a
enc
NoPHP
nt
read
s
cli
odin
y to
hav
en
g
libxml
sen
e
t
the
d)
bee
cook Introd
n
ie
uction
sen
valu
The libxml
t
e
functions
and
constants
are used
together
with
SimpleXM
L, XSLT
and DOM
functions.
Install
ation
These
functions
require
the libxml
package.
Download
at
xmlsoft.or
g
PHP
libxml
Functi
ons
PHP:
indicates
the
earliest
version of
PHP that
supports
the
function.
Function
libxml_clear_errors()
libxml_get_errors()
Retrieve array of
errors
Retrieve last error
from libxml
libxml_get_last_error()
5
5
Description
PHP
PHP libxml
Constants
Function
LIBXML_COMPACT Set small nodes allocation optimization. This may improve the
application performance
LIBXML_DTDVALI
D
LIBXML_NOBLANKS
LIBXML_NOCDATA
LIBXML_NOEMPTYTAG
LIBXML_NOENT
Substitute entities
LIBXML_NOERROR
LIBXML_NONET
LIBXML_NOWARNING
LIBXML_NOXMLDECL
LIBXML_NSCLEAN
LIBXML_XINCLUDE
LIBXML_ERR_ERROR
LIBXML_ERR_FATAL
LIBXML_ERR_NONE
Get no errors
LIBXML_ERR_WARNING
LIBXML_VERSION
LIBXML_DOTTED_VERSION
PHP Mail
Introduction
The mail() function
allows you to send
emails directly from
a script.
Default
Description
Changeable
Requirement
s
Installation
The mail functions
are part of the PHP
core. There is no
installation needed to
use these functions.
Runtime
Configuration
The behavior of the
mail functions is
affected by settings
in the php.ini file.
Mail configuration
options:
Name
SMTP
"localhost"
PHP_INI_ALL
smtp_port
"25"
PHP_INI_ALL
sendmail_from
NULL
PHP_INI_ALL
sendmail_path
NULL
PHP_INI_SYSTEM
Description
PH
P
ezmlm_hash()
mail()
Installation
The math functions are part of the PHP core. There is no installation needed to use these functions.
Description
PH
P
abs()
acos()
acosh()
asin()
asinh()
atan()
atan2()
atanh()
base_convert()
bindec()
ceil()
cos()
cosh()
decbin()
dechex()
decoct()
deg2rad()
exp()
expm1()
floor()
fmod()
getrandmax()
hexdec()
hypot()
is_finite()
is_infinite()
is_nan()
lcg_value()
log()
log10()
log1p()
Returns log(1+number)
max()
min()
mt_getrandmax()
mt_rand()
mt_srand()
octdec()
pi()
pow()
rad2deg()
rand()
round()
sin()
sinh()
sqrt()
srand()
tan()
tanh()
Description
PH
P
M_E
M_EULER
M_LNPI
M_LN2
M_LN10
M_LOG2E
M_LOG10E
M_PI
M_PI_2
M_PI_4
M_1_PI
M_2_PI
M_SQRTPI
M_2_SQRTPI
M_SQRT1_2
M_SQRT2
M_SQRT3
Installation
The misc functions are part of the PHP core. There is no installation needed to use these functions.
Runtime Configuration
The behavior of the misc functions is affected by settings in the php.ini file.
Misc. configuration options:
N De DescCha
a fa ripti nge
m ult on able
e
ignore_user_abort "0"
highlight.string
PHP_INI_ALL
PHP_INI_ALL
PHP_INI_ALL
PHP_INI_ALL
highlight.bg
"#FFFFFF"
PHP_INI_ALL
highlight.default
PHP_INI_ALL
highlight.html
PHP_INI_ALL
browscap
NULL
PHP_INI_SYSTE
M
Description
PH
P
connection_aborted()
connection_status()
connection_timeout()
constant()
define()
Defines a constant
defined()
die()
eval()
exit()
get_browser()
highlight_file()
highlight_string()
ignore_user_abort()
pack()
php_check_syntax()
php_strip_whitespace()
Returns the source code of a file with PHP comments and whitespace 5
removed
show_source()
Alias of highlight_file()
sleep()
time_nanosleep()
time_sleep_until()
uniqid()
Generates a unique ID
unpack()
usleep()
Constant
Description
PH
P
CONNECTION_ABORTED
CONNECTION_NORMAL
CONNECTION_TIMEOUT
__COMPILER_HALT_OFFSET__
Installation
For the MySQL functions to be available, you must compile PHP with MySQL support.
For compiling, use --with-mysql=DIR (the optional DIR points to the MySQL directory).
Note: For full functionality of MySQL versions greater than 4.1., use the MySQLi extension instead. If you
would like to install both the mysql extension and the mysqli extension you should use the same client
library to avoid any conflicts.
Runtime Configuration
The behavior of the MySQL functions is affected by settings in the php.ini file.
MySQL configuration options:
Na Def Des Cha
me aul cri nge
t
pti abl
on e
mys "1"
ql.a
llow
_pe
rsis
tent
Wh PHP
eth _IN
er I_S
or YST
not EM
to
allo
w
per
sist
ent
con
nec
tion
s
nks
nu EM
mb
er
of
con
nec
tion
s
per
pro
ces
s
(per
sist
ent
con
nec
tion
s
incl
ude
d)
mysql.trace_mode
"0"
Trace
PHP_INI_ALL
mode.
When set to
"1",
warnings
and SQLerrors will
be
displayed.
Available
since PHP
4.3
The default PHP_INI_ALL
TCP port
number to
use
mysql.default_port
NULL
mysql.default_socket
NULL
The
default
socket
name to
use.
Available
since PHP
4.0.1
PHP_INI_ALL
mysql.default_host
NULL
The
default
server
host to
use
(doesn't
apply in
SQL safe
mode)
PHP_INI_ALL
mysql.default_user
NULL
The
PHP_INI_ALL
default
user name
to use
(doesn't
apply in
SQL safe
mode)
mysql.default_password
NULL
The
default
password
to use
(doesn't
apply in
SQL safe
mode)
PHP_INI_ALL
mysql.connect_timeout
"60"
Connectio PHP_INI_ALL
n timeout
in seconds
Resource Types
There are two resource types used in the MySQL extension. The first one is the link_identifier for a database
connection, the second is a resource which holds the result of a query.
Note: Most MySQL functions accept link_identifier as the last optional parameter. If it is not provided, the
last opened connection is used.
Description
PH
P
mysql_affected_rows()
mysql_change_user()
mysql_client_encoding()
mysql_close()
mysql_connect()
mysql_create_db()
mysql_data_seek()
mysql_db_name()
mysql_db_query()
mysql_drop_db()
mysql_errno()
mysql_error()
mysql_escape_string()
mysql_fetch_array()
mysql_fetch_assoc()
mysql_fetch_field()
mysql_fetch_lengths()
mysql_fetch_object()
mysql_fetch_row()
mysql_field_flags()
mysql_field_len()
mysql_field_name()
mysql_field_seek()
mysql_field_table()
mysql_field_type()
mysql_free_result()
mysql_get_client_info()
mysql_get_host_info()
mysql_get_proto_info()
mysql_get_server_info()
mysql_info()
mysql_insert_id()
mysql_list_dbs()
mysql_list_fields()
mysql_list_processes()
mysql_list_tables()
mysql_num_fields()
mysql_num_rows()
mysql_pconnect()
mysql_ping()
mysql_query()
mysql_real_escape_string()
mysql_result()
mysql_select_db()
mysql_stat()
mysql_tablename()
mysql_thread_id()
mysql_unbuffered_query()
Since PHP 4.3 it has been possible to specify additional flags for the mysql_connect() and mysql_pconnect()
functions:
PHP: indicates the earliest version of PHP that supports the constant.
Constant
Description
PH
P
MYSQL_CLIENT_COMPRESS
4.3
MYSQL_CLIENT_IGNORE_SPACE
4.3
MYSQL_CLIENT_INTERACTIVE
MYSQL_CLIENT_SSL
4.3
The mysql_fetch_array() function uses a constant for the different types of result arrays. The following
constants are defined:
Constant
Description
MYSQL_ASSOC
Columns are returned into the array with the fieldname as the array index
MYSQL_BOTH
Columns are returned into the array having both a numerical index and
the fieldname as the array index
MYSQL_NUM
Columns are returned into the array having a numerical index (index starts
at 0)
PH
P
Installation
The SimpleXML functions are part of the PHP core. There is no installation needed to use these functions.
Description
PH
P
__construct()
addAttribute()
addChild()
asXML()
attributes()
children()
getDocNamespaces()
getName()
getNamespaces()
registerXPathNamespace()
simplexml_import_dom()
simplexml_load_file()
simplexml_load_string()
xpath()
Installation
The string functions are part of the PHP core. There is no installation needed to use these functions.
Description
PH
P
addcslashes()
addslashes()
bin2hex()
chop()
Alias of rtrim()
chr()
chunk_split()
convert_cyr_string()
convert_uudecode()
convert_uuencode()
count_chars()
crc32()
crypt()
echo()
Outputs strings
explode()
fprintf()
get_html_translation_table()
hebrev()
hebrevc()
Converts Hebrew text to visual text and new lines (\n) into
<br />
html_entity_decode()
htmlentities()
htmlspecialchars_decode()
htmlspecialchars()
implode()
join()
Alias of implode()
levenshtein()
localeconv()
ltrim()
md5()
md5_file()
metaphone()
money_format()
nl_langinfo()
nl2br()
number_format()
ord()
parse_str()
print()
Outputs a string
printf()
quoted_printable_decode()
quotemeta()
rtrim()
setlocale()
sha1()
sha1_file()
similar_text()
soundex()
sprintf()
sscanf()
str_ireplace()
str_pad()
str_repeat()
str_replace()
str_rot13()
str_shuffle()
str_split()
str_word_count()
strcasecmp()
strchr()
strcmp()
strcoll()
strcspn()
strip_tags()
stripcslashes()
stripslashes()
stripos()
stristr()
strlen()
strnatcasecmp()
strnatcmp()
(case-sensitive)
strncasecmp()
strncmp()
strpbrk()
strpos()
strrchr()
strrev()
Reverses a string
strripos()
strrpos()
strspn()
strstr()
strtok()
strtolower()
strtoupper()
strtr()
substr()
substr_compare()
substr_count()
substr_replace()
trim()
ucfirst()
ucwords()
vfprintf()
vprintf()
vsprintf()
wordwrap()
Description
CRYPT_SALT_LENGTH
CRYPT_STD_DES
CRYPT_EXT_DES
CRYPT_MD5
PH
P
HTML_SPECIALCHARS
HTML_ENTITIES
ENT_COMPAT
ENT_QUOTES
ENT_NOQUOTES
CHAR_MAX
LC_CTYPE
LC_NUMERIC
LC_TIME
LC_COLLATE
LC_MONETARY
LC_ALL
LC_MESSAGES
STR_PAD_LEFT
STR_PAD_RIGHT
STR_PAD_BOTH
Installation
The XML functions are part of the PHP core. There is no installation needed to use these functions.
PHP: indicates the earliest version of PHP that supports the function.
Function
Description
PH
P
utf8_decode()
utf8_encode()
xml_error_string()
xml_get_current_byte_index()
xml_get_current_column_number()
xml_get_current_line_number()
xml_get_error_code()
xml_parse()
xml_parse_into_struct()
xml_parser_create_ns()
xml_parser_create()
xml_parser_free()
xml_parser_get_option()
xml_parser_set_option()
xml_set_character_data_handler()
xml_set_default_handler()
xml_set_element_handler()
xml_set_end_namespace_decl_handler()
xml_set_external_entity_ref_handler()
xml_set_notation_decl_handler()
xml_set_object()
xml_set_processing_instruction_handler()
xml_set_start_namespace_decl_handler()
xml_set_unparsed_entity_decl_handler()
XML_ERROR_NONE (integer)
XML_ERROR_NO_MEMORY (integer)
XML_ERROR_SYNTAX (integer)
XML_ERROR_NO_ELEMENTS (integer)
XML_ERROR_INVALID_TOKEN (integer)
XML_ERROR_UNCLOSED_TOKEN (integer)
XML_ERROR_PARTIAL_CHAR (integer)
XML_ERROR_TAG_MISMATCH (integer)
XML_ERROR_DUPLICATE_ATTRIBUTE (integer)
XML_ERROR_JUNK_AFTER_DOC_ELEMENT (integer)
XML_ERROR_PARAM_ENTITY_REF (integer)
XML_ERROR_UNDEFINED_ENTITY (integer)
XML_ERROR_RECURSIVE_ENTITY_REF (integer)
XML_ERROR_ASYNC_ENTITY (integer)
XML_ERROR_BAD_CHAR_REF (integer)
XML_ERROR_BINARY_ENTITY_REF (integer)
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF (integer)
XML_ERROR_MISPLACED_XML_PI (integer)
XML_ERROR_UNKNOWN_ENCODING (integer)
XML_ERROR_INCORRECT_ENCODING (integer)
XML_ERROR_UNCLOSED_CDATA_SECTION (integer)
XML_ERROR_EXTERNAL_ENTITY_HANDLING (integer)
XML_OPTION_CASE_FOLDING (integer)
XML_OPTION_TARGET_ENCODING (integer)
XML_OPTION_SKIP_TAGSTART (integer)
XML_OPTION_SKIP_WHITE (integer)
Installation
For the Zip file functions to work on your server, these libraries must be installed:
PHP: indicates the earliest version of PHP that supports the function.
Function
Description
PH
P
zip_close()
zip_entry_close()
zip_entry_compressedsize()
zip_entry_compressionmethod()
zip_entry_filesize()
zip_entry_name()
zip_entry_open()
zip_entry_read()
zip_open()
zip_read()