PHP ile Blog Sitesi Nasıl Yapılır?
PHP ile Basit Bir Blog Sitesi Yapma
“PHP ile Basit Bir Blog Sitesi Yapma” başlıklı bölümBu ö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ı
“Veritabanı” başlıklı bölümÖ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ı
“Uygulamamızın Dosya Yapısı” başlıklı bölümUygulamanı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ı” başlıklı bölümVeritabanı 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ü
“Başlık ve Menü” başlıklı bölümSayfaları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
“Footer” başlıklı bölümSayfalarımızın alt kısmını sağlayacak includes/footer.php
dosyasını oluşturalım:
</body></html>
Kayıt Sayfası
“Kayıt Sayfası” başlıklı bölümKayı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 İşlemi” başlıklı bölümKayı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ş Sayfası” başlıklı bölümGiriş 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ş İşlemi” başlıklı bölümGiriş 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ış İşlemi” başlıklı bölümÇı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 Sayfası” başlıklı bölümYazı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ı Sayfası” başlıklı bölümYeni 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ı İşlemi” başlıklı bölümYeni 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 Dosyası” başlıklı bölümCSS 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
“Ana Sayfa” başlıklı bölümSon 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
“Uygulamamızı Çalıştırma” başlıklı bölümArtı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.