Read A DB Example Search Results

Download Report

Transcript Read A DB Example Search Results

Enterprise PHP – Reading Data from a DB
Reading Data from a
relational database in PHP
Using the SQLi interface to read data from a mySQL database.
Nic Shulver, FCES, Staffordshire University
Enterprise PHP – Reading Data from a DB
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
Enterprise PHP – Reading Data from a DB
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)
Enterprise PHP – Reading Data from a DB
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);
Enterprise PHP – Reading Data from a DB
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
Enterprise PHP – Reading Data from a DB
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
Enterprise PHP – Reading Data from a DB
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]
Enterprise PHP – Reading Data from a DB
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]
Enterprise PHP – Reading Data from a DB
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]
Enterprise PHP – Reading Data from a DB
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...");
}
Enterprise PHP – Reading Data from a DB
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");
}
Enterprise PHP – Reading Data from a DB
The Code, #3
<!DOCTYPE HTML>
<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>
Enterprise PHP – Reading Data from a DB
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 );
Enterprise PHP – Reading Data from a DB
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";
}
Enterprise PHP – Reading Data from a DB
The Code, #6
//=====================================//
// frees up resources
$rsMain = null;
$mysqli->close();
?>
</body>
</html>
Enterprise PHP – Reading Data from a DB
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.
Enterprise PHP – Reading Data from a DB
Some notes and comments
 The user interface for searching is poor – relies on knowing
the “ste%en” approach to match “Steven” or “Stephen” (or
“steamed open” 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” – we will come back to
this as it’s very important
Enterprise PHP – Reading Data from a DB
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