DekGenius.com
Previous Section  < Day Day Up >  Next Section

C.7 Chapter 8

C.7.1 Exercise 1:

<?php
$page_count = $_COOKIE['page_count'] + 1;
setcookie('page_count',$page_count);
print "Number of views: $page_count";
?>

C.7.2 Exercise 2:

<?php
$page_count = $_COOKIE['page_count'] + 1;
if ($page_count =  = 20) {
    // an empty value deletes the cookie
    setcookie('page_count','');
    print "Time to start over.";
} else {
    setcookie('page_count', $page_count);
    print "Number of views: $page_count";
    if ($page_count =  = 5) {
        print "<br/> This is your fifth visit.";
    } elseif ($page_count =  = 10) {
        print "<br/> This is your tenth visit. Aren't you sick of this page yet?";
    } elseif ($page_count =  = 15) {
        print "<br/> This is your fifteenth visit. Don't you have anything better to 
do?";
    }
}
?>

C.7.3 Exercise 3:

Here is the color selection form page:

<?php
require 'formhelpers.php';
session_start( );
$colors = array('#ff0000' => 'red',
                '#ff6600' => 'orange',
                '#ffff00' => 'yellow',
                '#0000ff' => 'green',
                '#00ff00' => 'blue',
                '#ff00ff' => 'purple');
if ($_POST['_submit_check']) {
    if ($form_errors = validate_form( )) {
        show_form($form_errors);
    } else {
        process_form( );
    } 
} else {
    show_form( );
}
function show_form($errors = '') {
    print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
    if ($errors) {
        print '<ul><li>';
        print implode('</li><li>',$errors);
        print '</li></ul>';
    } 
    // Since we're not supplying any defaults of our own, it's OK
    // to pass $_POST as the defaults array to input_select and
    // input_text so that any user-entered values are preserved
    print 'Color: ';
    input_select('color', $_POST, $GLOBALS['colors']);
    print '<br/>';
    input_submit('submit','Select Color');
    print '<input type="hidden" name="_submit_check" value="1"/>';
    print '</form>';
}
function validate_form( ) {
    $errors = array( );
    // The dish selected in the menu must be valid
    if (! array_key_exists($_POST['color'], $GLOBALS['colors'])) {
        $errors[  ] = 'Please select a valid color.';
    }
    return $errors;
}
function process_form( ) {
    $_SESSION['color'] = $_POST['color'];
    print "Your favorite color is: " . $GLOBALS['colors'][ $_SESSION['color'] ];
}
?>
And here is the background-color-changing page:
<?php
session_start( );
print <<<_HTML_
<html>
<body bgcolor="$_SESSION[color]">
This page has your personalized background color.
</body>
</html>
_HTML_;
?>

C.7.4 Exercise 4:

Here's the order form page:

<?php
session_start( );
require 'formhelpers.php';
$products = array('cuke'    => 'Braised Sea Cucumber',
                  'stomach' => "Sauteed Pig's Stomach",
                  'tripe'   => 'Sauteed Tripe with Wine Sauce',
                  'taro'    => 'Stewed Pork with Taro',
                  'giblets' => 'Baked Giblets with Salt', 
                  'abalone' => 'Abalone with Marrow and Duck Feet');
if ($_POST['_submit_check']) {
    if ($form_errors = validate_form( )) {
        show_form($form_errors);
    } else {
        process_form( );
    } 
} else {
    show_form( );
}
function show_form($errors = '') {
    global $products;
    
    print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
    if ($errors) {
        print '<ul><li>';
        print implode('</li><li>',$errors);
        print '</li></ul>';
    } 
    // Build up an array of defaults if there is an order saved
    // in the session
    if ($_SESSION['saved_order']) {
        $defaults = array( );
        foreach ($products as $product => $description) {
            $defaults["dish_$product"] = $_SESSION["dish_$product"];
        }
    } else {
        $defaults = $_POST;
    }
    foreach ($products as $product => $description) {
        input_text("dish_$product", $defaults);
        print " $description<br/>";
    }
    
    input_submit('submit','Order');
    
    print '<input type="hidden" name="_submit_check" value="1"/>';
    print '</form>';
}
function validate_form( ) {
    global $products;
    $errors = array( );
    foreach ($products as $product => $description) {
        // If something was entered in the text box
        if (strlen($_POST["dish_$product"]) &&
            // And it's not a valid integer
            (($_POST["dish_$product"] != strval(intval($_POST["dish_$product"]))) ||
             // Or it's less than zero
             intval($_POST["dish_$product"]) < 0)) {
            // Then it's an error
            $errors[  ] = "Please enter a valid quantity for $description.";
        }
    }
    return $errors;
}
function process_form( ) {
    global $products;
    $_SESSION['saved_order'] = 1;
    
    foreach ($products as $product => $description) {
        if (strlen($_POST["dish_$product"])) {
            $_SESSION["dish_$product"] = $_POST["dish_$product"];
        }
    }
    print 'Thank you for your order.';
}
?>

Here's the check-out page:

<?php
session_start( );
require 'formhelpers.php';
$products = array('cuke'    => 'Braised Sea Cucumber',
                  'stomach' => "Sauteed Pig's Stomach",
                  'tripe'   => 'Sauteed Tripe with Wine Sauce',
                  'taro'    => 'Stewed Pork with Taro',
                  'giblets' => 'Baked Giblets with Salt', 
                  'abalone' => 'Abalone with Marrow and Duck Feet');
// Since the form just consists of one button, there's no need
// to validate the submitted form data
if ($_POST['_submit_check']) {
    process_form( );
} else {
    show_form( );
}
function show_form($errors = '') {
    global $products;
    if ($_SESSION['saved_order']) {
        print 'Your order: <ul>';
        foreach ($products as $product => $description) {
            if (array_key_exists("dish_$product", $_SESSION)) {
                print '<li> '.$_SESSION["dish_$product"]." $description </li>";
            }
        }
        print '</ul>';
    } else {
        print 'There is no saved order.';
    }
    print '<br/>';
    // This assumes that the order form page is saved as "orderform.php"
    print '<a href="orderform.php">Return to Order Page</a>';
    print '<br/>';
    print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
    input_submit('submit','Check Out');
    print '<input type="hidden" name="_submit_check" value="1"/>';
    print '</form>';
}
function process_form( ) {
    global $products;
    unset($_SESSION['saved_order']);
    
    foreach ($products as $product => $description) {
        unset($_SESSION["dish_$product"]);
    }
    print 'Your order has been cleared.';
}
?>

    Previous Section  < Day Day Up >  Next Section