1. Setting Up the Database
Open phpMyAdmin or any MySQL client you use.
Create a new database, e.g., blog_db.
Inside the database, create the following tables:
users (for user authentication)
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
posts (for blog posts)
sql
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
category_id INT,
author_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (author_id) REFERENCES users(id),
FOREIGN KEY (category_id) REFERENCES categories(id)
);
categories (for managing categories)
sql
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) UNIQUE NOT NULL
);
comments (for user comments)
sql
CREATE TABLE comments (
id INT AUTO_INCREMENT PRIMARY KEY,
post_id INT,
user_id INT,
comment TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (post_id) REFERENCES posts(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
2. Designing the Blog Structure
Here’s how you can structure your project:
index.php: Homepage (lists all blog posts)
post.php: Displays a single blog post
admin/: Folder for admin functions like adding/editing posts
login.php: Login page for admin
create_post.php: Add a new blog post
manage_categories.php: Manage blog categories
3. Writing the PHP Code
Connecting to the Database:
php
<?php
$servername = "localhost";
$username = "root";
$password = ""; // Your MySQL password
$dbname = "blog_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
Fetching and Displaying Blog Posts:
php
<?php
include 'db_connect.php';
$sql = "SELECT posts.id, posts.title, posts.content, categories.name AS category
FROM posts
LEFT JOIN categories ON posts.category_id = categories.id";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
echo "<h2>" . $row['title'] . "</h2>";
echo "<p>" . $row['content'] . "</p>";
echo "<small>Category: " . $row['category'] . "</small><hr>";
}
?>
4. Recommendations for Frameworks or CMS
If you're new to PHP, using a framework or CMS can save you time:
Framework: Laravel or CodeIgniter (great for building projects from scratch)
CMS: WordPress (if you prefer a ready-made solution)
5. Security Best Practices
Use prepared statements in SQL queries to prevent SQL injection.
php
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
Hash passwords using password_hash() and verify with password_verify().
Validate all user inputs before processing.
Store sensitive information (like DB credentials) in a configuration file outside the web root.
Helpful Resources
How to create blog using PHP and MYSQL database?
Modern blog CMS in PHP with MYSQL database | PHP blog scripts