For uniformity, each page of the project needs to have access to the
same set of features. Therefore, I placed these things in header.php (Example 21-2).
This is the file that is actually included by the other files, and it, in
turn, includes functions.php. This
means that only a single include
is
required in each file.
header.php starts by calling
the function session_start
. As you’ll
recall from Chapter 12,
this sets up a session that will remember certain values we want stored
across different PHP files. Then the document type is set and the
JavaScript O
, S
, and C
functions from Chapter 20 are pulled
in from the file osc.js.
With the session started, the program then checks whether the
session variable 'user'
is currently
assigned a value. If so, a user has logged in and the variable $loggedin
is set to TRUE
.
Based on the value of $loggedin
,
an if
block displays one of two sets of
menus. The nonlogged-in set simply offers options of
Home, Sign up, and Log
in, whereas the logged-in version offers full access to the
project’s features. Additionally, if a user is logged in, her username is
appended in brackets to the page title and placed after the main heading.
We can freely refer to $user
wherever
we want to put in the name, because if the user is not logged in, that
variable is empty and will have no effect on the output.
The styling applied to this file is in the file styles.css (detailed at the end of this chapter); among other things, it creates a wide heading with a colored background and turns the links in the lists to rounded buttons.
<?php // header.php session_start(); echo "<!DOCTYPE html>\n<html><head><script src='OSC.js'></script>"; include 'functions.php'; $userstr = ' (Guest)'; if (isset($_SESSION['user'])) { $user = $_SESSION['user']; $loggedin = TRUE; $userstr = " ($user)"; } else $loggedin = FALSE; echo "<title>$appname$userstr</title><link rel='stylesheet'" . "href='styles.css' type='text/css' />" . "</head><body><div class='appname'>$appname$userstr</div>"; if ($loggedin) { echo "<br ><ul class='menu'>" . "<li><a href='members.php?view=$user'>Home</a></li>" . "<li><a href='members.php'>Members</a></li>" . "<li><a href='friends.php'>Friends</a></li>". "<li><a href='messages.php'>Messages</a></li>" . "<li><a href='profile.php'>Edit Profile</a></li>" . "<li><a href='logout.php'>Log out</a></li></ul><br />"; } else { echo ("<br /><ul class='menu'>" . "<li><a href='index.php'>Home</a></li>" . "<li><a href='signup.php'>Sign up</a></li>" . "<li><a href='login.php'>Log in</a></li></ul><br />" . "<span class='info'>⇒ You must be logged in to " . "view this page.</span><br /><br />"); } ?>
Using the <br />
tag, as
in the preceding example, is a quick and dirty way of creating spacing
in page layout. In this instance it works well, but generally you will
probably want to use CSS margins to fine-tune the spacing around
elements.