267
How Web Database Architectures Work
<input name=”searchterm” type=”text”>
<br />
<input type=”submit” value=”Search”>
</form>
</body>
</html>
This HTML form is reasonably straightforward.The output of this HTML is shown in
Figure 11.1.
Listing 11.1
Continued
Figure 11.1 The search form is quite general, so you can search for a book
on its title, author, or ISBN.
The script that will be called when the Search button is clicked is 
results.php
.It is
listed in full in Listing 11.2.Through the course of this chapter,we will discuss what this
script does and how it works.
Listing 11.2 results.php—This Script Retrieves Search Results from the MySQL
Database and Formats Them for Display
<html>
<head>
<title>Book-O-Rama Search Results</title>
</head>
<body>
<h1>Book-O-Rama Search Results</h1>
<?php
// create short variable names
$searchtype=$_POST[‘searchtype’];
$searchterm=$_POST[‘searchterm’];
Pdf form save - C# PDF Field Edit Library: insert, delete, update pdf form field in C#.net, ASP.NET, MVC, Ajax, WPF
Online C# Tutorial to Insert, Delete and Update Fields in PDF Document
change font size pdf form; adding a signature to a pdf form
Pdf form save - VB.NET PDF Field Edit library: insert, delete, update pdf form field in vb.net, ASP.NET, MVC, Ajax, WPF
How to Insert, Delete and Update Fields in PDF Document with VB.NET Demo Code
best way to make pdf forms; add email button to pdf form
268
Chapter 11 Accessing Your MySQL Database from the Web with PHP
$searchterm= trim($searchterm);
if (!$searchtype || !$searchterm)
{
echo ‘You have not entered search details.  Please go back and try again.’;
exit;
}
if (!get_magic_quotes_gpc())
{
$searchtype = addslashes($searchtype);
$searchterm = addslashes($searchterm);
}
@ $db = new mysqli(‘localhost’, ‘bookorama’, ‘bookorama123’, ‘books’);
if (mysqli_connect_errno())
{
echo ‘Error: Could not connect to database.  Please try again later.’;
exit;
}
$query = “select * from books where “.$searchtype.” like ‘%”.$searchterm.”%’”;
$result = $db->query($query);
$num_results = $result->num_rows;
echo ‘<p>Number of books found: ‘.$num_results.’</p>’;
for ($i=0; $i <$num_results; $i++)
{
$row = $result->fetch_assoc();
echo ‘<p><strong>’.($i+1).’. Title: ‘;
echo htmlspecialchars(stripslashes($row[‘title’]));
echo ‘</strong><br />Author: ‘;
echo stripslashes($row[‘author’]);
echo ‘<br />ISBN: ‘;
echo stripslashes($row[‘isbn’]);
echo ‘<br />Price: ‘;
echo stripslashes($row[‘price’]);
echo ‘</p>’;
}
Listing 11.2 Continued
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Merge Microsoft Office Word, Excel and PowerPoint data to PDF form. Append one PDF file to the end of another and save to a single PDF file.
add image to pdf form; create a fillable pdf form from a word document
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
to extract single or multiple pages from adobe PDF file and save into a The portable document format, known as PDF document, is a widely-used form of file
adding text fields to pdf acrobat; change font pdf fillable form
269
Querying a Database from the Web
$result->free();
$db->close();
?>
</body>
</html>
Note that this script allows you to enter the MySQL wildcard characters 
%
and _
(underscore).This capability can actually be useful for the user.You can escape these
characters if it will cause a problem for your application.
Figure 11.2 illustrates the results of using this script to perform a search.
Listing 11.2 Continued
Figure 11.2 The results of searching the database for books about Java are
presented in a web page using the 
results.php
script.
Querying a Database from the Web
In any script used to access a database from the Web,you follow some basic steps:
1. Check and filter data coming from the user.
2. Set up a connection to the appropriate database.
3. Query the database.
4. Retrieve the results.
5. Present the results back to the user.
These are the steps we followed in the script 
results.php
,so now let’s go through each
of them in turn.
VB.NET Image: How to Save Image & Print Image Using VB.NET
printing multi-page document files, like PDF and Word is used to illustrate how to save a sample RE__Test Public Partial Class Form1 Inherits Form Public Sub New
adding image to pdf form; change font in pdf form
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
this RasterEdge XDoc.PDF SDK, you can simply delete a single page from a PDF document using VB.NET or remove any page from a PDF document and save to local
create a fillable pdf form in word; changing font size in pdf form
270
Chapter 11 Accessing Your MySQL Database from the Web with PHP
Checking and Filtering Input Data
You begin the script by stripping any whitespace that the user might have inadvertently
entered at the beginning or end of his search term.You do this by applying the function
trim()
to 
$searchterm
:
$searchterm=trim($searchterm);
The next step is to verify that the user has entered a search term and search type. Note
that you check whether he entered a search term after trimming whitespace from the
ends of 
$searchterm
.If you arrange these lines in the opposite order, you could
encounter situations in which a user’s search term is not empty and therefore does not
create an error message;instead,it is all whitespace,so it is deleted by 
trim()
:
if (!$searchtype || !$searchterm)
{
echo ‘You have not entered search details.  Please go back and try again.’;
exit;
}
You check the 
$searchtype
variable even though in this case it’s coming from an
HTML 
SELECT
.You might ask why you should bother checking data that has to be filled
in.It’s important to remember that there might be more than one interface to your data-
base.For example,Amazon has many affiliates who use its search interface.Also,it’s sensi-
ble to screen data in case of any security problems that can arise because of users coming
from different points of entry.
Also,when you plan to use any data input by a user,you need to filter it appropriate-
ly for any control characters.As you might remember,in Chapter 4,“String
Manipulation and Regular Expressions,”we described the functions 
addslashes()
,
stripslashes()
,and 
get_magic_quotes_gpc()
.You need to escape data when submit-
ting any user input to a database such as MySQL.
In this case,you check the value of the 
get_magic_quotes_gpc()
function.It tells
you whether quoting is being done automatically.If it is not,you use 
addslashes()
to
escape the data:
if (!get_magic_quotes_gpc())
{
$searchtype = addslashes($searchtype);
$searchterm = addslashes($searchterm);
}
You also use 
stripslashes()
on the data coming back from the database. If the magic
quotes feature is turned on,the data will have slashes in it when it comes back from the
database,so you need to take them out.
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
Description: Convert to DOCX/TIFF with specified zoom value and save it into stream. Parameters: zoomValue, The magnification of the original PDF page size.
chrome save pdf with fields; adding text to pdf form
C# Create PDF from Tiff Library to convert tif images to PDF in C#
Description: Convert to PDF and save it on the disk. Parameters: Name, Description, Valid Value. Description: Convert to PDF and save it into stream. Parameters:
adding text field to pdf; add date to pdf form
271
Setting Up a Connection
Here, you use the function 
htmlspecialchars()
to encode characters that have spe-
cial meanings in HTML.The current test data does not include any ampersands (
&
),less
than (
<
),greater than (
>
),or double quotation mark (
) symbols,but many fine book
titles contain an ampersand.By using this function,you can eliminate future errors.
Setting Up a Connection
PHP5 has a new library for connecting to MySQL.This library is called mysqli (the i
stands for improved).The mysqli library is suitable for use with MySQL version 4 and
later.At version 4,a new connection protocol that is much faster was added to MySQL,
and mysqli allows you to take advantage of it.The mysqli library allows you to use either
an object-oriented or procedural syntax.
You use the following line in the script to connect to the MySQL server:
@ $db = new mysqli(‘localhost’, ‘bookorama’, ‘bookorama123’, ‘books’);
This line instantiates the 
mysqli
class and creates a connection to host 
‘localhost’
with username 
‘bookorama’
,and password 
‘bookorama123’
.The connection is set up
to use the database called books.
Using this object-oriented approach,you can now invoke methods on this object to
access the database.If you prefer a procedural approach,mysqli allows for this,too.To
connect in a procedural fashion,you would use
@ $db = mysqli_connect(‘localhost’, ‘bookorama’, ‘bookorama123’, ‘books’);
This function returns a resource rather than an object.This resource represents the con-
nection to the database, and if you are using the procedural approach, you will need to
pass this resource in to all the other mysqli functions.This is very similar to the way the
file-handling functions,such as 
fopen()
,work.
Most of the mysqli functions have an object-oriented interface and a procedural
interface.Generally,the differences are that the procedural version function names start
with 
mysqli_
and require you to pass in the resource handle you obtained from
mysqli_connect()
.Database connections are an exception to this rule because they can
be made by the mysqli object’s constructor.
The result of your attempt at connection is worth checking because none of the rest of
code will work without a valid database connection.You do this using the following code:
if (mysqli_connect_errno())
{
echo ‘Error: Could not connect to database.  Please try again later.’;
exit;
}
(This code is the same for the object-oriented and procedural versions.) The
mysqli_connect_errno()
function returns an error number on error,or zero on success.
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
key. Quick to remove watermark and save PDF text, image, table, hyperlink and bookmark to Word without losing format. Powerful components
add editable fields to pdf; pdf form creation
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Description: Convert to PDF/TIFF and save it on the disk. Parameters: Description: Convert to PDF/TIFF and save it into stream. Parameters:
pdf add signature field; add fields to pdf form
272
Chapter 11 Accessing Your MySQL Database from the Web with PHP
Note that when you connect to the database,you begin the line of code with the
error suppression operator,
@
.This way,you can handle any errors gracefully.(This could
also be done with exceptions,which we have not used in this simple example.)
Bear in mind that there is a limit to the number of MySQL connections that can
exist at the same time.The MySQL parameter 
max_connections
determines what this
limit is.The purpose of this parameter and the related Apache parameter 
MaxClients
is
to tell the server to reject new connection requests instead of allowing machine
resources to be completely used up at busy times or when software has crashed.
You can alter both of these parameters from their default values by editing the con-
figuration files.To set 
MaxClients
in Apache,edit the 
httpd.conf
file on your system.
To set 
max_connections
for MySQL, edit the file 
my.conf
.
Choosing a Database to Use
Remember that when you are using MySQL from a command-line interface,you need
to tell it which database you plan to use with a command such as
use books;
You also need to do this when connecting from the Web.The database to use is specified
as a parameter to the 
mysqli
constructor or the 
mysqli_connect()
function.If you
want to change the default database,you can do so with the 
mysqli_select_db()
func-
tion.It can be accessed as either
$db->select_db(dbname)
or as
mysqli_select_db(db_resource, db_name)
Here, you can see the similarity between the functions that we described before:The
procedural version begins with 
mysqli_
and requires the extra database handle
parameter.
Querying the Database
To actually perform the query,you can use the 
mysqli_query()
function.Before doing
this,however,it’s a good idea to set up the query you want to run:
$query = “select * from books where $searchtype like ‘%$searchterm%’”;
In this case,you search for the user-input value (
$searchterm
) in the field the user spec-
ified (
$searchtype
).Notice the use of 
like
for matching rather than 
equal
:it’s usually
a good idea to be more tolerant in a database search.
Tip
Remember that the query you send to MySQL does not need a semicolon at the end of it, unlike a query you
type into the MySQL monitor.
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Description: Convert to PDF/TIFF and save it on the disk. Parameters: Description: Convert to PDF/TIFF and save it into stream. Parameters:
add image field to pdf form; convert pdf to editable form
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Description: Convert to PDF/TIFF and save it on the disk. Parameters: Description: Convert to PDF/TIFF and save it into stream. Parameters:
change font size in fillable pdf form; add form fields to pdf
273
Retrieving the Query Results
You can now run the query:
$result = $db->query($query);
Or,if you wanted to use the procedural interface,you would use
$result = mysqli_query($db, $query);
You pass in the query you want to run and, in the procedural interface,the database link
(again,in this case 
$db
).
The object-oriented version returns a result object;the procedural version returns a
result resource.(This is similar to the way the connection functions work.) Either way,
you store the result in a variable (
$result
) for later use.This function returns
false
on
failure.
Retrieving the Query Results
Alarge variety of functions is available to break the results out of the result object or
identifier in different ways.The result object or identifier is the key to accessing the rows
returned by the query.
In this example,you counted the number of rows returned and also used the
mysqli_fetch_assoc()
function.
When you use the object-oriented approach,the number of rows returned is stored
in the 
num_rows
member of the result object,and you can access it as follows:
$num_results = $result->num_rows;
When you use a procedural approach,the function 
mysqli_num_rows()
gives you the
number of rows returned by the query.You should pass it the result identifier,like this:
$num_results = mysqli_num_rows($result);
It’s useful to know this—if you plan to process or display the results,as you now know
how many there are and can loop through them:
for ($i=0; $i <$num_results; $i++)
{
// process results
}
In each iteration of this loop,you call 
$result->fetch_assoc()
(or
mysqli_fetch_assoc()
).The loop does not execute if no rows are returned.This is a
function that takes each row from the resultset and returns the row as an array, with each
key an attribute name and each value the corresponding value in the array:
$row = $result->fetch_assoc();
Or you can use a procedural approach:
$row = mysqli_fetch_assoc($result);
274
Chapter 11 Accessing Your MySQL Database from the Web with PHP
Given the array 
$row
,you can go through each field and display it appropriately,as
shown in this example:
echo ‘<br />ISBN: ‘;
echo stripslashes($row[‘isbn’]);
As previously mentioned,you call 
stripslashes()
to tidy up the value before display-
ing it.
Several variations can be used to get results from a result identifier.Instead of an array
with named keys,you can retrieve the results in an enumerated array with
mysqli_fetch_row()
,as follows:
$row = $result->fetch_row($result);
or
$row = mysqli_fetch_row($result);
Here, the attribute values are listed in each of the array values 
$row[0]
,
$row[1]
,and so
on.(The 
mysqli_fetch_array()
function allows you to fetch a row as either or both
kinds of array.)
You could also fetch a row into an object with the 
mysqli_fetch_object()
func-
tion:
$row = $result->fetch_object();
or
$row = mysqli_fetch_object($result);
You can then access each of the attributes via
$row->title
,
$row->author
,and so on.
Disconnecting from the Database
You can free up your resultset by calling either
$result->free();
or
mysqli_free_result($result);
You can then use
$db->close();
or
mysqli_close($db);
to close a database connection.Using this command isn’t strictly necessary because the
connection will be closed when a script finishes execution anyway.
275
Putting New Information in the Database
Putting New Information in the Database
Inserting new items into the database is remarkably similar to getting items out of the
database.You follow the same basic steps: make a connection, send a query, and check the
results. In this case,the query you send is an 
INSERT
rather than a 
SELECT
.
Although this process is similar,looking at an example can sometimes be useful. In
Figure 11.3,you can see a basic HTML form for putting new books into the database.
Figure 11.3 This interface for putting new books into the database could be
used by Book-O-Rama’s staff.
The HTML for this page is shown in Listing 11.3.
Listing 11.3 newbook.html— HTML for the Book Entry Page
<html>
<head>
<title>Book-O-Rama - New Book Entry</title>
</head>
<body>
<h1>Book-O-Rama - New Book Entry</h1>
<form action=”insert_book.php” method=”post”>
<table border=”0”>
<tr>
<td>ISBN</td>
<td><input type=”text” name=”isbn” maxlength=”13” size=”13”></td>
</tr>
<tr>
<td>Author</td>
<td> <input type=”text” name=”author” maxlength=”30” size=”30”></td>
</tr>
276
Chapter 11 Accessing Your MySQL Database from the Web with PHP
<tr>
<td>Title</td>
<td> <input type=”text” name=”title” maxlength=”60” size=”30”></td>
</tr>
<tr>
<td>Price $</td>
<td><input type=”text” name=”price” maxlength=”7” size=”7”></td>
</tr>
<tr>
<td colspan=”2”><input type=”submit” value=”Register”></td>
</tr>
</table>
</form>
</body>
</html>
The results of this form are passed along to 
insert_book.php
,a script that takes the
details,performs some minor validations,and attempts to write the data into the data-
base.The code for this script is shown in Listing 11.4.
Listing 11.4 insert_book.php— This Script Writes New Books into the Database
<html>
<head>
<title>Book-O-Rama Book Entry Results</title>
</head>
<body>
<h1>Book-O-Rama Book Entry Results</h1>
<?php
// create short variable names
$isbn=$_POST[‘isbn’];
$author=$_POST[‘author’];
$title=$_POST[‘title’];
$price=$_POST[‘price’];
if (!$isbn || !$author || !$title || !$price)
{
echo ‘You have not entered all the required details.<br />’
.’Please go back and try again.’;
exit;
}
if (!get_magic_quotes_gpc())
{
Listing 11.3 Continued
Documents you may be interested
Documents you may be interested