CS 318 - Week 13 Lecture - 4-25-13

Intro to PHP, continued

*   some useful PHP functions for checking
    the status of array keys, etc.:

    NULL - a PHP type (?!), 
           the absence of an object

    array_key_exists(desired_key, desired_array)
    *   checks IF desired_key exists in desired_array

    isset(desired_variable) 
    *   determines IF desired_variable is set AND is not
        NULL

*   ONE way to redirect in PHP:
    *   header function

    *   'Location: desired_url'
        ...and will go to that location

    *   MUST be BEFORE ANY output on that page!
        (before even the <!DOCTYPE element

more lovely global things:
*   $_SERVER
    is an associative array with server info in it

*   PHP_SELF is a name in this array whose value
    is the value of the file name for the containing
    PHP document

    action="$_SERVER[PHP_SELF]"

*   the above can be inserted into the boilerplate for
    a form rather reasonably with a HERE document,
    ANOTHER form of PHP string:

HERE document: a PHP string that starts with:

>>>DESIRED_LABEL
boilerplate with PHP variables that will be replace
     with their
     values and your line breaks and etc
DESIRED_LABEL

*   that closing label CANNOT be indented,
    must be ALONE on the line (except possibly for a
    single semicolon after it),
    cannot have ANYTHING after it, even a comment!

*   connecting to the HSU Oracle student database
    *   we are using OCI - Oracle Call Interface
        (one of MANY packages PHP has for this...)

    *   first: set up a connection string

    $db = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)
                             (HOST = cedar.humboldt.edu)
                             (PORT = 1521))
           (CONNECT_DATA = (SID = STUDENT)))";

    *   here's the actual connection attempt (and abort
        if it fails):

        $conn = oci_connect($username, $password, $db);

        if ($conn == FALSE)
        {
            ...take desired action...
            exit;  // this IS a PHP-allowable thing
        }

    *   to set up a SQL statement and then execute it:

        $stmt = oci_parse($conn, 
                          "select hiredate, salary, commission ".
                          "from empl");

        oci_execute($stmt, OCI_DEFAULT);

    *   now, to loop through the results:

        while (oci_fetch($stmt))
        {
        ?>
             <p> <?= oci_result($stmt, "HIREDATE") ?> </p>
             <p> <?= oci_result($stmt, "SALARY") ?> </p>
             <p> <?= oci_result($stmt, "COMMISSION") ?> </p>
        <?php
        }
    
    *   and when you are done:

        oci_free_statement($stmt);
        oci_close($conn);

*   see posted examples for how to commit (necessary if you
    change the database), and how to call stored procedures and
    stored functions;

SESSIONS
*   there is a global associative array $_SESSION
    that can contain session attributes and their values;

*   IF you are using cookie-based sessions in PHP,
    (as we will be),
    START your php file with:
session_start();

    ...that's EVEN BEFORE your <!DOCTYPE or <html> tag!
    (should be the FIRST thing!!) (not even a blank line beforehand)
    (although can be after <?php ...!)

*   if I want a session attribute named thing,

    $_SESSION['thing'] = 'whatever I want';

    ...and later in the same session, I can grab:
    
    $_SESSION['thing'] and its value is 'whatever I want'

*   you can use unset to, well, un-set the value for a session 
    attribute:

    unset($_SESSION['thing']);

*   when DONE with a session,
    call session_destroy();

    session_destroy();

*   see try-session1.php, try-trio.php