I'll create a simple MVC structure in PHP for the login system with a confirmation code step. Here's how the files will be organized:
/
├── config/
│ └── database.php
├── controllers/
│ ├── AuthController.php
│ └── VerificationController.php
├── models/
│ ├── User.php
│ └── Verification.php
├── views/
│ ├── auth/
│ │ ├── login.php
│ │ └── verify.php
│ └── layouts/
│ └── main.php
├── public/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── script.js
│ └── index.php
└── routes.php
Let's implement each file:
config/database.php
models/User.php
models/Verification.php
controllers/AuthController.php
controllers/VerificationController.php
views/layouts/main.php
views/auth/login.php
views/auth/verify.php
routes.php
public/index.php
public/css/style.css
public/js/script.js
You'll need to create these tables in your MySQL database:
code
login_system
This implementation follows the MVC pattern:
Here's a complete overview of the project structure. You can create these folders and files manually to set up the project:
login-system/
├── config/
│ └── database.php
├── controllers/
│ ├── AuthController.php
│ └── VerificationController.php
├── models/
│ ├── User.php
│ └── Verification.php
├── views/
│ ├── auth/
│ │ ├── login.php
│ │ └── verify.php
│ └── layouts/
│ └── main.php
├── public/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── script.js
│ └── index.php
└── routes.php
login_system
-- Create users table
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create verification_codes table
CREATE TABLE verification_codes (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
code VARCHAR(6) NOT NULL,
expires_at DATETIME NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Insert a test user (password: password123)
INSERT INTO users (email, password) VALUES
('test@example.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');
config/database.php
to match your environmentThis MVC structure makes it easy to extend the application with additional features like user registration, password reset, and more.