İçeriğe geç

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:

<?php
session_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>

Sayfalarımızın alt kısmını sağlayacak includes/footer.php dosyasını oluşturalım:

includes/footer.php
</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:

<?php
include "../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:

<?php
include "../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:

<?php
session_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:

<?php
include "../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:

/index.php
<?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.