<?php // config/database.php $host = 'localhost'; $dbname = 'php_template_db'; $username = 'root'; // Change for production $password = ''; // Change for production try { $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password); // Set PDO to throw exceptions on errors $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Fetch associative arrays by default $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die("Database connection failed: " . $e->getMessage()); }
.container { width: 80%; margin: auto; overflow: auto; padding: 20px; background: white; min-height: 70vh; }
.error { color: red; font-size: 0.9rem; margin-top: 0.2rem; }
<h3>Your Items</h3> <?php if (count($items) > 0): ?> <ul class="items-list"> <?php foreach ($items as $item): ?> <li> <strong><?= htmlspecialchars($item['title']) ?></strong> <p><?= nl2br(htmlspecialchars($item['description'])) ?></p> <small>Created: <?= $item['created_at'] ?></small> </li> <?php endforeach; ?> </ul> <?php else: ?> <p>You haven't added any items yet.</p> <?php endif; ?> <?php include 'includes/footer.php'; ?> <?php session_start(); session_destroy(); header("Location: index.php"); exit(); ?> Step 9: Basic CSS ( assets/css/style.css ) Add this minimal styling to make the template presentable:
function requireLogin() { if (!isLoggedIn()) { redirect('login.php'); } }
$stmt = $pdo->prepare("SELECT id, username, password_hash FROM users WHERE username = ? OR email = ?"); $stmt->execute([$username, $username]); $user = $stmt->fetch();
/php-database-template/ │ ├── config/ │ └── database.php ├── includes/ │ ├── header.php │ ├── footer.php │ └── functions.php ├── assets/ │ └── css/ │ └── style.css ├── index.php ├── register.php ├── login.php ├── logout.php ├── dashboard.php └── sql/ └── setup.sql First, create a database and a users table. Run this SQL in phpMyAdmin or MySQL command line:
input, textarea { width: 100%; padding: 0.5rem; border: 1px solid #ddd; border-radius: 4px; }