PHP ile Blog Sitesi Nasıl Yapılır?
PHP ile Basit Bir Blog Sitesi Yapma
Bu örnekte, PHP ile basit bir blog sitesi yapacağız. Bu blog sitesinde, kullanıcılar kayıt olabilecek, giriş yapabilecek, yazılarını görebilecek ve yeni yazılar ekleyebilecekler.
Veritabanı
Öncelikle, veritabanımızı oluşturalım. blog
adında bir veritabanı ve iki tablo oluşturacağız: kullanicilar
ve yazilar
.
CREATE DATABASE blog;
USE blog;
CREATE TABLE kullanicilar ( id INT AUTO_INCREMENT PRIMARY KEY, kullanici_adi VARCHAR(50) NOT NULL UNIQUE, sifre VARCHAR(255) NOT NULL);
CREATE TABLE yazilar ( id INT AUTO_INCREMENT PRIMARY KEY, baslik VARCHAR(255) NOT NULL, icerik TEXT NOT NULL, tarih TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Uygulamamızın Dosya Yapısı
Uygulamanın dosya yapısı şu şekilde olmalıdır:
blog/├── css/│ └── style.css├── includes/│ ├── baglan.php│ ├── baslik.php│ ├── footer.php│ └── nav.php├── pages/│ ├── giris.php│ ├── kayit.php│ ├── yazilar.php│ └── yeni-yazi.php├── actions/│ ├── kayit.php│ ├── giris.php│ ├── cikis.php│ ├── yazilar.php│ └── yeni-yazi.php├── index.php
Veritabanı Bağlantısı
Veritabanı bağlantısını sağlayacak includes/baglan.php
dosyası:
<?php$host = "localhost";$dbname = "blog";$username = "root";$password = "";
try { $db = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} catch (PDOException $e) { die("Veritabanı bağlantısı başarısız: " . $e->getMessage());}?>
Başlık ve Menü
Sayfalarımızın başlık ve menü kısmını sağlayacak includes/baslik.php
ve includes/nav.php
dosyalarını oluşturalım:
<?phpsession_start();?>
<!DOCTYPE html><html lang="tr"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Blog Sitesi</title> <link rel="stylesheet" href="/css/style.css"></head><body>
<nav> <a href="/index.php">Anasayfa</a> <a href="/pages/yazilar.php">Yazılar</a>
<?php if (isset($_SESSION["kullanici_id"])) : ?> <a href="/pages/yeni-yazi.php">Yeni Yazı</a> <a href="/actions/cikis.php">Çıkış Yap</a> <?php endif; ?> <?php if (!isset($_SESSION["kullanici_id"])) : ?> <a href="/pages/kayit.php">Kayıt Ol</a> <a href="/pages/giris.php">Giriş Yap</a> <?php endif; ?></nav>
Footer
Sayfalarımızın alt kısmını sağlayacak includes/footer.php
dosyasını oluşturalım:
</body></html>
Kayıt Sayfası
Kayıt sayfamızı sağlayacak pages/kayit.php
dosyasını oluşturalım:
<?php include "../includes/baslik.php"; ?><?php include "../includes/nav.php"; ?>
<h1>Kayıt Ol</h1>
<form action="../actions/kayit.php" method="post"> <label for="kullanici_adi">Kullanıcı Adı:</label> <input type="text" name="kullanici_adi" id="kullanici_adi" required><br> <label for="sifre">Şifre:</label> <input type="password" name="sifre" id="sifre" required><br> <input type="submit" value="Kayıt Ol"></form>
<?php include "../includes/footer.php"; ?>
Kayıt İşlemi
Kayıt işlemini sağlayacak actions/kayit.php
dosyasını oluşturalım:
<?phpinclude "../includes/baglan.php";
if ($_SERVER["REQUEST_METHOD"] == "POST") { $kullanici_adi = trim($_POST["kullanici_adi"]); $sifre = password_hash(trim($_POST["sifre"]), PASSWORD_DEFAULT);
$query = $db->prepare("INSERT INTO kullanicilar (kullanici_adi, sifre) VALUES (?, ?)"); $query->execute([$kullanici_adi, $sifre]);
header("Location: ../pages/giris.php"); exit;}?>
Giriş Sayfası
Giriş sayfamızı sağlayacak pages/giris.php
dosyasını oluşturalım:
<?php include "../includes/baslik.php"; ?><?php include "../includes/nav.php"; ?>
<h1>Giriş Yap</h1>
<form action="../actions/giris.php" method="post"> <label for="kullanici_adi">Kullanıcı Adı:</label> <input type="text" name="kullanici_adi" id="kullanici_adi" required><br> <label for="sifre">Şifre:</label> <input type="password" name="sifre" id="sifre" required><br> <input type="submit" value="Giriş Yap"></form>
<?php include "../includes/footer.php"; ?>
Giriş İşlemi
Giriş işlemini sağlayacak actions/giris.php
dosyasını oluşturalım:
<?phpinclude "../includes/baglan.php";
if ($_SERVER["REQUEST_METHOD"] == "POST") { $kullanici_adi = trim($_POST["kullanici_adi"]); $sifre = $_POST["sifre"];
$query = $db->prepare("SELECT * FROM kullanicilar WHERE kullanici_adi = ?"); $query->execute([$kullanici_adi]); $kullanici = $query->fetch(PDO::FETCH_ASSOC);
if ($kullanici && password_verify($sifre, $kullanici["sifre"])) { session_start(); $_SESSION["kullanici_id"] = $kullanici["id"]; $_SESSION["kullanici_adi"] = $kullanici["kullanici_adi"];
header("Location: /"); exit; } else { echo "Kullanıcı adı veya şifre hatalı!"; }}?>
Çıkış İşlemi
Çıkış işlemini sağlayacak actions/cikis.php
dosyasını oluşturalım:
<?phpsession_start();session_destroy();
header("Location: ../pages/anasayfa.php");exit;?>
Yazılar Sayfası
Yazılar sayfamızı sağlayacak pages/yazilar.php
dosyasını oluşturalım:
<?php include "../includes/baslik.php"; ?><?php include "../includes/nav.php"; ?><?php include "../includes/baglan.php"; ?><h1>Yazılar</h1><?php$query = $db->query("SELECT * FROM yazilar");$yazilar = $query->fetchAll(PDO::FETCH_ASSOC);?><?php foreach ($yazilar as $yazi) : ?> <article> <h2><?= $yazi["baslik"] ?></h2> <p><?= $yazi["icerik"] ?></p> </article> <hr><?php endforeach; ?>
<?php include "../includes/footer.php"; ?>
Yeni Yazı Sayfası
Yeni yazı sayfamızı sağlayacak pages/yeni-yazi.php
dosyasını oluşturalım:
<?php include "../includes/baslik.php"; ?><?php include "../includes/nav.php"; ?>
<?php if (!isset($_SESSION["kullanici_id"])) : ?> <p>Yazı eklemek için giriş yapmalısınız.</p> <a href="giris.php">Giriş yapmak için tıklayın.</a><?php endif; ?>
<?php if (isset($_SESSION["kullanici_id"])) : ?> <h1>Yeni Yazı</h1>
<form action="../actions/yeni-yazi.php" method="post"> <label for="baslik">Başlık:</label> <input type="text" name="baslik" id="baslik" required><br> <label for="icerik">İçerik:</label> <textarea name="icerik" id="icerik" required></textarea><br> <input type="submit" value="Yazıyı Kaydet"> </form><?php endif; ?>
<?php include "../includes/footer.php"; ?>
Yeni Yazı İşlemi
Yeni yazı işlemini sağlayacak actions/yeni-yazi.php
dosyasını oluşturalım:
<?phpinclude "../includes/baglan.php";
if ($_SERVER["REQUEST_METHOD"] == "POST") { $baslik = trim($_POST["baslik"]); $icerik = trim($_POST["icerik"]);
$query = $db->prepare("INSERT INTO yazilar (baslik, icerik) VALUES (?, ?)"); $query->execute([$baslik, $icerik]);
header("Location: ../pages/yazilar.php"); exit;}?>
CSS Dosyası
CSS dosyamızı sağlayacak css/style.css
dosyasını oluşturalım:
/* Genel stil */* { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Arial', sans-serif;}
body { background-color: #f4f4f9; color: #333; font-size: 16px; line-height: 1.6; padding: 20px;}
.container { max-width: 1200px; margin: 0 auto; padding: 0 20px;}
/* Başlık ve Menü */header { background-color: #4CAF50; color: white; padding: 20px; text-align: center; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);}
header h1 { font-size: 2.5em; letter-spacing: 2px;}
nav { display: flex; justify-content: center; background-color: #333; padding: 15px 0; margin-top: 20px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);}
nav a { color: white; text-decoration: none; margin: 0 15px; font-weight: bold; font-size: 1.1em; transition: color 0.3s ease;}
nav a:hover { color: #4CAF50;}
/* Form Stilleri */form { background-color: white; padding: 30px; margin: 20px 0; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 10px;}
form label { font-size: 1.2em; font-weight: bold; display: block; margin-bottom: 10px;}
form input[type="text"],form input[type="password"],form textarea { width: 100%; padding: 10px; margin-bottom: 20px; border: 1px solid #ddd; border-radius: 5px; font-size: 1em;}
form input[type="submit"] { background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; font-size: 1.1em; transition: background-color 0.3s ease;}
form input[type="submit"]:hover { background-color: #45a049;}
/* Sayfa başlıkları */h1, h2 { color: #333; margin-bottom: 20px;}
h1 { font-size: 2em; text-align: center;}
/* Yazılar sayfası */.post { background-color: white; padding: 20px; margin-bottom: 20px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 10px;}
.post h2 { font-size: 1.5em; color: #4CAF50;}
.post p { margin-top: 10px;}
/* Footer */footer { background-color: #333; color: white; text-align: center; padding: 20px 0; margin-top: 40px; position: relative; bottom: 0; width: 100%;}
footer p { margin: 0;}
/* Responsive tasarım */@media (max-width: 768px) { nav { flex-direction: column; }
nav a { margin: 10px 0; }
form, .post { margin: 20px 0; }}
Ana Sayfa
Son olarak, uygulamamızın ana sayfası olan index.php
dosyasını oluşturalım:
<?php include "includes/baslik.php"; ?><?php include "includes/nav.php"; ?>
<h1>Blog Sitesi</h1>
<!-- EĞER SESSİON VARSA HOŞGELİNİZ YAZISI OLSUN --><?php if (isset($_SESSION["kullanici_id"])) : ?> <p>Hoş geldiniz, <span style="color:red"><?php echo $_SESSION["kullanici_adi"]; ?>!</span></p><?php endif; ?>
<p>Hoş geldiniz! Bu blog sitesinde yazılar paylaşabilirsiniz.</p>
<?php include "includes/footer.php"; ?>
Uygulamamızı Çalıştırma
Artık uygulamamızı çalıştırabiliriz. Uygulamamızı çalıştırmak için, bir web sunucusu (örneğin, Apache) kullanabiliriz. Örneğin, XAMPP veya Wampserver gibi bir web sunucusu kurabilir veya php kurulu ise php -S localhost:80
komutu ile yerel bir web sunucusu başlatabiliriz.
Uygulamamızı çalıştırmak için, web sunucumuzun kök dizinine (htdocs
veya www
gibi) blog
adında bir klasör oluşturup, bu klasörün içine yukarıda oluşturduğumuz dosyaları kopyalayabiliriz. Daha sonra, web tarayıcımızda http://localhost/blog
adresine giderek uygulamamızı görebiliriz.
Uygulamamızı çalıştırdığımızda, karşımıza bir blog sitesi çıkacak. Bu blog sitesinde, kullanıcılar kayıt olabilecek, giriş yapabilecek, yazılarını görebilecek ve yeni yazılar ekleyebilecekler.
Uygulamamızın yönetim paneline erişmek için, http://localhost/blog/yonetim/giris.php
adresine gidebiliriz. Yönetim paneline giriş yapabilmek için, kayıt olup giriş yapmamız gerekmektedir.
Uygulamamızı geliştirmeye devam edebilir ve yeni özellikler ekleyebiliriz. Örneğin, yazıları düzenleme, silme, yorum ekleme gibi özellikler ekleyebiliriz. Ayrıca, uygulamamızın tasarımını geliştirebilir ve daha kullanıcı dostu hale getirebiliriz.
Bu örnekte, PHP ile basit bir blog sitesi yapmayı öğrendik. PHP’nin sunduğu veritabanı bağlantısı, form işleme, oturum yönetimi gibi özellikleri kullanarak, gerçek bir uygulama geliştirdik. Bu örneği inceleyerek, PHP ile nasıl uygulama geliştirebileceğinizi öğrenebilir ve kendi projelerinizi geliştirebilirsiniz.