Build Your Own DatabaseDriven Website Using PHP amp;amp; MySQL [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Build Your Own DatabaseDriven Website Using PHP amp;amp; MySQL [Electronic resources] - نسخه متنی

Kevin Yank

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید








Multipurpose Pages

Let's say you wanted to construct your site so that it showed the visitor's
name at the top of every page. With our custom welcome message example above,
we're halfway there already. Here are the problems we'll need to overcome
to extend the example into what we need:



  • We need the name on every page of the site, not just on one.



  • We have no control over which page of our site users will
    view first.



The first problem isn't too hard to overcome. Once we have the user's
name in a variable on one page, we can pass it with any request to another
page by adding the name to the query string of all links[4]:

<a href=" echo(urlencode($_GET['name']));
?>"> A link </a>

Notice that we've embedded PHP code right in the middle of an HTML tag.
This is perfectly legal, and will work just fine. A short cut exists for those
times when you simply want to echo a PHP value in the middle of your HTML
code. The short cut looks like this:

<a href=" class="bold"><?=urlencode($_GET['name'])?>"> A link
</a>

The tags <?= ... ?> perform the same function as the much longer code <?php
echo( ... ); ?>
. This is a handy short
cut that I'll use several times through the rest of this book.

You're familiar with the echo function, but urlencode is probably new
to you. This function takes any special characters in the string (for example,
spaces) and converts them into the special codes they need to be in order
to appear in the query string. For example, if the $name variable
had a value of "Kevin Yank", then, as spaces are not allowed
in the query string, the output of urlencode (and thus
the string output by echo) would be "Kevin+Yank".
PHP would then automatically convert it back when it created the $_GET variable
in newpage.php.

Okay, so we've got the user's name being passed with every link in our
site. Now all we need is to get that name in the first place. In our welcome
message example, we had a special HTML page with a form in it that prompted
the user for his or her name. The problem with this (identified by the second
point above) is that we couldn't—nor would we wish to—force the
user to enter our Website by that page every time he or she visited our site.

The solution is to have every page of our site check to see if a name
has been specified, and prompt the user for a name if necessary[5]. This means that every page of our site will either display its
content, or prompt the user to enter a name, depending on whether the $name variable
is found to have a value. If this is beginning to sound to you like a good
place for an if-else statement, you're a quick study!

We'll refer to pages that can decide whether to display one thing or
another as multipurpose pages. The code of a multipurpose
page looks something like this:

<html>
<head>
<title> Multipurpose Page Outline </title>
</head>
<body>
<?php if (condition) { ?>
<!-- HTML content to display if condition is true -->
<?php } else { ?>
<!-- HTML content to display if condition is false -->
<?php } ?>
</body>
</html>

This code may confuse you at first, but in fact this is just a normal if-else statement
with HTML code sections that depend on the condition, instead of PHP statements.
This example illustrates one of the big selling points of PHP: that you can
switch in and out of "PHP mode" whenever you like. If
you think of <?php as the command to switch into "PHP
mode", and ?> as the command to go back into "normal HTML
mode", the above example should make perfect sense.

There's an alternate form of the if-else statement
that can make your code more readable in situations like this. Here's the
outline for a multipurpose page using the alternate if-else form:

<html>
<head>
<title> Multi-Purpose Page Outline </title>
</head>
<body>
<?php if (condition): ?>
<!-- HTML content to display if condition is true -->
<?php else: ?>
<!-- HTML content to display if condition is false -->
<?php endif; ?>
</body>
</html>

Okay, now that we have all the tools we need in hand, let's look at
a sample page of our site (samplepage.php in the code
archive):

<html>
<head>
<title> Sample Page </title>
</head>
<body>
<?php if ( !isset($_GET['name']) ): ?>
<!-- No name has been provided, so we
prompt the user for one.-->
<form action="<?=$_SERVER['PHP_SELF']?>" method="get">
Please enter your name: <input type="text" name="name" />
<input type="submit" value="GO" />
</form>
<?php else: ?>
<p>Your name: <?=$_GET['name']?></p>
<p>This paragraph contains a
<a href="'name'])?>"
>link</a> that passes the name variable on to the next
document.</p>
<?php endif; ?>
</body>
</html>

There are two new tricks in the above code, but overall you should be
fairly comfortable with the way it works. First of all, we're using a new
function called isset in the condition. This function
returns (outputs) a value of true if the variable it is given has been assigned
a value (i.e. if a name has been provided in this example), and false if the
variable does not exist (i.e. if a name has not yet been given). The exclamation
mark (also known as the negation operator, or the not
operator
), which appears before the name of the
function, reverses the returned value from true to false, or vice-versa. Thus,
the form is displayed when the $_GET['name'] variable is
not set.

The second new trick is the use of the variable $_SERVER['PHP_SELF'] to
specify the action attribute of the <form> tag.
Like $_GET, $_POST, and $_REQUEST, $_SERVER is
an array variable that is automatically created by PHP. $_SERVER contains
a whole bunch of information supplied by your Web server. In particular, $_SERVER['PHP_SELF'] will
always be set to the URL of the current page. This gives us an easy way to
create a form that, when submitted, will load the very same page, but this
time with the $name variable specified.[6]

If we structure all the pages on our site in this way, visitors will
be prompted for their name by the first page they attempt to view, whichever
page this happens to be. Once they enter their name and click "GO", they'll
be presented with the exact page they requested. The name they entered is
then passed in the query string of every link from that point onward, ensuring
that they are prompted only once.

[4]If
this sounds like a lot of work to you, it is. Don't worry; we'll learn much
more practical methods for sharing variables between pages in "Cookies and Sessions in PHP".

[5]Again, if you're dreading the thought of adding PHP code to prompt the
user for a name to every page of your site, don't fret; we'll cover a more
practical way to do this later.

[6]The $_SERVER array
was introduced in PHP 4.1. In previous versions of PHP, these values were
available in an array called $HTTP_SERVER_VARS. Also, when register_globals is
set to On in the php.ini file (the
default setting in PHP versions prior to 4.2), $_SERVER['PHP_SELF'] was
available simply as $PHP_SELF.

/ 190