Building a User Login System in PHP with OOP pt.I

KolaKachi
This entry is part 22 of 24 in the series PHP Object-Oriented Programming(OOP) Crash Course

In our PHP Object-Oriented Programming (OOP) course, we are embarking on an exciting practical project that will allow us to apply the knowledge and concepts we’ve learned so far in our OOP series. This project revolves around creating a user login system, one of the most common and fundamental functionalities in web development. In this blog post, we’ll take you through the initial steps of setting up the project and discuss the creation of essential classes.

Setting Up the Project

To begin, let’s get an overview of what our project entails:

  1. User Login: We’ll create a user login system to allow users to securely access the application.
  2. User Logout: Users will have the ability to log out of their accounts when they’re done.
  3. Database Operations: We’ll focus on reading data from the database, updating user information, and creating new user accounts through sign-up.

Now, let’s dive into the practical steps for setting up our project.

File Structure

The first thing we do is set up a well-organized file structure for our project. This structure will help us maintain clean and manageable code. Here’s a brief outline of the files and folders we create:

  • index.php: This serves as the homepage of our website.
  • boot.php: This file contains initialization information and global constants.
  • classes/: A folder to store our PHP classes.
    • Database.php: The database class for handling database connections.
    • User.php: A class for dealing with user-related operations.
    • Session.php: A class to manage user sessions.
  • login.php: The login page for users to sign in.
  • logout.php: A page where users can log out.
  • signup.php: The sign-up page for new user registrations.

The boot.php File

Inside the boot.php file, we perform essential initialization tasks. We start by setting up an autoloading function that will automatically load our class files when needed. This eliminates the need to manually include class files in every script. Here’s an example of our autoloading function:

spl_autoload_register(function ($className) {
    include 'classes/' . $className . '.php';
});

Next, we define important constants related to our database configuration (host, username, password, and database name). These constants will be accessible throughout our project:

define('DB_HOST', 'localhost');
define('DB_USER', 'your_username');
define('DB_PASSWORD', 'your_password');
define('DB_NAME', 'oop_db');

The index.php File

Now that we’ve set up our file structure and created the boot.php file, let’s make sure to include it in our index.php file. This ensures that the initialization tasks defined in boot.php are executed when the homepage is loaded. Here’s the corrected code snippet for index.php:

// Include our initialization file
include 'boot.php';

// Start building your homepage content here
?>

<!-- Your HTML and PHP code for the homepage goes here -->

<?php
// Any additional PHP code for the homepage
?>

By including boot.php in index.php, we ensure that our global constants and autoloading function are available throughout our project. This setup helps maintain a consistent and organized structure for our application.

The Database Class

Our Database.php is responsible for handling database connections and operations. We define class properties, such as connection, query, and queryType. These properties will store the connection to the database, the query to be executed, and the type of query (e.g., SELECT, INSERT, UPDATE). Here’s an example of the class structure:

class Database {
    protected static $instance;
    protected $connection;
    protected $query;
    protected $queryType;
    
    public static function table() {
    
    }
}

We also create a static function, table, that will allow us to chain methods for creating SQL queries in a more human-readable format. This approach is inspired by Laravel and promotes cleaner, more concise code. With this system, we can easily perform actions like selecting data from tables, updating records, or inserting new data without creating a new instance of the database class each time. Here’s an example of how you can use this method:

$data = Database::table('users')
    ->select('username', 'email')
    ->where('user_id', '=', 1)
    ->first();

Conclusion

With the initial setup of our project in place, we’re now ready to dive into coding the essential functionality for user login, logout, and sign-up. In upcoming articles, we will explore each of these components in more detail, using the Object-Oriented Programming principles we’ve learned in our course.

Stay tuned for the next installment in our series, where we’ll start building the user login system! We hope this project will not only enhance your PHP OOP skills but also provide you with practical experience in creating web applications. You can find the repo here

Series Navigation<< Autoloading Classes with PHP and NamespaceBuilding a User Login System in PHP with OOP pt.II >>

Leave a Reply

Your email address will not be published. Required fields are marked *