Working With Forms - Kirkwood Web Certificate Server

Introduction to
PHP and MySQL
Kirkwood Center for
Continuing Education
By Fred McClurg, frmcclurg@gmail.com
Copyright © 2010 All Rights Reserved.
Chapter Eleven
Working With Forms
http://webcert.kirkwood.edu/~fmcclurg
/courses/php/slides/chapter11.ppt
Superglobal Variable: $GLOBALS
Description: Superglobals are built-in variables that are global in scope.
These variables are available throughout the entire script.
$GLOBALS: Hash containing references to all variables defined in
global scope.
Example:
<?php
function initialize( $key, $value )
{
// define global variable
$GLOBALS[$key] = $value;
}
initialize( "foo", "It's every where!" );
echo( $GLOBALS["foo"] );
?>
Superglobal Variable: $_ENV
Description: The PHP mechanism for extracting operating system variables is
performed via $_ENV:
$_ENV: Hash containing system environment variables.
Example via “set” (Windows) or “printenv” (Unix):
“php.ini” directive concerning $_ENV
Note: If the array $_ENV is undefined, you may
need change the following setting in your
“php.ini” file and restart the web server. For
xampp on windows, this file is found in
“C:\xampp\php\php.ini” Check
phpinfo() to verify the exact location of this file.
Change this line:
variables_order = "GPCS"
To this instead:
variables_order = "GPCSE"
Student Exercise 11.1
Summary: Write a program that displays the
key/value pairs contained in the superglobal
associative array “$_ENV”.
Requirements:
1. Bold face the variable name and the key.
2. Place a paragraph between each key/value
pair.
Output should be similar to the following format:
$_ENV[key1]: value1
$_ENV[key2]: value2
...
Student Solution 11.1 (option 1)
Here is one way to do it (see file “_ENV.1.php”):
<?php
$env = $_ENV;
ksort( $env );
// copy original
// sort keys
foreach ( $env as $key => $val )
{
printf( "<b>\$_ENV[%s]:</b>
%s <p />\n",
$key, $val );
}
?>
Student Solution 11.1 (option 2)
Here is another way to do it (see file “_ENV.2.php”):
<?php
$env = $_ENV ;
ksort( $env );
// copy original
// sort keys
foreach ( $env as $key => $val )
{
?>
<b>$_ENV[<?= $key ?>]:</b>
<?= $val ?> <p />
<?php
}
?>
“php.ini” directive concerning <?= ?>
Note: If “<?= ?>” is not working, you may need
change the following setting in your “php.ini” file
and restart the web server. For xampp on
windows, this file is found in
“C:\xampp\php\php.ini” Check the
phpinfo() call for the exact location of this file.
Change this line:
short_open_tag = Off
To this instead:
short_open_tag = On
Superglobal Variable $_SERVER
Description: The PHP mechanism for extracting
information from the web server is performed via
the superglobal variable $_SERVER
The following are some of the more significant keys
contained in this variable:
DOCUMENT_ROOT: Full pathname of the document
root on the server (example: /opt/lampp/htdocs)
HTTP_HOST: Server hostname (example:
localhost)
SERVER_NAME: Server domain name (example:
www.example.com)
More Superglobal $_SERVER
HTTP_REFERER: Page previous to current page.
Note: Can not always be trusted.
HTTP_USER_AGENT: OS and browser of client (ex:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.5)
Gecko/20091109 Ubuntu/9.10 (karmic) Firefox/3.5.5)
PHP_SELF: Filename of current script. (ex:
/~frmcclurg/courses/php/examples/chapter11/_SER
VER.php
QUERY_STRING: String containing the form
variables and values (ex: ?q=ubuntu)
Superglobal Variables for Forms
Description: The PHP mechanism for extracting
information from a form is performed via the
following predefined superglobal variables.
$_GET: Hash that is populated upon
submitting a form via the GET method.
$_POST: Hash that is populated upon
submitting a form via the POST method.
$_REQUEST: Hash that is populated with the
contents of $_GET and $_POST (and some
other variables).
Student Exercise 11.2 (extra credit)
Summary: Write a program that displays the key/value pairs
contained in the super global associative array “$_SERVER”.
Requirements:
1. Bold face the variable name and the key and place on a
separate line.
2. The value should be indented and placed on a separate line.
3. Place a paragraph between each key/value pair.
Output should be in the following format:
$_SERVER[key1]:
value1
$_SERVER[key2]:
value2
...
Student Solution 11.2
Here is one way to do it (see file “_SERVER.php”):
<?php
$server = $_SERVER;
ksort( $server );
// copy original
// sort keys
foreach ( $server as
$key => $val )
{
printf( "
<b>\$_SERVER[%s]:</b>
<dd> %s <p />\n",
$key, $val );
}
?>
HTML Search Form Example
Description: HTML forms provide a way to obtain input
from the user. That information can then be used in a
calculation or stored in a database.
<form action="search.html"
method="GET">
Search:
<input type="text"
name="search"
value="" />
<input type="submit"
value="Find!" />
</form>
Making a “Sticky” Form
Description: It is often convenient for a
form to “remember” the text from a
previous submission and set it as the
default value for the next submission.
In this way, the user does not have to
re-enter the same information again.
Solution: Any form element can become
“sticky” by using the results of the
previous submission via the $_GET,
$_POST, or $_REQUEST hash.
PHP Search Form Example
Description: Only a few changes may be necessary to convert a
form from HTML to PHP. The following code makes the form self
processing and “sticky” (see file “search.php”):
<form action="<?= $_SERVER['PHP_SELF'] ?>"
method="GET">
Search:
<input type="text"
name="find"
value="<?= $_GET['find'] ?>" />
<input type="submit"
value="Find!" />
</form>
Student Exercise 11.3
Summary: Write a program that prints
on the bottom of the form, the same
text string that is contained in the
text widget. The string should be
displayed upon form submission.
Hint: The solution can be obtained by
adding less than a dozen lines to the
file “search.php”
Student Solution 11.3
The following lines should be added after the form in the file
“search.php” (see file “searchEcho.php”):
...
</form>
<?php
if ( isset( $_REQUEST['find'] ) )
{
printf( "You submitted: \"%s\"",
$_REQUEST['find'] );
}
?>
</body>
</html>
Problem with Multiple Values (pg 1)
Problem: Checkboxes and section lists can have more than one value selected. A
variable can only store one value at a time. (see file “multiWrong.php”)
<form action="<?= $PHP_SELF ?>" method="GET">
<input type="checkbox" name="food"
value="Hamburger" />
Hamburger <br />
<input type="checkbox" name="food" value="Fries" />
Fries <br />
<input type="checkbox" name="food" value="Drink" />
Drink <br />
<input type="submit" value="Order" />
</form>
...
Problem with Multiple Values (pg 2)
Problem: Checkboxes and section lists can have more than one value
selected. A variable can only store one value at a time. (see file
“multiWrong.php”)
...
<?php
if ( $_GET )
{
printf( "<p /> <hr />" );
printf( "Your order is:<br />" );
foreach ( $_GET as $name => $value )
{
printf( "\$_GET[%s]: %s <br />",
$name, $value );
}
}
?>
Solution with Multiple Values (pg 1)
Solution: An array is used to store multiple values. (see file “multiRight.php”)
<form action="<?= $PHP_SELF ?>" method="GET">
<input type="checkbox" name="food[]"
value="Hamburger" />
Hamburger <br />
<input type="checkbox" name="food[]"
value="Fries" />
Fries <br />
<input type="checkbox" name="food[]"
value="Drink" />
Drink <br />
<input type="submit" value="Order" />
</form>
Solution with Multiple Values (pg 2)
Solution: An array is used to store multiple values. (see file “multiRight.php”)
<?php
if ( $_GET['food'] )
{
printf( "<p /> <hr />" );
printf( "Your order:<br />" );
for ( $i = 0; $i < count( $_GET['food'] ); $i++)
{
$value = $_GET['food'][$i];
printf( "\$_GET['food'][%d]: %s <br />",
$i, $value );
}
}
?>
Student Exercise 11.4 (pg 1)
Step 1: Create a form that contains a
multiple selection list box and one
checkbox similar to the following:
Student Exercise 11.4 (pg 2)
Step 2: Write a program that will display all the
key/value pairs contained in the super global
associative array “$_REQUEST” upon pressing the
submit button.
Hint: The syntax for a selection box is as follows:
<select name="widgetName"
multiple="multiple">
<option value="listItemValue">
List Item Label Here
</option>
...
</select>
Student Solution 11.4 (pg 1)
Here is one way to do it (see file “multiSelect.php”):
<form action="<?= $PHP_SELF ?>" method="GET">
<input type="checkbox" name="used" value="1"> Used?
<br />
<select name="media[]" multiple="multiple">
<option value="Hardback"> Hard Cover </option>
<option value="Paperback"> Soft Cover </option>
<option value="CD"> Audio Book </option>
<option value="DVD"> Video </option>
</select>
<p />
<input type="submit" name="order" value="Order" />
</form>
Student Solution 11.4 (pg 2)
Here is one way to do it (for a complete file listing, see file “multiSelect.php”):
<?php
if ( isset( $_REQUEST['order'] ) ) {
printf( "<p /> <hr /> You selected:<br />\n" );
foreach ( $_REQUEST as $key => $outie ) {
if ( is_array( $_REQUEST[$key] ) ) {
$i = 0;
// reset counter
foreach ( $_REQUEST[$key] as $innie ) {
printf( "<dd> \$_REQUEST[%s][%d]: %s<br />\n",
$key, $i, $innie);
$i++;
}
}
// end foreach
// end if
else {
printf( "\$_REQUEST[%s]: %s<br />\n", $key, $outie);
}
}
}
?>
// end else
// end foreach
// end if
Student Exercise 11.4
Summary: Select one formula below. Create a form that allows a user
to type the text value of a temperature and output its equivalent
value in another unit upon form submission. Extra credit: Select
between multiple conversions using a radio button.
The conversion formulas are as follows:
Fahrenheit To Centigrade:
5/9 * (Fahrenheit - 32)
Centigrade To Fahrenheit:
(9/5 * Centigrade) + 32
Centigrade To Kelvin:
Centigrade + 273
Kelvin To Centigrade:
Kelvin – 273
Fahrenheit To Kelvin:
5/9 * (Fahrenheit - 32) + 273
Kelvin To Fahrenheit:
((Kelvin - 273) * 9/5 ) + 32
Student Solution 11.4 (option 1, pg 1)
Here is one way to do it (see file “tempConvert.php”):
<form action="<?= $PHP_SELF ?>"
method="GET">
<input type="text" name="degrees"
value="<?= $_GET['degrees'] ?>"
/>
<br />
<input type="submit" name="doit"
value="Convert" />
</form>
...
Student Solution 11.4 (option 1, pg 2)
Here is one way to do it (see file “tempConvert.php”):
...
<?php
if ( isset( $_GET['doit'] ) )
{
printf( "<p /> <hr />\n" );
$input = $_GET['degrees'];
/* Fahrenheit To Centigrade */
$output = 5/9 * ($input - 32);
$inputUnits = "Fahrenheit";
$outputUnits = "Centigrade";
printf( "%f° %s = %f° %s",
$input, $inputUnits,
$output, $outputUnits );
}
?>
to be continued ...
http://webcert.kirkwood.edu/~fmcclurg/c
ourses/php/slides/chapter17a.strcmp.ppt