Last month (7th January 2023) I had posted an article on this site, Notes about my first PHP app. It was a quiz app. It was part of my learning PHP.
The present post is about writing similar app. The app's functionality is same. But, this time I had coded using some newer PHP features. Notable among them are the usage of data from a database. Another feature is the usage of a layout template with content from different actions. Finally, the app has a better look.
The Data
The quiz data is now stored in a database. The MySQL Server has a quiz
database with two tables - data
and options
.
The data is created using SQL scripts. The app connects to the database and reads data from the tables using mysqli
APIs. You will notice that the data is normalized.
The previous app's data was JSON documents stored in a file. Each JSON document represented a quiz item and had composite data types like arrays.
The App
The app has following components:
-
DatabaseConnection
: This class extendsmysqli
class to create a database connection object. -
DatabaseTable
: An instance of this class is created for each table using the connection object. This has methods like,findAll
,findById
,findByColumn
, etc., to access the database data. -
Controller
: This class takes all theDatabaseTable
objects as input. An instance starts or uses an existing session. This has methods for each of the app's actions (start, play, and end). Each method returns the view template and the data to be rendered in it. -
index
: This is the entry point to the app. This is also the entry point to each of the app's functions. This creates the database connection, the table and controller objects for each action. Based upon the action, specific controller method is executed. The output is rendered into the app's main layout template. -
home_html
,play_html
,end_html
are the views for the start, the quiz play and the quiz end pages respectively. Thelayout_html
is the main template. -
styles.css
is for better looks (or style) andonload_js.js
is JavaScript to set a button's state.play_js.js
has a JavaScript function that evaluates if a question is answered correctly and then makes an Ajax call toscore.php
to update the score (which is tracked in a session variable).
App's Screenshots:
Here are two screenshots of the app running in a browser - the landing and the quiz play pages.
Conclusion
This time in addition to object orientated classes, arrays (and its various functions like shuffle, extract, in_array) and get/post/session variables, notable PHP features used are:
-
spl_autoload_register for registering given function as
__autoload()
implementation. -
Output Buffering Control functions
ob_start
andob_get_clean
. - MySQL Improved Extension with its object orientated APIs to connect to the database and read from the tables.
The app has a better structure and classes in reusable formats. These can be used in other applications with minor modifications. The app is structured to have more tables and more functionality. This is work in progress. The app has better looks due to improved CSS.
The GitHub repository An Example PHP App has the source code. It also has details on MySQL Server 8 installation, mysqli
extension configuration, and the SQL scripts for creating the database with sample data. The app is developed using PHP 8.2 and the database is MySQL 5.5.
Top comments (0)