PHP tutorial - basics: Difference between revisions
m (Created page with '{{Incomplete}} {{web technology tutorial|Intermediate}} == Introduction == <div class="tut_goals"> ; Learning goals * Be able to make modifications in a PHP file (in particular …') |
m (using an external editor) |
||
Line 9: | Line 9: | ||
* Some [[HTML]] and [[XHTML]], i.e. [[HTML and XHTML elements and attributes]] | * Some [[HTML]] and [[XHTML]], i.e. [[HTML and XHTML elements and attributes]] | ||
; Moving on | ; Moving on | ||
* See [[web technology tutorials]] | |||
; Level and target population | ; Level and target population | ||
* Beginners | * Beginners | ||
Line 15: | Line 15: | ||
* This is a first version ... | * This is a first version ... | ||
</div> | </div> | ||
'''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 application]]s. 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 [http://ch.php.net/manual/en/faq.general.php 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 | |||
<tt>'''<nowiki><?php ..... ?></nowiki>'''</tt> | |||
<source lang="php"> | |||
<?php | |||
echo("if you want to serve XML documents, do like this\n"); | |||
?> | |||
</source> | |||
'''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)''': | |||
<tt>'''include_once()'''</tt> and <tt>'''require_once()'''</tt>. | |||
Only include once, will make your application faster. | |||
'''File inclusion example''' | |||
: [http://tecfa.unige.ch/guides/php/examples/includes/ http://tecfa.unige.ch/guides/php/examples/includes/] | |||
<source lang="xml"> | |||
<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> | |||
</source> | |||
== The programming language PHP == | |||
=== Elements of programming === | |||
: <center>'''Program= algorithm + data structures'''</center> | |||
[[image:programming-elements.png|frame|none|Programming elements]] | |||
: '''PHP syntax''' | |||
: 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: = | |||
: '''Simple variables''' | |||
: assignment | |||
$variable = "content" ; | |||
Illustrations: | |||
$a = 10; | |||
$name = "Patrick Ott"; | |||
$sum = 123.456; | |||
: '''Display variable contents''' | |||
: Files: | |||
{| class="prettytable" | |||
| <center>Application</center> | |||
| : [http://tecfa.unige.ch/guides/php/examples/simple/simple-echo.php /guides/php/examples/simple/simple-echo.php] | |||
|- | |||
| <center>Source (to see)</center> | |||
| : [http://tecfa.unige.ch/guides/php/examples/simple/simple-echo.phps /guides/php/examples/simple/simple-echo.phps] | |||
|- | |||
| <center>Source (to copy</center> | |||
| : [http://tecfa.unige.ch/guides/php/examples/simple/simple-echo.text /guides/php/examples/simple/simple-echo.text] | |||
|} | |||
: | |||
<nowiki><BODY></nowiki> | |||
<nowiki><H1>Simple Echo of variables with PHP</H1></nowiki> | |||
<nowiki><?php</nowiki> | |||
$a = 10; | |||
$nom = "Patrick Ott"; | |||
$somme = 123.456; | |||
echo "Le nommé $nom a $somme francs dans la poche, mais il voudrait $a fois plus."; | |||
?> | |||
<nowiki><p><hr></nowiki> | |||
<nowiki></BODY></nowiki> | |||
: echo 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 list (several values within the same variable) | |||
Method 1: | |||
<nowiki>$numbers[] =1;</nowiki> | |||
<nowiki>$numbers[] =2;</nowiki> | |||
<nowiki>$numbers[] =3;</nowiki> | |||
<nowiki>$numbers[] =4;</nowiki> | |||
Method 2: | |||
$numbers = array (1, 2, 3, 4); | |||
$names = array ("Pat", "Dave", "Surf", "K"); | |||
'''''Simple arrays usage''''' | |||
<nowiki>$array[index]</nowiki> | |||
: Index starts at 0 ! (zero) | |||
<nowiki>echo "Second element of $names is: $names[1];</nowiki> | |||
: '''Simple variables and some HTML generation''' | |||
: '''See: [http://tecfa.unige.ch/guides/php/examples/simple/simple-arrays.php /guides/php/examples/simple/simple-arrays.php] ''' | |||
<nowiki><?php</nowiki> | |||
// Some simple HTML | |||
<nowiki>echo"<h1>Simple arrays</h1>";</nowiki> | |||
$utilisateur = "cher étudiant"; | |||
$no_utilisateur = 3; | |||
$numbers = array (1, 2, 3, 4); | |||
$names = array ("Pat", "Dave", "Surf", "K"); | |||
<nowiki>$names[] = "Zorro";</nowiki> | |||
<nowiki>// Note html <br> tag</nowiki> | |||
<nowiki>echo "Salut $utilisateur. Vous êtes le numéro $no_utilisateur.<br>";</nowiki> | |||
// echo with concatenation, use it to print complex things | |||
<nowiki>echo "La quatrième personne s’appelle " . $names[3] ." ";</nowiki> | |||
// simple echo | |||
<nowiki>echo "et la cinquième personne s’appelle $names[4].<p>";</nowiki> | |||
$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" <nowiki>=> array("a"=>"orange","b"=>"banana","c"=>"apple"),</nowiki> | |||
"numbers" => array(1, 2, 3, 4, 5, 6) | |||
"holes" <nowiki>=> array("first", 5 => "second", "third")</nowiki> | |||
); | |||
: '''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 | |||
<nowiki>$a[0] = "abc"; # element zero of un array</nowiki> | |||
<nowiki>$a[1] = "def"; # element 1 of an array</nowiki> | |||
<nowiki>$b["foo"] = 13; # element "foo" of an array</nowiki> | |||
: '''Constants.''' | |||
: Constants are "variables" with information that cannot change. | |||
: Do not use "$". | |||
: By convention, use capital letters. | |||
: '''Definition''' | |||
: <nowiki>define(<NAME>, <value>);</nowiki> | |||
define("PI", 3.14); | |||
<nowiki>define("REMERCIEMENTS", "Thanx for using our program<br>");</nowiki> | |||
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; | |||
<nowiki>echo "le périmètre du cercle is de " . $perimeter . "<br>";</nowiki> | |||
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: | |||
{| class="prettytable" | |||
| <center>'''example'''</center> | |||
| <center>'''name'''</center> | |||
| <center>'''Returns the result:'''</center> | |||
|- | |||
| <center>$a +$b</center> | |||
| <center>Addition</center> | |||
| <center>Sum of $a and $b</center> | |||
|- | |||
| <center>$a - $b</center> | |||
| <center>Subtraction</center> | |||
| <center>$b minus $a</center> | |||
|- | |||
| <center>$a * $b</center> | |||
| <center>Multiplication</center> | |||
| | |||
|- | |||
| <center>$a / $b</center> | |||
| <center>Division</center> | |||
| | |||
|- | |||
| <center>$a % $b</center> | |||
| <center>Modulo</center> | |||
| <center>Rest of integer division $a by $b</center> | |||
|} | |||
: | |||
: '''Simple arithmetic''' | |||
{| class="prettytable" | |||
| <div align="right">'''Application'''</div> | |||
| : [http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul.php /guides/php/examples/simple/simple-calcul.php ] | |||
|- | |||
| <div align="right">'''Source'''</div> | |||
| : [http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul.phps /guides/php/examples/simple/simple-calcul.phps] | |||
|- | |||
| <div align="right">'''To copy '''</div> | |||
| : [http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul.text /guides/php/examples/simple/simple-calcul.text] | |||
|} | |||
: | |||
$leisure_satisfaction = 5; | |||
$work_satisfaction = 7; | |||
$family_satisfaction = 8; | |||
$index = ($leisure_satisfaction + $work_satisfaction + $family_satisfaction) | |||
/ 3 ; | |||
<nowiki>echo "<p align=center> Satisfaction Index = $index <b>";</nowiki> | |||
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''' | |||
{| class="prettytable" | |||
| <center>'''example'''</center> | |||
| <center>'''name'''</center> | |||
| <center>'''result'''</center> | |||
|- | |||
| <center>$a and $b</center> | |||
| <center>"and"</center> | |||
| <center>result true, if $a et $b are true</center> | |||
|- | |||
| <center>$a && $b</center> | |||
| <center>"and"</center> | |||
| <center>"</center> | |||
|- | |||
| <center>$a or $b</center> | |||
| <center>"or"</center> | |||
| <center>result true, if $a or $b or both are true</center> | |||
|- | |||
| <center>$a || $b</center> | |||
| <center>"or"</center> | |||
| <center>"</center> | |||
|- | |||
| <center>$a xor $b</center> | |||
| <center>Or exclusive</center> | |||
| <center>result true, if $a or $b are true, but not both</center> | |||
|- | |||
| <center>! $a</center> | |||
| <center>"not"</center> | |||
| <center>result true, if $a is false(</center> | |||
|} | |||
: '''comparison''' | |||
{| class="prettytable" | |||
| <center>'''example'''</center> | |||
| <center>'''name'''</center> | |||
| <center>'''result'''</center> | |||
|- | |||
| <center>$a == $b</center> | |||
| <center>equal</center> | |||
| <center>True if $a is equal to $b.</center> | |||
|- | |||
| <center>$a===$b</center> | |||
| <center>identical</center> | |||
| <center>True if $a==$b and same type (php 4.x)</center> | |||
|- | |||
| <center>$a != $b</center> | |||
| <center>different</center> | |||
| <center>True if $a is not equal to $b.</center> | |||
|- | |||
| <center>$a!==$b</center> | |||
| <center>not identical</center> | |||
| <center>True if $a!=$b or not same type (php4.x)</center> | |||
|- | |||
| <center><nowiki>$a < $b</nowiki></center> | |||
| <center>inferior</center> | |||
| <center>True if $a is strictly less than $b.</center> | |||
|- | |||
| <center>$a > $b</center> | |||
| <center>superior</center> | |||
| <center>True if $a is strictly greater than $b.</center> | |||
|- | |||
| <center><nowiki>$a <= $b</nowiki></center> | |||
| <center>inferior or equal</center> | |||
| <center>True if $a is less than or equal to $b.</center> | |||
|- | |||
| <center>$a >= $b</center> | |||
| <center>superior or equal</center> | |||
| <center>True if $a is greater than or equal to $b</center> | |||
|} | |||
: | |||
: 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'''<nowiki> (expr) statements [ </nowiki>'''elseif '''(expr) ... ] | |||
: <tt>''expr''</tt> = Expression must return TRUE or FALSE | |||
: <tt>''statements ''</tt><nowiki>= simple instructions or a block or instructions</nowiki> | |||
: 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)''' | |||
: '''/[http://tecfa.unige.ch/guides/php/examples/simple/simple-if.php guides/php/examples/simple/simple-if.php] | |||
: '''/[http://tecfa.unige.ch/guides/php/examples/simple/simple-if.phps guides/php/examples/simple/simple-if.phps]<tt> </tt>'''(source)''' | |||
: Compares two numbers: $a and $b, and displays a message. | |||
: Here is a decision tree. | |||
: <center>'''Simple decision tree'''</center> | |||
<center>[[Image:]]</center> | |||
<nowiki><?php</nowiki> | |||
$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) | |||
<center>[[Image:]]</center> | |||
: '''Color mixing for paint''' | |||
: [http://tecfa.unige.ch/guides/php/examples/simple/ 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 <nowiki>et rouge donne $situation1 <br>";</nowiki> | |||
echo "Jaune et bleu donne $situation2"; | |||
: '''HTML generation with functions''' | |||
: [http://tecfa.unige.ch/guides/php/examples/simple/function-demo.php /guides/php/examples/simple/function-demo.php] | |||
: [http://tecfa.unige.ch/guides/php/examples/simple/function-demo.phps /guides/php/examples/simple/function-demo.phps] | |||
<nowiki><?php</nowiki> | |||
// html formats a data element | |||
'''function pretty_print''' ($output) { | |||
separator (); | |||
<nowiki>echo "<p align='center'> <strong>ELEMENT:</strong> $output </p>";</nowiki> | |||
} | |||
// outputs a separator | |||
'''function separator ()''' { | |||
<nowiki>echo "<hr size=4 width=70%>";</nowiki> | |||
} | |||
// 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''' (); | |||
<nowiki>echo "<hr>";</nowiki> | |||
?> | |||
: '''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: [http://tecfa.unige.ch/guides/php/examples/html-generate/love.php /guides/php/examples/html-generate/love.php] | |||
: '''see: [http://tecfa.unige.ch/guides/php/examples/html-generate/love.phps /guides/php/examples/html-generate/love.phps] | |||
<nowiki>for ($i=1; $i<=10; $i++) {</nowiki> | |||
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 ! ...... | |||
<nowiki>echo "Je t’aime plus que toi.<br></nowiki> | |||
<nowiki>for ($i=2; $i<=10; $i++) {</nowiki> | |||
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: | |||
: <tt>'''$i'''</tt> is used as so-called iteration variable. At start $i = 1 or 2. | |||
: <tt>echo</tt> | |||
: <tt>print</tt> works like print. | |||
: '''Generation of html tables''' | |||
: '''see: [http://tecfa.unige.ch/guides/php/examples/html-generate/love.php /guides/php/examples/html-generate/love.php] | |||
: '''see: [http://tecfa.unige.ch/guides/php/examples/html-generate/love.phps /guides/php/examples/html-generate/love.phps] | |||
: '''see: [http://tecfa.unige.ch/guides/php/examples/html-generate/love.text /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"); | |||
<nowiki><table border align="center"></nowiki> | |||
<nowiki><?</nowiki> | |||
// define a function to generate a table | |||
function build_table($list) { | |||
'''<nowiki>for ($i=0; $i < sizeof($list); $i++) {</nowiki> | |||
<nowiki>$love_text = $list[$i];</nowiki> | |||
<nowiki>echo "<tr> <td> ... I love you</td> <td>$love_text</td>";</nowiki> | |||
} | |||
} | |||
// call the function, generate the table | |||
build_table($love_list); | |||
?>''' | |||
<nowiki></table></nowiki> | |||
Note: | |||
: <nowiki>PHP is used with the HTML <table> element</nowiki> | |||
: The <tt>'''build_table'''</tt> 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 !!) ?> | |||
: <nowiki>... because PHP starts producing HMTL headers as soon as it sees a little blank space before or after php code <?php .... ?></nowiki> | |||
: '''HTML forms processing with PHP''' | |||
: '''Forms processing with PHP I (Calcul)''' | |||
: '''Simple quiz and POST to a php file''' | |||
: '''See: [http://tecfa.unige.ch/guides/php/examples/simple-calculate/formulaire.html /guides/php/examples/simple-calculate/formulaire.html] | |||
: '''Source: [http://tecfa.unige.ch/guides/php/examples/simple-calculate/formulaire.text /guides/php/examples/simple-calculate/formulaire.text] | |||
: This example shows: | |||
: how to treat and HTML form | |||
: how to compute and display a result. | |||
<center>[[Image:]]</center> | |||
'''Part of the HTML form:''' | |||
<nowiki><form </nowiki>'''''action="calcul.php"''''' method="post"> | |||
Quelles sont vos connaissances de HTML ? | |||
<nowiki><input type="radio" </nowiki>'''''name="choice" value="1"''''' checked>faibles | |||
<nowiki><input type="radio" name="choice" value="2">moyennes</nowiki> | |||
<nowiki><input type="radio" name="choice" value="3">bonnes</nowiki> | |||
<nowiki><br></nowiki> | |||
Indiquez votre expertise en programmation: | |||
<nowiki><input type="radio" </nowiki>'''''name="choice2" value="1"''''' checked>absente | |||
<nowiki><input type="radio" name="choice2" value="2">moyenne</nowiki> | |||
<nowiki><input type="radio" name="choice2" value="3">bonne</nowiki> | |||
<nowiki><P></nowiki> | |||
<nowiki><input type="submit" value="Voir le result!"></nowiki> | |||
<nowiki></form></nowiki> | |||
<center>[[Image:]]</center> | |||
: '''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: | |||
<nowiki>$choice = $_POST[’choice’];</nowiki> | |||
<nowiki>$choice2 = $_POST[’choice2’];</nowiki> | |||
: In our example, we will use two PHP variables:$choice and $choice2 | |||
: '''Computing and display of results''' | |||
: '''see: [http://tecfa.unige.ch/guides/php/examples/simple-calculate/calcul.phps /guides/php/examples/simple-calculate/calcul.phps] | |||
: we add result of the two values and compute a result with an if clause. | |||
<nowiki><?php</nowiki> | |||
// Get values from the form | |||
<nowiki>$choice = $_POST[’choice’];</nowiki> | |||
<nowiki>$choice2 = $_POST[’choice2’];</nowiki> | |||
// Compute score | |||
$score = $choice + $choice2; | |||
// Compute message as function of result | |||
<nowiki>echo "<h3>Votre score is de " . $score . "</h3>";</nowiki> | |||
<nowiki>if ($score < 3) {</nowiki> | |||
<nowiki>echo "<p>Vous êtes un débutant</p>";</nowiki> | |||
<nowiki>} elseif ($score < 5) {</nowiki> | |||
<nowiki>echo "<p>Vous avez un niveau moyen</p>";</nowiki> | |||
} else { | |||
<nowiki>echo "<p>Vous êtes un expert !</p>";</nowiki> | |||
} | |||
?> | |||
: '''Inhibit direct access to PHP (without data)''' | |||
: <nowiki>(1) if (isset($_POST[’choice’])) then { ..... } else { echo "sorry ......."; }</nowiki> | |||
: <nowiki>(2) Alternative: if (!isset($_POST[’choice’])) {echo "sorry"; exit; }</nowiki> | |||
: '''Forms processing with PHP II''' | |||
: '''Checkboxes with PHP - arrays''' | |||
: [http://tecfa.unige.ch/guides/php/examples/simple-calculate/formulaire4.text /guides/php/examples/simple-calculate/formulaire4.text] ''' | |||
: [http://tecfa.unige.ch/guides/php/examples/simple-calculate/formulaire4.html /guides/php/examples/simple-calculate/formulaire4.html] ''' | |||
'''Part of the HTML code:''' | |||
<nowiki><form action="</nowiki>'''calcul4.php'''" method=post> | |||
Quels sont vos couleurs préféres? | |||
<nowiki><br></nowiki> | |||
<nowiki><input type="</nowiki>'''<nowiki>checkbox" name="choice[]"</nowiki>''' value="Red">Red | |||
<nowiki><table bgcolor="red" width="50"><tr><td> </td></tr></table></nowiki> | |||
<nowiki><input type="checkbox" </nowiki>'''<nowiki>name="choice[]</nowiki>'''" value="Blue">Blue | |||
<nowiki><table bgcolor="blue" width="50"><tr><td> </td></tr></table></nowiki> | |||
<nowiki><input type="checkbox" </nowiki>'''<nowiki>name="choice[]</nowiki>'''" value="Green">Green | |||
<nowiki><table bgcolor="green" width="50"><tr><td> </td></tr></table></nowiki> | |||
..... | |||
<nowiki><input type="checkbox" </nowiki>'''<nowiki>name="choice[]</nowiki>'''" value="Black">Black | |||
<nowiki><table bgcolor="black" width="50"><tr><td> </td></tr></table></nowiki> | |||
<nowiki><input type="submit" value="Voir le result!"></nowiki> | |||
<nowiki></form></nowiki> | |||
: Remember the syntax to put all values into an array: <tt><nowiki>"choice[]"</nowiki></tt> | |||
'''PHP code:''' | |||
<nowiki><?php</nowiki> | |||
<nowiki>$choice = $_POST[’choice’];</nowiki> | |||
<nowiki>echo("<h3>Vos couleurs préférées sont </h3>");</nowiki> | |||
<nowiki>for ($i=0;$i<sizeof($choice);$i++) {</nowiki> | |||
if (isset('''<nowiki>$choice[$i]</nowiki>''')) { | |||
echo("'''<nowiki>$choice[$i]</nowiki>''' - "); | |||
} | |||
} | |||
?> | |||
: '''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 | |||
'''<nowiki><? </nowiki> | |||
<nowiki>if (!isset($_POST[’process’])) </nowiki>{ | |||
?>''' | |||
//... lets display the form) | |||
<nowiki><FORM METHOD="POST" ACTION="<? echo $PHP_SELF ?>"></nowiki> | |||
..... | |||
<nowiki> </FORM></nowiki> | |||
'''<nowiki><?</nowiki> | |||
} 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: | |||
<nowiki>if (isset($POST[’first’]) ) { .... do ....}</nowiki> | |||
: The difference is that | |||
: array_key_exists returns TRUE if value is NULL | |||
: isset returns FALSE if value is NULL. | |||
'''<nowiki>ATTENTION, to test <input type="text"> you also may want to test if there is an empty string.</nowiki>''' | |||
: '''''“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/ http://tecfa.unige.ch/guides/php/examples/sessions/] ''' | |||
session_start(); | |||
<nowiki>if (!isset($_SESSION[’count’])) {</nowiki> | |||
<nowiki>$_SESSION[’count’] = 0;</nowiki> | |||
} else { | |||
<nowiki>$_SESSION[’count’]++;</nowiki> | |||
} | |||
<nowiki>if ($_SESSION[’count’] > 2) {</nowiki> | |||
<nowiki>echo ’<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">’;</nowiki> | |||
<nowiki>echo "<html> <body>";</nowiki> | |||
echo "Sorry it’s over you can’t do it twice"; | |||
<nowiki>echo "</body> </html>";</nowiki> | |||
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/ 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) { | |||
<nowiki>echo "<TR> <TD align=right>Importance of <STRONG>$thing</STRONG>:</TD>";</nowiki> | |||
<nowiki>echo "<TD><select name=$thing>";</nowiki> | |||
<nowiki>echo "<option value=1>1 - totally unimportant";</nowiki> | |||
<nowiki>echo "<option value=2>2 - not important";</nowiki> | |||
<nowiki>echo "<option value=3 selected>3 - rather not important";</nowiki> | |||
<nowiki>echo "<option value=4>4 - slightly important";</nowiki> | |||
<nowiki>echo "<option value=5>5 - rather important";</nowiki> | |||
<nowiki>echo "<option value=6>6 - very important";</nowiki> | |||
<nowiki>echo "</select>";</nowiki> | |||
<nowiki>echo "</TD></TR>";</nowiki> | |||
} | |||
function dump_scales () { | |||
global $scales; | |||
reset($scales); | |||
do { | |||
$scale = scale(current($scales)); | |||
echo "$scale\n"; | |||
} | |||
while (next($scales)); | |||
} ?> | |||
<nowiki><form> <table></nowiki> | |||
...... | |||
dump_scales(); | |||
...... | |||
<nowiki></table> </form></nowiki> | |||
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) { | |||
<nowiki>echo "<p>Sorry I can’t open a file, something is wrong";</nowiki> | |||
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) { | |||
<nowiki>echo "<p>Your data have successfully been registered.";</nowiki> | |||
} | |||
else { | |||
<nowiki>echo "<p>Too bad, the db did not want your data.";</nowiki> | |||
} | |||
// close the file pointer | |||
fclose($output_stream); | |||
?> | |||
<nowiki><?</nowiki> | |||
// EXIT here ... we don’t want to see the form again. If you do, kill the exit | |||
exit; | |||
} | |||
?> | |||
'''Remember''' | |||
<nowiki>fopn (<file name>, "a")</nowiki> | |||
: to open a file and then append. | |||
<nowiki>fputs(<handle>, “string”)</nowiki> | |||
: to write to a file | |||
: WARNING: This will attract spammers !! | |||
: '''Dump contents of a file''' | |||
<nowiki>.... we just insert it a <pre> with an “include”</nowiki> | |||
<nowiki><BODY></nowiki> | |||
<nowiki><H1>PHP/MySQL Demo - Dump Database Contents</H1></nowiki> | |||
<nowiki><? </nowiki> | |||
/* Daniel.Schneider@tecfa.unige.ch | |||
Will dump the contents of the results file | |||
<nowiki>*/</nowiki> | |||
?> | |||
<nowiki><strong>Results registered so far:</strong></nowiki> | |||
<nowiki><pre></nowiki> | |||
<nowiki><? readfile("results/result.text"); ?></nowiki> | |||
<nowiki></pre></nowiki> | |||
.......... | |||
<nowiki></BODY></nowiki> | |||
'''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: <tt>Header("Content-type: image/gif");</tt> | |||
'''''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.php] ''' | |||
: [http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul-xml.phps http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul-xml.phps] ''' | |||
: [http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul-xml.css http://tecfa.unige.ch/guides/php/examples/simple/simple-calcul-xml.css] ''' | |||
<nowiki><?php</nowiki> | |||
'''header("Content-type: text/xml");''' | |||
'''<nowiki>print(’<?xml version="1.0" encoding="iso-8859-1"?>’ . "\n");</nowiki>''' | |||
'''<nowiki>print(’<?xml-stylesheet href="simple-calcul-xml.css" type="text/css" ?>’);</nowiki>''' | |||
$leisure_satisfaction = 5; $work_satisfaction = 7; $family_satisfaction = 8; | |||
$index = ($leisure_satisfaction + $work_satisfaction + $family_satisfaction) / 3 ; | |||
echo "'''<nowiki><resultat></nowiki>''' Satisfaction Index = '''$index''' '''<nowiki></resultat></nowiki>'''"; | |||
?> |
Revision as of 18:24, 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 ..... ?>
<?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
- 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: =
- Simple variables
- assignment
$variable = "content" ;
Illustrations:
$a = 10; $name = "Patrick Ott"; $sum = 123.456;
- Display variable contents
- Files:
: /guides/php/examples/simple/simple-echo.php
| |
: /guides/php/examples/simple/simple-echo.phps
| |
: /guides/php/examples/simple/simple-echo.text
|
<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 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 list (several values within the same variable)
Method 1:
$numbers[] =1; $numbers[] =2; $numbers[] =3; $numbers[] =4;
Method 2:
$numbers = array (1, 2, 3, 4); $names = array ("Pat", "Dave", "Surf", "K");
Simple arrays usage
$array[index]
- Index starts at 0 ! (zero)
echo "Second element of $names is: $names[1];
- Simple variables and some HTML generation
- See: /guides/php/examples/simple/simple-arrays.php
<?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") ;
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 <table> 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.
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>
- 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 "<h3>Votre score is de " . $score . "</h3>"; if ($score < 3) { echo "<p>Vous êtes un débutant</p>"; } elseif ($score < 5) { echo "<p>Vous avez un niveau moyen</p>"; } else { echo "<p>Vous êtes un expert !</p>"; } ?>
- 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
<? if (!isset($_POST[’process’])) { ?> //... lets display the form) <FORM METHOD="POST" ACTION="<? echo $PHP_SELF ?>"> ..... </FORM> <? } 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
.... we just insert it a <pre> with an “include”
<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"); ?> </pre> .......... </BODY>
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>"; ?>