This tutorial will guide you through building a simple personal portfolio website using Bootstrap (for frontend design), PHP (for backend logic), and MySQL (for data storage).
Prerequisites
Before you start, make sure you have the following installed:
- XAMPP (or any local server)
- Basic knowledge of HTML, CSS, PHP, and MySQL
- A code editor (VS Code, Sublime, etc.)
1. Setting Up the Project
Step 1: Create a Project Folder
Create a folder in your htdocs
directory (if using XAMPP) or your server’s root directory. Name it portfolio.
Step 2: Start XAMPP
- Open XAMPP.
- Start Apache (for PHP) and MySQL (for database).
2. Creating the Database
Step 1: Open phpMyAdmin
- Go to http://localhost/phpmyadmin/ in your browser.
- Click Databases, then create a database called portfolio_db.
Step 2: Create a Table
Run the following SQL query in phpMyAdmin (inside portfolio_db
):
CREATE TABLE projects ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, description TEXT NOT NULL, image VARCHAR(255) NOT NULL );
This table will store project details for your portfolio.
3. Designing the Frontend with Bootstrap
Step 1: Create index.php
Inside your portfolio folder, create a file named index.php and add the following Bootstrap template:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>My Portfolio</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <!-- Navigation Bar --> <nav class="navbar navbar-dark bg-dark navbar-expand-lg"> <div class="container"> <a class="navbar-brand" href="#">My Portfolio</a> </div> </nav> <!-- Hero Section --> <header class="bg-primary text-white text-center py-5"> <h1>Welcome to My Portfolio</h1> <p>Showcasing My Work and Projects</p> </header> <!-- Projects Section --> <div class="container my-5"> <h2 class="text-center">Projects</h2> <div class="row"> <?php include 'config.php'; $query = "SELECT * FROM projects"; $result = mysqli_query($conn, $query); while ($row = mysqli_fetch_assoc($result)) { echo '<div class="col-md-4">'; echo '<div class="card mb-4">'; echo '<img src="uploads/' . $row['image'] . '" class="card-img-top" alt="Project Image">'; echo '<div class="card-body">'; echo '<h5 class="card-title">' . $row['title'] . '</h5>'; echo '<p class="card-text">' . $row['description'] . '</p>'; echo '</div>'; echo '</div>'; echo '</div>'; } ?> </div> </div> <!-- Footer --> <footer class="bg-dark text-white text-center py-3"> <p>© <?php echo date("Y"); ?> My Portfolio</p> </footer> </body> </html>
4. Connecting to MySQL Database
Step 1: Create config.php
Inside your portfolio folder, create a file named config.php and add the following code:
<?php $servername = "localhost"; $username = "root"; $password = ""; $database = "portfolio_db"; $conn = mysqli_connect($servername, $username, $password, $database); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } ?>
This file connects PHP to your MySQL database.
5. Adding an Admin Panel to Manage Projects
Step 1: Create admin.php
Create admin.php inside your portfolio folder. This page will allow you to add new projects.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Admin Panel</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container mt-5"> <h2>Admin Panel - Add New Project</h2> <form action="upload.php" method="post" enctype="multipart/form-data"> <div class="mb-3"> <label class="form-label">Project Title</label> <input type="text" name="title" class="form-control" required> </div> <div class="mb-3"> <label class="form-label">Description</label> <textarea name="description" class="form-control" required></textarea> </div> <div class="mb-3"> <label class="form-label">Upload Image</label> <input type="file" name="image" class="form-control" required> </div> <button type="submit" class="btn btn-primary">Add Project</button> </form> </div> </body> </html>
6. Handling File Upload and Storing Data
Step 1: Create upload.php
Inside portfolio folder, create upload.php to handle the form submission and store data in the database.
<?php include 'config.php'; if ($_SERVER["REQUEST_METHOD"] == "POST") { $title = $_POST['title']; $description = $_POST['description']; $image = $_FILES['image']['name']; $target_dir = "uploads/"; $target_file = $target_dir . basename($image); // Move uploaded file if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) { $query = "INSERT INTO projects (title, description, image) VALUES ('$title', '$description', '$image')"; if (mysqli_query($conn, $query)) { echo "Project added successfully. <a href='admin.php'>Go back</a>"; } else { echo "Error: " . mysqli_error($conn); } } else { echo "Error uploading file."; } } ?>
7. Testing Your Portfolio
- Go to http://localhost/portfolio/admin.php
- Add a project with an image.
- Go to http://localhost/portfolio/index.php to see your projects displayed.
Conclusion
Congratulations! You’ve built a personal portfolio using Bootstrap, PHP, and MySQL. You can improve it by:
- Adding a login system for admin security
- Using CSS animations to enhance the UI
- Making it fully responsive