//if data, process it!
 /*
 echo '<pre>';
 var_dump($_POST);
 echo '</pre>';
 */
 $to = '*****@*****.**';
 $message = process_post();
 $subject = 'Contact Form from retro site';
 safeEmail($to, $subject, $message);
 //connect to the database in order to add contact data
 $iConn = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die(myerror(__FILE__, __LINE__, mysqli_connect_error()));
 //process each post var, adding slashes, using mysqli_real_escape(), etc.
 $Name = dbIn($_POST['Name'], $iConn);
 $Email = dbIn($_POST['Email'], $iConn);
 $Comments = dbIn($_POST['Comments'], $iConn);
 //place question marks in place of each item to be inserted
 $sql = "INSERT INTO test_Contacts (Name,Email,Comments,DateAdded) VALUES(?,?,?,NOW())";
 $stmt = @mysqli_prepare($iConn, $sql) or die(myerror(__FILE__, __LINE__, mysqli_error($iConn)));
 /*
  * second parameter of the mysqli_stmt_bind_param below 
  * identifies each data type inserted: 
  *
  * i == integer
  * d == double (floating point)
  * s == string
  * b == blob (file/image)
  *
  *example: an integer, 2 strings, then a double would be: "issd"
  */
 mysqli_stmt_bind_param($stmt, 'sss', $Name, $Email, $Comments);
/**
 * Requires data submitted as isset() and passes dat to 
 * dbIn() which processes per MySQL standards, adding slashes and 
 * attempting to prevent SQL injection.     
 * Upon failure, user is forcibly redirected to global variable,  
 * $redirect, which is applied just before checking a series of form values.
 *
 *<code>
 * $redirect = THIS_PAGE; //global redirect
 * $myVar = formReq($_POST['myVar']);
 * $otherVar = formReq($_POST['otherVar']);
 *</code>
 *
 * @uses dbIn()
 * @param string $var data as entered by user
 * @return string returns data filtered by MySQL, adding slashes, etc.
 * @todo merge formReq (uses global) with form_Req (preferred) below:
 */
function form_Req($var, $redirect)
{
    /**
     * $redirect stores page to redirect user to upon failure 
     * This variable is declared in the page, just before the form fields are tested.
     *
     * @global string $redirect
     */
    global $redirect;
    if (!isset($_POST[$var])) {
        feedback("Required Form Data Not Passed", "error");
        if (!isset($redirect) || $redirect == "") {
            //if no redirect indicated, use the current page!
            myRedirect(THIS_PAGE);
        } else {
            myRedirect($redirect);
        }
    } else {
        return dbIn($_POST[$var]);
    }
}
 //next check for specific issues with data
 if (!ctype_graph($_POST['pw'])) {
     //data must be alphanumeric or punctuation only
     feedback("Illegal characters were entered. (error code #" . createErrorCode(THIS_PAGE, __LINE__) . ")", "error");
     header('Location:' . ADMIN_PATH . 'admin_login.php');
     die;
 }
 if (!onlyEmail($_POST['em'])) {
     //login must be a legal email address only
     feedback("Illegal characters were entered. (error code #" . createErrorCode(THIS_PAGE, __LINE__) . ")", "error");
     header('Location:' . ADMIN_PATH . 'admin_login.php');
     die;
 }
 $iConn = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die(myerror(__FILE__, __LINE__, mysqli_connect_error()));
 $Email = dbIn($_POST['em'], $iConn);
 $MyPass = dbIn($_POST['pw'], $iConn);
 $sql = sprintf("select AdminID,FirstName,Privilege,NumLogins from " . PREFIX . "Admin WHERE Email='%s' AND AdminPW=SHA('%s')", $Email, $MyPass);
 $result = mysqli_query($iConn, $sql) or die(myerror(__FILE__, __LINE__, mysqli_error($iConn)));
 if (mysqli_num_rows($result) > 0) {
     # valid user, create session vars, redirect!
     $row = mysqli_fetch_array($result);
     #no while statement, should be single record
     startSession();
     #wrapper for session_start()
     $AdminID = (int) $row["AdminID"];
     # use (int) cast to for conversion to integer
     $_SESSION["AdminID"] = $AdminID;
     # create session variables to identify admin
     $_SESSION["FirstName"] = dbOut($row["FirstName"]);
     #use dbOut() to clean strings, replace escaped quotes
     $_SESSION["Privilege"] = dbOut($row["Privilege"]);
function updateExecute($nav1 = '')
{
    $iConn = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die(myerror(__FILE__, __LINE__, mysqli_connect_error()));
    $params = array('FirstName', 'LastName', 'AdminID', 'Email', 'Privilege');
    #required fields
    if (!required_params($params)) {
        //abort - required fields not sent
        feedback("Data not entered/updated. (error code #" . createErrorCode(THIS_PAGE, __LINE__) . ")", "error");
        header('Location:' . ADMIN_PATH . THIS_PAGE);
        die;
    }
    if (isset($_POST['AdminID']) && (int) $_POST['AdminID'] > 0) {
        $AdminID = (int) $_POST['AdminID'];
        #Convert to integer, will equate to zero if fails
    } else {
        feedback("AdminID not numeric", "warning");
        header('Location:' . ADMIN_PATH . THIS_PAGE);
        die;
    }
    $FirstName = dbIn($_POST['FirstName'], $iConn);
    $LastName = dbIn($_POST['LastName'], $iConn);
    $Email = strtolower(dbIn($_POST['Email'], $iConn));
    $Privilege = dbIn($_POST['Privilege'], $iConn);
    #check for duplicate email
    $sql = sprintf("select AdminID from " . PREFIX . "Admin WHERE (Email='%s') and AdminID != %d", $Email, $AdminID);
    $result = mysqli_query($iConn, $sql) or die(myerror(__FILE__, __LINE__, mysqli_error($iConn)));
    if (mysqli_num_rows($result) > 0) {
        # someone already has email!
        feedback("Email already exists - please choose a different email.");
        header('Location:' . ADMIN_PATH . THIS_PAGE);
        die;
    }
    #sprintf() function allows us to filter data by type while inserting DB values.  Illegal data is neutralized, ie: numerics become zero
    $sql = sprintf("UPDATE " . PREFIX . "Admin set FirstName='%s',LastName='%s',Email='%s',Privilege='%s' WHERE AdminID=%d", $FirstName, $LastName, $Email, $Privilege, $AdminID);
    @mysqli_query($iConn, $sql) or die(myerror(__FILE__, __LINE__, mysqli_error($iConn)));
    //feedback success or failure of insert
    if (mysqli_affected_rows($iConn) > 0) {
        feedback("Successfully Updated!", "notice");
        if ($_SESSION["AdminID"] == $AdminID) {
            #this is me!  update current session info:
            $_SESSION["Privilege"] = $Privilege;
            $_SESSION["FirstName"] = $FirstName;
        }
    } else {
        feedback("Data NOT Updated! (or not changed from original values)");
    }
    include INCLUDE_PATH . 'header.php';
    echo '
		<h1>Edit Administrator</h1>
		<p align="center"><a href="' . ADMIN_PATH . THIS_PAGE . '">Edit More</a></p>
		<p align="center"><a href="' . ADMIN_PATH . 'admin_dashboard.php">Exit To Admin</a></p>
		';
    include INCLUDE_PATH . 'footer.php';
}
        die;
    }
    $params = array('FirstName', 'LastName', 'PWord1', 'Email', 'Privilege');
    #required fields
    if (!required_params($params)) {
        //abort - required fields not sent
        feedback("Data not entered/updated. (error code #" . createErrorCode(THIS_PAGE, __LINE__) . ")", "error");
        header('Location:' . ADMIN_PATH . THIS_PAGE);
        die;
    }
    $iConn = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die(myerror(__FILE__, __LINE__, mysqli_connect_error()));
    $FirstName = dbIn($_POST['FirstName'], $iConn);
    $LastName = dbIn($_POST['LastName'], $iConn);
    $AdminPW = dbIn($_POST['PWord1'], $iConn);
    $Email = strtolower(dbIn($_POST['Email'], $iConn));
    $Privilege = dbIn($_POST['Privilege'], $iConn);
    #sprintf() function allows us to filter data by type while inserting DB values.
    $sql = sprintf("INSERT into " . PREFIX . "Admin (FirstName,LastName,AdminPW,Email,Privilege,DateAdded) VALUES ('%s','%s',SHA('%s'),'%s','%s',NOW())", $FirstName, $LastName, $AdminPW, $Email, $Privilege);
    # insert is done here
    @mysqli_query($iConn, $sql) or die(myerror(__FILE__, __LINE__, mysqli_error($iConn)));
    # feedback success or failure of insert
    if (mysqli_affected_rows($iConn) > 0) {
        feedback("Administrator Added!", "notice");
    } else {
        feedback("Administrator NOT Added!", "error");
    }
    include INCLUDE_PATH . 'header.php';
    echo '
		<p><h1>Add Administrator</h1></p>
		<p align="center"><a href="' . ADMIN_PATH . THIS_PAGE . '">Add More</a></p>
		<p align="center"><a href="' . ADMIN_PATH . 'admin_dashboard.php">Exit To Admin</a></p>
function updateExecute($nav1 = '')
{
    $params = array('AdminID', 'PWord1');
    #required fields
    if (!required_params($params)) {
        //abort - required fields not sent
        feedback("Data not entered/updated. (error code #" . createErrorCode(THIS_PAGE, __LINE__) . ")", "error");
        header('Location:' . ADMIN_PATH . THIS_PAGE);
        die;
    }
    if (isset($_POST['AdminID']) && (int) $_POST['AdminID'] > 0) {
        $AdminID = (int) $_POST['AdminID'];
        #Convert to integer, will equate to zero if fails
    } else {
        feedback("AdminID not numeric", "warning");
        header('Location:' . ADMIN_PATH . THIS_PAGE);
        die;
    }
    if (!onlyAlphaNum($_POST['PWord1'])) {
        //data must be alphanumeric or punctuation only
        feedback("Data entered for password must be alphanumeric only");
        header('Location:' . ADMIN_PATH . THIS_PAGE);
        die;
    }
    $iConn = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die(myerror(__FILE__, __LINE__, mysqli_connect_error()));
    $AdminPW = dbIn($_POST['PWord1'], $iConn);
    # SHA() is the MySQL function that encrypts the password
    $sql = sprintf("UPDATE " . PREFIX . "Admin set AdminPW=SHA('%s') WHERE AdminID=%d", $AdminPW, $AdminID);
    @mysqli_query($iConn, $sql) or die(myerror(__FILE__, __LINE__, mysqli_error($iConn)));
    //feedback success or failure of insert
    if (mysqli_affected_rows($iConn) > 0) {
        feedback("Password Successfully Reset!", "notice");
    } else {
        feedback("Password NOT Reset! (or not changed from original value)");
    }
    @mysqli_close($iConn);
    include INCLUDE_PATH . 'header.php';
    echo '
	<p align="center"><h3>Reset Administrator Password</h3></p>
	<p align="center"><a href="' . ADMIN_PATH . THIS_PAGE . '">Reset More</a></p>
	<p align="center"><a href="' . ADMIN_PATH . 'admin_dashboard.php">Exit To Admin</a></p>
	';
    include INCLUDE_PATH . 'footer.php';
}