Using PHP to Retrieve Data

Download Report

Transcript Using PHP to Retrieve Data

Retrieving Stored Data
Introduction
This set of slides shows:
The information source database structure
The data we are expecting to deal with
The output of the data reader PHP script
The code to build a dynamic SQL database
The code to read values from a database
Nic Shulver, [email protected]
Retrieving Stored Data
DB Structure
 Table: tblUsers
 Fields:
–
id, an “auto-increment” integer
–
userSurname, text
–
userForename, text
–
userPassword, text
 Note that passwords are normally stored in an
encrypted form (more in later lectures)
Nic Shulver, [email protected]
Retrieving Stored Data
The PHP/SQL to create the table
// Creates the table if it isn't already there. You may prefer to build
// tables by hand using the management GUI (e.g. phpMyAdmin)
$query = 'CREATE TABLE IF NOT EXISTS tblUsers (
id INT NOT NULL AUTO_INCREMENT,
userSurname VARCHAR(30),
userForename VARCHAR(30),
userPassword VARCHAR(30),
PRIMARY KEY(id) )';
$mysqli->query($ query) or die("Could not create table: " .
$mysqli->error);
Nic Shulver, [email protected]
Retrieving Stored Data
The data set we are using
 Example data
 Small selection of
names and
passwords
 But no repeated
surnames – not
such good test
data
 Hard to design
“realistic” data
Nic Shulver, [email protected]
Retrieving Stored Data
Simple Search Page
 The user can type in
 a surname,
 a forename,
 then specify the type of
search
 The interface allows for a
“wildcard” character, the
asterisk sign %
 % matches any text
 % is built into SQL
 % used in PHP, * used in
Access queries
Nic Shulver, [email protected]
Retrieving Stored Data
Example Output
Read A DB Example Search Results
Running the SQL command:
SELECT * FROM tblUsers WHERE
userSurname LIKE 'suarez' OR
userForename LIKE 'jason' ORDER BY id
ASC;
492: Linda Suarez; pwd=[fr0d0ba991n5]
921: Jason Imtiaz; pwd=[maskmypony]
Nic Shulver, [email protected]
Retrieving Stored Data
Example Output
Read A DB Example Search Results
Running the SQL command:
SELECT * FROM tblUsers WHERE
userSurname LIKE 's%' OR userForename
LIKE 'j%' ORDER BY id ASC;
90: Luis Sanchez; pwd=[alhambra]
492: Linda Suarez; pwd=[fr0d0ba991n5]
921: Jason Imtiaz; pwd=[maskmypony]
Nic Shulver, [email protected]
Retrieving Stored Data
Example Output
Read A DB Example Search Results
Running the SQL command:
SELECT * FROM tblUsers WHERE
userSurname LIKE ‘%i%' AND userForename
LIKE ‘%i%';
911: Toni Collins; pwd=[swissair]
901: Wilbur Harris; pwd=[wilburharris]
Nic Shulver, [email protected]
The Code, #1
<?php
// ReadDB example code
// gets data from form, may be an empty string
if(isset($_REQUEST["ReadDBsearch"]))
{
$sUserSurname = $_REQUEST["txtUserSurname"];
$sUserForename = $_REQUEST["txtUserForename"];
$sBoolean = $_REQUEST["radioLogic"];
}
else // shows the REQUEST fields and server variables
{ phpInfo(32); // useful when testing, NOT published site!
die("We don't seem to be running the right web form...");
}
Retrieving Stored Data
The Code, #2
// --------------------------------------------------- //
// checks to see if all strings are empty,
// if so we just go back to the search page
if( strlen($sUserSurname)
+ strlen($sUserForename) == 0 )
{ header("Location: ReadDB.htm");
}
Nic Shulver, [email protected]
The Code, #3
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<link rel=stylesheet href="simple.css" type="text/css">
<title>Read A DB Example</title>
</head>
<body>
<h2>Read A DB Example Search Results</h2>
The Code, #4
<?php
//=====================================//
// Database Section
//=====================================//
// Connects to a MySQL server
$id= 'xy123456';
$mysqli = new mysqli("web.fcet.staffs.ac.uk", $id, $id, $id);
$sSQL= "SELECT * FROM tblUsers WHERE
userSurname LIKE '$sUserSurname'
$sBoolean
userForename LIKE '$sUserForename'
ORDER BY id ASC;";
echo "Running the SQL command:<br /> $sSQL <br /><br />";
// searches the DB
$rsMain = $mysqli->query( $sSQL );
The Code, #5
//=====================================//
// Outputs all the selected fields in table "tblUsers",
// processes each record until we reach end of recordset
while($row = $rsMain->fetch_assoc())
{ $sSurname = $row["userSurname"];
$sForename = $row["userForename"];
$sPassword = $row["userPassword"];
$nID = $row["id"];
// prints each of the fields
print "$nID: $sForename $sSurname; pwd=[$sPassword]<br
/>\n";
}
The Code, #6
//=====================================//
// frees up resources
$rsMain = null;
$mysqli->close();
?>
</body>
</html>
Retrieving Stored Data
Search Script Steps
So the search software takes the form data,
Connects to the database,
Reads only the interesting records,
Holds data in a recordset,
Reads the data from each of the fields,
Writes information out to the user,
Moves on to the next record.
Nic Shulver, [email protected]
Retrieving Stored Data
Some notes and comments
The user interface for searching is poor –
relies on knowing the “ste%en” approach to
match “Steven” or “Stephen” (or “stellar alien”!)
There are serious security holes in the way
the SQL is built
What if this script is run from a different form?
The field “radioLogic” is inserted directly into the
SQL command… could contain ANY commands!
More secure if we use “prepared statements”
Nic Shulver, [email protected]
Retrieving Stored Data
Conclusion
The database, script and HTML interface
page are available for download
The script is only 80 lines long (so pretty
short) and really needs more error trapping
The SQL, database and output are all pretty
simple
But putting it all together in a working script
isn’t so easy
Nic Shulver, [email protected]