PHP ile Admin Paneli Yapmak -1 Giriş Sayfası Oluşturma

Blog Gönderisi Resmi

Hizmetlerimiz hakkında bilgi almak için tıklayın.

Merhabalar!

PHP kullanarak web sitemizin admin panelini oluşturacağız, ilk olarak admin giriş sayfasını oluşturacağız ve backend ayarlamalarını yapacağız. Örnekleriyle beraber kullanımlar aşağıda yer almaktadır.

Veritabanı Kurulumu


İlk öncelikle, daha önce oluşturduğumuz baglan.php dosyamızın hazır olması gerekiyor, eğer baglan.php dosyamız hazır değil ise ilk önce Buraya tıklayarak, baglan.php dosyasını hazırlayın.

Önemli:

Kurulumlar için cPanel kullanmanız önerilir, eğer bir hosting sahibi değilseniz cPanel hostinglerimize Buraya tıklayarak ulaşabilirsiniz.

Session Kontrolü


Admin paneline ulaşmak için, session başlatacağız ve session kontrolleri yapacağız. İlerleyen yazıda detaylarına ineceğiz. Şimdilik session kontrolü yapabilmemiz için aşağıda bulunan dosyayı oluşturmalıyız ve adını autocheck.php olarak belirleyebiliriz.


<?php
ob_start();
session_start();

if (!isset($_SESSION['yonetici_girisi']) || $_SESSION['yonetici_girisi'] !== true) {
    header("Location: login.php");
    exit;
}

?>

autocheck.php dosyamızın içeriği üst kısımda olduğu gibi olmalıdır, bu genel bir dosya olacaktır ve admin paneline erişeceğimiz dosyalarda autocheck.php dosyamızı kullanarak izinsiz erişim yapmaya çalışan kullanıcıları, yönetici girişi yapmayan kullanıcıları login.php sayfasına göndereceğiz ve giriş yapmalarını talep edeceğiz.

Dikkat edilmesi gerekenler:

  • autocheck.php dosyanız ile location bölümünde verilen login.php dosyanız eşleşmelidir, eğer aynı klasör içerisinde değilseler düzenleme yapmanız gerekir.
  • Session içerisine tanımladığımız yonetici_girisi adlı değişkenimizi giriş yaparken session'a tanımlayacağız.

index.php Sayfası Oluşturmak


Sıradaki işlemimiz admin panelimizin index.php dosyasını oluşturmak olacak, admin panelimizin anasayfası index.php içerisinde yer alacak.


<?php
session_start();
include "baglan.php";
include "autocheck.php";
?>
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Admin Paneli</title>
</head>
<body class="eamedya">
    <h1>Admin paneline hoşgeldiniz.</h1>
</body>
</html>
 

Burada ne yaptık?

  • session_start() değişkenimizi kullanarak session başlattık.
  • Daha önce hazırladığımız veritabanı bağlantı dosyamızı index.php'ye dahil ettik. Veritabanı sorgularımızda kullanacağız.
  • Daha önce hazırladığımız kullanıcının admin girişi yapıp yapmadığını kontrol eden, yapmadıysa giriş sayfasına yönlendiren autocheck.php dosyamızı sayfaya dahil ettik.

Bu sayfaya girildiği zaman index.php session başlatıp, kullanıcının admin girişi yapıp yapmadığını kontrol edecek ve kullanıcı admin değilse ve giriş yapmadıysa login sayfasına yönlendirecek.

Giriş Sayfası Hazırlamak


Şimdi ise, kullanıcıların giriş yapabilmesini ve yonetici_girisi değişkenini kayıt edebilmek ve sorun yaşamamak için dikkatlice giriş sayfasını hazırlayalım.

HTML Kodu:


<div class="main-content">
        <div class="auth-buttons">
            <button id="loginButton">Admin Paneli Girişi</button>
        </div>

        <div class="login-container">
    <div id="loginForm" class="form">
        <form action="giris.php" method="POST"> 
            <h2>Giriş Yap</h2>
            <div class="input-group">
                <label for="username">Kullanıcı Adı<span class="input-color"> *</span></label>
                <input type="text" id="username" name="kullanici_adi" required>
            </div>
            <div class="input-group">
                <label for="password">Şifre<span class="input-color"> *</span></label>
                <input type="password" id="password" name="sifre" required>
            </div>

            <button type="submit">Giriş Yap</button>
        </form>
        </div>
        </div>
        </div>

CSS Kodu:


.main-content {
    padding: 20px;
    display: flex;
    justify-content: center; 
    align-items: center; 
    min-height: 80vh; 
    flex-direction: column;
    font-family: "Poppins", sans-serif;

}

.auth-buttons button {
    padding: 10px 50px;
    margin-right: 10px;
    cursor: pointer;
    background-color: transparent;
    border-bottom: none;
    border-left: 2px solid #000000;
    border-right: 2px solid #000;
    border-top: 2px solid #000;
}

.login-container {
    background-color: white;
    padding: 20px;
    border-radius: 5px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    width: 800px;
}

.login-container h2 {
    text-align: center;
    color: #333;
}

.login-container .input-group, #registerForm .form-group {
    margin-bottom: 15px;
}

.login-container .input-group label, #registerForm .form-group label {
    display: block;
    margin-bottom: 5px;
}

.login-container .input-group input, #registerForm .form-group input {
    width: 100%;
    padding: 10px;
    border: 1px solid #ddd;
    border-radius: 4px;
}

.login-container button, #registerForm button {
    width: 100%;
    padding: 10px;
    background-color: #000;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
}

.login-container button:hover, #registerForm button:hover {
    background-color: #343434;
}
 
.input-color{
    color:#000 ;
    font-weight: 900;
}

.login-container a{
    text-decoration: none;
    font-style: italic;
    color: #000;
}

.passwordverges a{
    font-style: normal;
}

.passwordverges{
    text-align: center;

}

#loginButton, #registerButton{
    text-decoration: underline;
    font-size: 1.2em;
    color: #000;
}

#loginButton:hover, #registerButton:hover{
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5); 
    background-color: #343434;
    color: white;
}


@media (max-width:767px) {
    .main-content {
        margin: 0; 
        margin-top: 100px;
    }
    .login-container{
        width: 350px;
    }
    #loginButton, #registerButton{
        font-size: 0.5em;
    }

}

@media (min-width:768px) and (max-width:1024px) {
    .main-content {
        margin: 0; 
        margin-top: 100px;
    }
    .login-container{
        width: 500px;
    }
    #loginButton, #registerButton{
        font-size: 0.5em;
    }

}

Yukarıda ne yaptık?

  • Tüm ekranlara, Mobil, tablet, bilgisayar uyumlu bir admin giriş sayfası hazırladık. Modern bir sayfa oluşturduk.
  • Kullanıcı giriş ekranını, kullanıcı bilgilerini alıp action bölümünde bulunan giris.php dosyasına göndermek için hazırladık.

Artık kullanıcı giriş ekranımız hazır, şimdi yapmamız gereken kullanıcı girişi yaptığı zaman formdan bilgileri alıp veritabanıyla eşleştirmemiz gerekiyor. Fakat bir veritabanı tablomuz yoktu değil mi? Hadi veritabanı tablomuzu oluşturalım!

Veritabanı Tablosu Oluşturmak


Şimdi yöneticilerimizi kontrol etmek için, yöneticilerimizin bilgilerinin olduğu bir veritabanı tablosuna ihtiyacımız var. Aşağıda ki kodu, PhpmyAdmin'e giriş yaparak, ilgili olan tablomuz içerisine SQL Sorgusu olarak yazalım.


CREATE TABLE `yoneticiler` (
  `id` int NOT NULL,
  `kullanici_adi` varchar(50) NOT NULL,
  `sifre_hash` varchar(255) NOT NULL,
  `email` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Bu sorguyu çalıştırdığımızda, başarıyla yönetici tablomuz hazır olacak. Artık yöneticilerimizin bilgilerini sakladığımız bir tablomuz mevcut!

Fakat tablomuz BOŞ!

Boş olan tablomuzu doldurmak için kullandığımız zaman hemen silmek zorunda olduğumuz yeni bir yonetici.php adında dosya oluşturalım ve ilk yöneticimizi tabloya ekleyelim!

yonetici.php


<?php
include 'baglan.php';

$kullaniciAdi = "demoYonetici";
$sifre = "demo1234";
$sifreHash = password_hash($sifre, PASSWORD_DEFAULT);
$email = "demo@ornek.com";

$query = $db->prepare("INSERT INTO yoneticiler (kullanici_adi, sifre_hash, email) VALUES (?, ?, ?)");
$result = $query->execute([$kullaniciAdi, $sifreHash, $email]);

if ($result) {
    echo "Demo yönetici başarıyla eklendi.";
} else {
    echo "Yönetici eklenirken bir hata oluştu.";
}
?>

yonetici.php dosyasını oluşturun ve kayıt edin. Ardından URL olarak erişin, örneğin: websiteniz.com/yonetici.php olarak bu dosyaya eriştiğinizde demo yöneticiyi başarıyla veritabanına verileri PDO ile hashlemiş bir şekilde kayıt etmiş olacaksınız.

ÖNEMLİ:

yonetici.php dosyanızı kullandıktan hemen sonra SİLİN. aksi takdirde güvenlik açığı oluşturursunuz.

Veritabanında Bilgileri Eşleştirmek


Az önce yonetici.php dosyasını kullanarak demoYonetici adında bir kullanıcı oluşturduk ve şifresini demo1234 olarak belirledik.

Şimdi ise giriş formumuzda bu bilgileri girdiğimizde, veritabanında bu bilgileri sorgulamak için giris.php adında yeni bir dosya oluşturuyoruz.

Hatırlayalım, giriş formumuzun action bölümüne giris.php dosyasını tanımlamıştık.


<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    session_start();
    include 'baglan.php';

    $kullaniciAdi = $_POST['kullanici_adi'] ?? '';
    $sifre = $_POST['sifre'] ?? '';

    $query = $db->prepare("SELECT * FROM yoneticiler WHERE kullanici_adi = ?");
    $query->execute([$kullaniciAdi]);
    $yonetici = $query->fetch(PDO::FETCH_ASSOC);

    if ($yonetici && password_verify($sifre, $yonetici['sifre_hash'])) {
        $_SESSION['yonetici_girisi'] = true;
        $_SESSION['admin_id'] = $yonetici['id']; 
        $_SESSION['yonetici_adi'] = $yonetici['kullanici_adi'];

        header("Location: index.php");
        exit(); 
    } else {
        echo "Kullanıcı adı veya şifre hatalı.";
    }
}
?>

Yukarıda ne yaptık?

  • Session başlattık.
  • Veritabanı bağlantı dosyamızı içeriğe dahil ettik.
  • Formdan alınan bilgileri değişkene tanımladık.
  • Değişkendeki bilgileri veritabanı ile karşılaştırdık.
  • Eğer veritabanı ile formdan gelen bilgiler uyuyor ise yonetici_girisi sessionunu true olarak ayarladık.
  • Kullanıcı verileri uyduğu için kullanıcıyı index.php'ye yönlendirdik.
  • Eğer kullanıcı verileri uymuyorsa, kullanıcı adı veya şifre hatalı geri dönüşü verdik.
  • yonetici_girisi sessionu hala false döndürmeye devam ediyor.

Giriş formuyla uyuştuktan sonra, index.php sayfamıza yönlendirildiğimizde autocheck.php dosyamız yine bizi kontrol edecek ve yonetici_girisi'nin session kayıtlarına bakıp true döndürmesini bekleyecek, eğer true döndürüyor ise bize index.php içeriğini gösterecek, eğer false dönmeye devam ediyorsa giriş sayfasına yönlendirmeye devam edecektir.

Tüm sorularınız ve istekleriniz için, info@enesalp.com.tr adresinden bize ulaşabilirsiniz.

Sizin İçin Önerdiklerimiz

Blog Resim
PHP ile Giriş ve Kayıt Formlarını Veritabanına İşlemek

PHP

Daha önce HTML yapılarını oluşturduğumuz Login form ile Register form'a PHP'de veritabanında işlem sağlamak için gerekli işlevselliği ekleyeceğiz.

Devamını Oku
Blog Resim
PHP Dersleri 2: Temel Sözdizimi ve Değişkenler

PHP

PHP, web geliştirme alanında sıkça kullanılan bir sunucu taraflı betik dildir. Bu dersimizde, PHP'nin temel sözdizini ve değişkenlerini öğreneceğiz. Bu, PHP programlamaya başlamak için temel bir adımdır.

Devamını Oku
Blog Resim
PHP Dersleri 4: PHP ile Veritabanı Bağlantısı Kurmak (MYSQL)

PHP

Bağlantı kurmak için genellikle PDO (PHP Data Objects) kullanılır. PDO, farklı veritabanı sistemleriyle çalışabilen ve güvenlik önlemlerini içeren bir veritabanı bağlantı arayüzüdür.

Devamını Oku
Blog Resim
PHP ve JavaScript ile Veritabanından Veri Çekip İşlemek

PHP

Merhabalar! Bu bölümümüzde veritabanından veri çeken bir PHP kodu ve veriyi çeken PHP koduna istek yaparak çekilen veriyi HTML dosyamıza ekleyen bir JavaScript kodu yazacağız.

Devamını Oku