PHP tutorial - basics: Difference between revisions
m (using an external editor) |
m (using an external editor) |
||
Line 74: | Line 74: | ||
PHP code is defined within an XML processing instruction | PHP code is defined within an XML processing instruction | ||
< | <source lang="php"> | ||
<?php ..... ?> | |||
</source> | |||
For example: | |||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php |
Revision as of 18:39, 9 February 2010
Introduction
- Learning goals
- Be able to make modifications in a PHP file (in particular configuration files)
- Prerequisites
- Some HTML and XHTML, i.e. HTML and XHTML elements and attributes
- Moving on
- Level and target population
- Beginners
- Remarks
- This is a first version ...
PHP standards for Hypertext Preprocessor
History:
- Personal Home Page Generator (Php2/FI) in the mid-nineties
- PHP 3 since 1997,
- PHP 4 since 1999,
- PHP 5 since 2004/2005
Since PHP 3.0, the language is used to write larger web applications. PHP Version 3.0 was defined as HTML-embedded scripting language. Much of its syntax is borrowed from C, Java and Perl with a couple of unique PHP-specific features thrown in. The goal of the language is to allow web developers to write dynamically generated pages quickly. This definition remains the same in the PHP 5 FAQ.
Principle:
- Analogy with JavaScript: PHP code can be mixed with HTML
- BUT: The server reads the files and computes it (and end-user never can see the code)
- Servers are configured to read *.php files as PHP (sometimes also *.php3, *.php4 etc.)
Purpose:
- Create dynamic web pages (small applications) or program larger web applications
Links:
- See PHP links
PHP features
Availability:
- Free and open source (GPL)
- cross-platform (Unix, Linux, BSD, MacOS X, Win32, etc.)
Installation:
- can run as CGI program (external to a web server)
- can run as web server module (this is the standard case, e.g. with the Apache server)
- can be used as command-line scripting engine
Highlights:
- good database support (Oracle, Sybase, Microsoft, MySQL, Postgres, ODBC, etc.)
- good system integration (files)
- complete programming language, including OO support
- easy to learn
- made for internet application (cookies, authentication, sessions, redirection...)
- dozens of integrated libraries (LDAP, PDF, XML, GIF,...)
- support for object-oriented programming since PHP 4 (PHP 5 introduced a new model)
Alternatives to PHP:
- ASP (Microsoft)
- JSP (Java)
- Cold Fusion (Adobe)
HTML and PHP integration
PHP code is defined within an XML processing instruction
<?php ..... ?>
For example:
<?php
echo("if you want to serve XML documents, do like this\n");
?>
File inclusion
Let's now introduce our first PHP code. PHP code can be spread over many files (hundreds or thousands in some larger applications).
Include:
inserts content of file when this expression is evaluated
- include ("file name");
include("style.php");
Require:
inserts content of file when the php file is loaded
- require ("file name");
require("my_functions.inc");
Variant (recommended):
include_once() and require_once().
Only include once, will make your application faster.
File inclusion example
<HTML>
<HEAD>
<TITLE>Simple Include Demo (21-Apr-1998)</TITLE>
<?php include("style.text"); ?>
</HEAD>
<BODY>
<H1>Simple Include Demo</H1>
In this file we include a <A HREF="style.text">style sheet</A> and
a <A HREF="footer.text">footer</A>.
<P>
Look at <A HREF="include1.phps">the formatted source</A>
or the <A HREF="include1.source">unformatted one</A>
if you want to know how this is done.
<H1>Yet another styled title</H1>
<UL>
<LI> bullet item </LI>
<LI> bullet item </LI>
</UL>
<?php
/* A footer */
include("footer.text");
?>
</BODY>
</HTML>
The programming language PHP
Elements of programming
Program= algorithm + data structures
PHP syntax overview:
PHP looks like "C" (C, C++, Java, Perl, etc.)
- Each instruction is ended with a ";"
- Comments // or #, or included within /* ... */
Variables and assignments
Variables are “containers” for information.
- Each identifier with a $ in front is a variable
- Variables don’t need to be declared
- Assignment operator: =
Principle:
$variable = "content" ;
Illustrations:
$a = 10; $name = "Patrick Ott"; $sum = 123.456;
Using variables with content strings example:
- /guides/php/examples/simple/simple-echo.php (application)
- /guides/php/examples/simple/simple-echo.phps (pretty source)
- /guides/php/examples/simple/simple-echo.text (source)
<BODY>
<H1>Simple Echo of variables with PHP</H1>
<?php
$a = 10;
$nom = "Patrick Ott";
$somme = 123.456;
echo "Le nommé $nom a $somme francs dans la poche, mais il voudrait $a fois plus.";
?>
<p><hr>
</BODY>
- echo is an “instruction” to display a string (chain of characters)
- Note: all the $xxx are replaced by their contents !
Simple arrays
- Arrays are a sort of lists (several values within the same variable)
Array creation - method 1:
$numbers[] =1; $numbers[] =2; $numbers[] =3; $numbers[] =4;
Array creation - method 2:
$numbers = array (1, 2, 3, 4); $names = array ("Pat", "Dave", "Surf", "K");
Use of simple arrays:
$array[index]
Index starts at 0 ! (zero). Example:
echo "Second element of $names is: $names[1];
Example: Simple variables and some HTML generation
<?php
// Some simple HTML
echo"<h1>Simple arrays</h1>";
$utilisateur = "cher étudiant";
$no_utilisateur = 3;
$numbers = array (1, 2, 3, 4);
$names = array ("Pat", "Dave", "Surf", "K");
$names[] = "Zorro";
// Note html <br> tag
echo "Salut $utilisateur. Vous êtes le numéro $no_utilisateur.<br>";
// echo with concatenation, use it to print complex things
echo "La quatrième personne s’appelle " . $names[3] ." ";
// simple echo
echo "et la cinquième personne s’appelle $names[4].<p>";
$n = sizeof($numbers);
// note that we have to use \ in order to print a $ !
echo "We have $n numbers in array \$numbers.";
?>
Associative arrays and multi-dimensional tables
$fruits = array(
"fruits" => array("a"=>"orange","b"=>"banana","c"=>"apple"),
"numbers" => array(1, 2, 3, 4, 5, 6)
"holes" => array("first", 5 => "second", "third")
);
- Summary - variables
- You should, but don’t need to initialize varibales
$a = 1234; # decimal number
$a = -123; # a negative number
$a = 1.234; $a = 1.2e3; # floating point number
$str = "This is a string"; # string
$a[0] = "abc"; # element zero of un array
$a[1] = "def"; # element 1 of an array
$b["foo"] = 13; # element "foo" of an array
- Constants.
- Constants are "variables" with information that cannot change.
- Do not use "$".
- By convention, use capital letters.
- Definition
- define(<NAME>, <value>);
define("PI", 3.14);
define("REMERCIEMENTS", "Thanx for using our program<br>");
define("SALUTATIONS", "Je vous prie d’agréer, Madame, Monsieur, l’expression de nos sentiments dévoués");
$radius = 12;
$perimeter = 2 * $radius * PI;
echo REMERCIEMENTS;
echo "le périmètre du cercle is de " . $perimeter . "<br>";
echo SALUTATIONS;
result:
Thanx for using our program le périmètre du cercle is de 77.76 Je vous prie d’agréer, Madame, Monsieur, l’expression de nos sentiments dévoués.
- Simple expressions and operators
- Arithmetic operators
- Like normal math:
- Simple arithmetic
Application
|
: /guides/php/examples/simple/simple-calcul.php
|
Source
|
: /guides/php/examples/simple/simple-calcul.phps
|
To copy
|
: /guides/php/examples/simple/simple-calcul.text
|
$leisure_satisfaction = 5;
$work_satisfaction = 7;
$family_satisfaction = 8;
$index = ($leisure_satisfaction + $work_satisfaction + $family_satisfaction)
/ 3 ;
echo "<p align=center> Satisfaction Index = $index <b>";
assignment + addition in one step:
// sets $a to 8, as if we had said: $a = $a + 5;
$a += 5;
- Operators for strings
concatenation of strings
Use the "." operator
example:
$a = "Hello ";
$b = $a . "World!"; // now $b = "Hello World!"
- Note: There are dozens of string manipulation functions in PHP !!
assignment + concatenation in one step
$b = "Hello ";
// sets $b to "Hello There!", just like $b = $b . "There!";
$b .= "There!";
- Logical operators
$b | |||
- comparison
- You can use parenthesis if you like to group operators !
- Simple comparisons
- [/guides/php/examples/simple/simple-compare.php /guides/php/examples/simple/simple-compare.php]
- [/guides/php/examples/simple/simple-compare.phps /guides/php/examples/simple/simple-compare.phps]
- Note: in PHP each number equal or small than 0 is FALSE, each superior is TRUE
$a = "Migros";
$b = "Coop";
$result = $a==$b;
$result2 = $a > $b;
$result3 = $result==TRUE;
echo "Result One = $result. Result TWO = $result2. Result THREE = $result3.";
- Selection (Conditions and tests)
Principle (several typical situations):
- If a condition is true then do ...
- If a condition is true then do ... , else do .....
- If a condition is true then do ... , else if an other condition is true do ... , else ......
"IF" (several variants)
- if (expr) statements
- if (expr) statements else statements
- if (expr) statements elseif (expr) statements else ...
- if (expr) statements elseif (expr) statements [ elseif (expr) ... ]
- expr = Expression must return TRUE or FALSE
- statements = simple instructions or a block or instructions
- simple: $a = 10;
- block: { $a =12; echo "salut"; ..... }
- Execution model
- If expression = TRUE then execute statement(s)
- If expression = FALSE then go to the next clause
- Simple "if" (comparison)
- /guides/php/examples/simple/simple-if.php
- /guides/php/examples/simple/simple-if.phps (source)
- Compares two numbers: $a and $b, and displays a message.
- Here is a decision tree.
Simple decision tree
<?php
$a = 10; $b = 11;
print "a was $a, b was $b. ";
if ($a > $b) {
print "a is bigger than b";
} elseif ($a == $b) {
print "a is equal to b";
} else {
print "==> a is smaller than b.";
}
?>
See also the following:
- switch
- foreach
- do ... while
- break and continue
- PHP functions
- Like all programming languages PHP allows to define procedures/functions.
- A function is a a mini program that has a name and that you can "call" (invoke).
"Hey, take these informations, do something and (maybe) return the result"
- Usually, you find function definition in the beginning of program (or within include files)
- Color mixing for paint
- http://tecfa.unige.ch/guides/php/examples/simple/ (files color-mix.*)
function color_mix($color1,$color2) {
$result= "unknown";
if ($color1 == "bleu" and $color2 == "rouge") {
$result = "violet"; }
elseif ($color1 == "jaune" and $color2 == "bleu") {
$result = "green"; }
elseif ($color1 == "noire" and $color2 == "blanc") {
$result = "gris"; }
else {
$result = "orange"; }
return $result;
}
// Two calls to this function, results saved in variables
$situation1 = color_mix ("bleu", "rouge") ;
$situation2 = color_mix ("jaune", "bleu") ;
// Print
echo "Bleu et rouge donne $situation1 <br>";
echo "Jaune et bleu donne $situation2";
- HTML generation with functions
- /guides/php/examples/simple/function-demo.php
- /guides/php/examples/simple/function-demo.phps
<?php
// html formats a data element
'''function pretty_print''' ($output) {
separator ();
echo "<p align='center'> <strong>ELEMENT:</strong> $output </p>";
}
// outputs a separator
'''function separator ()''' {
echo "<hr size=4 width=70%>";
}
// data we have
$el1 = "Un arbre jaune";
$el2 = "Ein gelber Hund";
$el3 = "A yellow sky";
// dump the data
'''pretty_print'''($el1);
'''pretty_print'''($el2);
'''pretty_print'''($el3);
'''separator''' ();
echo "<hr>";
?>
- Loops (iterations)
The "for loop" syntax
FOR (expr1; expr2; expr3) statement
- expr1 is evaluated at start
- expr2 is evaluated at start of each loop,if result = TRUE the loop will continue, else it will stop
- expr3 is evaluated at the end of each loop,
- statement is executed for each loop.
- Love generation
- see: /guides/php/examples/html-generate/love.php
- see: /guides/php/examples/html-generate/love.phps
for ($i=1; $i<=10; $i++) {
print "I love you so ! "; }
result:love you so ! I love you so ! I love you so ! I love you so ! I love you so ! I love you so ! ......
echo "Je t’aime plus que toi.<br>
for ($i=2; $i<=10; $i++) {
echo "Non, je t’aime $i fois plus que toi ! ";
}
result:
Je t’aime plus que moi. Non, je t’aime 2 fois plus que moi ! Non, je t’aime 3 fois plus que moi ! Non, je t’aime 4 fois plus que moi ! Non, je t’aime 5 fois plus que moi ! Non, je t’aime 6 .....
Other PHP elements:
- $i is used as so-called iteration variable. At start $i = 1 or 2.
- echo
- print works like print.
- Generation of html tables
- see: /guides/php/examples/html-generate/love.php
- see: /guides/php/examples/html-generate/love.phps
- see: /guides/php/examples/html-generate/love.text
'''$love_list''' = array ("a lot", "a bit", "somewhat", "à mourir", "forever", "until notice", "more than I love my dog");
<table border align="center">
<?
// define a function to generate a table
function build_table($list) {
'''for ($i=0; $i < sizeof($list); $i++) {
$love_text = $list[$i];
echo "<tr> <td> ... I love you</td> <td>$love_text</td>";
}
}
// call the function, generate the table
build_table($love_list);
?>'''
</table>
Note:
- PHP is used with the HTML element
- The build_table function is called with an array
- There exist more looping constructs in PHP (like while or for-each) !
- Practical advice
- Debugging
- Look at the generated HTML code "View Source")
- Insert this in you PHP file (will give you lots of information !)
phpinfo();
- Insert print statements!
echo "DEBUG: \$var = $var"; echo "TEST: var = $var";
- Raise "error reporting" to its maximum !!!
Insert this on top:
error_reporting(E_ALL);
- Portals
- Warning: NEVER insert blank lines at start or end of a file !!
- Most files should stop like this (no line feed !!) ?>
- ... because PHP starts producing HMTL headers as soon as it sees a little blank space before or after php code <?php .... ?>
- HTML forms processing with PHP
- Forms processing with PHP I (Calcul)
- Simple quiz and POST to a php file
- See: /guides/php/examples/simple-calculate/formulaire.html
- Source: /guides/php/examples/simple-calculate/formulaire.text
- This example shows:
- how to treat and HTML form
- how to compute and display a result.
[[Image:]]
Part of the HTML form:<form '''''action="calcul.php"''''' method="post"> Quelles sont vos connaissances de HTML ? <input type="radio" '''''name="choice" value="1"''''' checked>faibles <input type="radio" name="choice" value="2">moyennes <input type="radio" name="choice" value="3">bonnes <br> Indiquez votre expertise en programmation: <input type="radio" '''''name="choice2" value="1"''''' checked>absente <input type="radio" name="choice2" value="2">moyenne <input type="radio" name="choice2" value="3">bonne <P> <input type="submit" value="Voir le result!"> </form>
[[Image:]] - Retrieve values of an HTML form
- Data from a from a stored by the server in a so-called super global variables
- Use $_POST to deal with POST variables
- POST: values are handed over attached (and not visible) to the server
- Use $_GET for GET variables
- GET: values are handed over in the URL string (user can see these)
- You can use the "name" attribute of the form to retrieve values
In our example, we use $_POST:
$choice = $_POST[’choice’]; $choice2 = $_POST[’choice2’];
- In our example, we will use two PHP variables:$choice and $choice2
- Computing and display of results
- see: /guides/php/examples/simple-calculate/calcul.phps
- we add result of the two values and compute a result with an if clause.
<?php
// Get values from the form $choice = $_POST[’choice’]; $choice2 = $_POST[’choice2’];
// Compute score $score = $choice + $choice2;
// Compute message as function of result
echo "Votre score is de " . $score . "
";if ($score < 3) {
echo "Vous êtes un débutant
";} elseif ($score < 5) {
echo "Vous avez un niveau moyen
";} else {
echo "Vous êtes un expert !
";} ?>
- Inhibit direct access to PHP (without data)
- (1) if (isset($_POST[’choice’])) then { ..... } else { echo "sorry ......."; }
- (2) Alternative: if (!isset($_POST[’choice’])) {echo "sorry"; exit; }
- Forms processing with PHP II
- Checkboxes with PHP - arrays
- /guides/php/examples/simple-calculate/formulaire4.text
- /guides/php/examples/simple-calculate/formulaire4.html
Part of the HTML code:
<form action="'''calcul4.php'''" method=post> Quels sont vos couleurs préféres? <br> <input type="'''checkbox" name="choice[]"''' value="Red">Red <table bgcolor="red" width="50"><tr><td> </td></tr></table> <input type="checkbox" '''name="choice[]'''" value="Blue">Blue <table bgcolor="blue" width="50"><tr><td> </td></tr></table> <input type="checkbox" '''name="choice[]'''" value="Green">Green <table bgcolor="green" width="50"><tr><td> </td></tr></table> ..... <input type="checkbox" '''name="choice[]'''" value="Black">Black <table bgcolor="black" width="50"><tr><td> </td></tr></table> <input type="submit" value="Voir le result!"> </form>
- Remember the syntax to put all values into an array: "choice[]"
PHP code:
<?php $choice = $_POST[’choice’]; echo("<h3>Vos couleurs préférées sont </h3>"); for ($i=0;$i<sizeof($choice);$i++) { if (isset('''$choice[$i]''')) { echo("'''$choice[$i]''' - "); } } ?>
- All in one solution ?
- You can put both the form and the processing code in a single page
- In this case, test if the file is called with data from a form, see $process below
<?php if (!isset($_POST[’process’])) { ?>''' //... lets display the form) <FORM METHOD="POST" ACTION="<? echo $PHP_SELF ?>"> ..... </FORM> '''<?php } else {''' //... we got data, so let’s process '''} ?>'''
- Polishing: Test if we have all the POST/GET variables
2 methods to test what we have in $_POST or $_GET
- "array_key_exists()"
if (array_key_exists(’first’, $_POST)) { .... do something ...};
- "isset()" to see if a variable exists:
if (isset($POST[’first’]) ) { .... do ....}
- The difference is that
- array_key_exists returns TRUE if value is NULL
- isset returns FALSE if value is NULL.
ATTENTION, to test <input type="text"> you also may want to test if there is an empty string.
- “empty()”
- to decide if user filled in a text field
if (empty ($input) ) { ... complain ... } else { ... do ...}
- empty() returns TRUE if a value is: "", 0, "0", NULL, FALSE, array(), ....
- Session management
- PHP has session support (can keep variables over a whole user session).
- Each visitor gets an identifier (a "sessions id"). It is stored in a cookie (in the www client) or within the URL.
- This information is available in super global: $_SESSION
- Restrict repetitive access to a page
- http://tecfa.unige.ch/guides/php/examples/sessions/
session_start(); if (!isset($_SESSION[’count’])) { $_SESSION[’count’] = 0; } else { $_SESSION[’count’]++; } if ($_SESSION[’count’] > 2) { echo ’<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">’; echo "<html> <body>"; echo "Sorry it’s over you can’t do it twice"; echo "</body> </html>"; exit; } // .... continue code with access time = 1 and 2
- On-line surveys and file-based storage
- Survey
- see: http://tecfa.unige.ch/guides/php/examples/form-file-demo/
- new-entry.php contains the form and code
- dump_results.php shows file contents
- The HTML form
- This time we use PHP to generate the HTML code
$scales = array("food", "work", "love", "leisure", "sports"); function scale ($thing) { echo "<TR> <TD align=right>Importance of <STRONG>$thing</STRONG>:</TD>"; echo "<TD><select name=$thing>"; echo "<option value=1>1 - totally unimportant"; echo "<option value=2>2 - not important"; echo "<option value=3 selected>3 - rather not important"; echo "<option value=4>4 - slightly important"; echo "<option value=5>5 - rather important"; echo "<option value=6>6 - very important"; echo "</select>"; echo "</TD></TR>"; } function dump_scales () { global $scales; reset($scales); do { $scale = scale(current($scales)); echo "$scale\n"; } while (next($scales)); } ?> <form> <table> ...... dump_scales(); ...... </table> </form> Ecrire dans un fichier // check existance of file (or try to create it) // a better alternative to touch() would be is_file, is_writable and so on. $try = touch($file_name); if (!$try) { echo "<p>Sorry I can’t open a file, something is wrong"; exit; } // this is the stuff we get from the form, we insert it into an array $input = array ($login, $password, $fullname, $url, $food, $work, $love, $leisure, $sports); // so we can make a big string with tabs between the elements // note that we add a \n (line break) to the end of the string. $output_line = implode ($input, " ")."\n"; // Now open the file (get a file pointer) // We will append to it and therefore use the "a" option '''$output_stream = fopen($file_name, "a");''' // and dump the string into the file '''$result = fputs ($output_stream, $output_line);''' // give feedback if ($result) { echo "<p>Your data have successfully been registered."; } else { echo "<p>Too bad, the db did not want your data."; } // close the file pointer fclose($output_stream); ?> <? // EXIT here ... we don’t want to see the form again. If you do, kill the exit exit; } ?>
Remember
fopn (<file name>, "a")
- to open a file and then append.
fputs(<handle>, “string”)
- to write to a file
- WARNING: This will attract spammers !!
- Dump contents of a file
with an “include” <source lang="htmlstrict"> <BODY> <H1>PHP/MySQL Demo - Dump Database Contents</H1> <? /* Daniel.Schneider@tecfa.unige.ch Will dump the contents of the results file */ ?> <strong>Results registered so far:</strong> <pre> <? readfile("results/result.text"); ?>
.......... </BODY>
</source>
Important:- Use "readfile", and not "include" or "require", else you will get hacked !!
- Other formats than HTML
Principle: in the FIRST line of your program you have to define the content-type:
- example: Header("Content-type: image/gif");
Example XML
Header("Content-type: text/xml);
Example SVG
Header("Content-type: image/svg+xml");
Example RDF
Header("Content-type: application/rdf+xml");
- Generate some simple XML
- http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul-xml.php
- http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul-xml.phps
- http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul-xml.css
<?php '''header("Content-type: text/xml");''' '''print(’<?xml version="1.0" encoding="iso-8859-1"?>’ . "\n");''' '''print(’<?xml-stylesheet href="simple-calcul-xml.css" type="text/css" ?>’);''' $leisure_satisfaction = 5; $work_satisfaction = 7; $family_satisfaction = 8; $index = ($leisure_satisfaction + $work_satisfaction + $family_satisfaction) / 3 ; echo "'''<resultat>''' Satisfaction Index = '''$index''' '''</resultat>'''"; ?>