• 23-02-2023, 09:36:40
    #1
    /yonetici dizini index.php ilgili kodlar:
                                        <form method="POST" action="kontrol.php">
                                            <div class="py-3">
                                                <div class="mb-4">
                                                    <img id="logo-container" class="h2 mb-1" src="fotograf/logo.png" alt="Login Logo" style="width: 75px;">
                                                </div>
                                                <div class="mb-4">
                                                    <input type="text" class="form-control form-control-alt form-control-lg" id="kullaniciadi" name="kullaniciadi" placeholder="Kullanıcı Adı">
                                                </div>
                                                <div class="mb-4">
                                                    <input type="password" class="form-control form-control-alt form-control-lg" id="sifre" name="sifre" placeholder="Şifre">
                                                </div>
                                                <div class="mb-4">
                                                    <button class="btn btn-hero btn-lg btn-primary" type="submit">Giriş</button>
    /yonetici dizini kontrol.php kodları:
    <?php
    
    // Veritabanı bağlantısı oluşturma
    $host = 'localhost';
    $user = 'x';
    $password = 'x';
    $dbname = 'x';
    
    $conn = mysqli_connect($host, $user, $password, $dbname);
    
    // Veritabanı bağlantısı kontrolü
    if (!$conn) {
        die("Veritabanı bağlantısı başarısız: " . mysqli_connect_error());
    }
    
    // POST verilerini alma
    $kullaniciadi = $_POST['kullaniciadi'];
    $sifre = md5($_POST['sifre']);
    
    // Kullanıcı doğrulaması yapma
    $sql = "SELECT * FROM kullanicilar WHERE kullanici = '$kullaniciadi' AND sifre = '$sifre'";
    $result = mysqli_query($conn, $sql);
    
    // Kullanıcı doğruysa ana sayfaya yönlendir
    if (mysqli_num_rows($result) > 0) {
        header("Location: /yonetici/panel/");
        exit;
    } else {
        echo "Hatalı giriş bilgileri.";
    }
    
    // Veritabanı bağlantısını kapat
    mysqli_close($conn);
    
    ?>
    Burası /yonetici dizini yani admin paneli giriş ekranının olduğu dizin. kontrol.php'den aldığı bilgiler ile /yonetici/panel dizinine yönlendiriyor fakat bir türlü çözümünü bulamadığım bir şey var. Ben url üzerinden de direkt /yonetici/panel dizinine erişebiliyorum giriş yapmadan. Giriş yapmayanların url üzerinden /yonetici/panel'e erişmesini nasıl engellerim? /yonetici/panel dizininde bir adet index.php var ve içindeki baglanti.php'yi çekerek sitedeki verileri güncelliyor. Kendimi PHP'de geliştirmeye çalışıyorum ama bunu çözemedim.
  • 23-02-2023, 09:51:14
    #2
    session kontrolü araştırabilirsiniz
  • 23-02-2023, 09:51:35
    #3
    Basit bir yöntemle admin girişi yapana SESSION tutman gerek.
    SESSION yoksa giriş sayfasına yönlendirecek.
    Her sayfada SESSION kontrolu yapmanız gerektiğini unutmayın.
    https://www.w3schools.com/php/php_sessions.asp

    Sayfanin en başına;
    session_start(); ekleyin.
    kontrol.php'de bilgiler doğruysa header Location ile yönlendirme yapıyorsunuz. Onun hemen üst satırına;
    $_SESSION["isAdmin"] = $kullaniciadi;
    ekleyin.

    Ondan sonra index.php sayfasına gidip sayfanın en üstüne;
    session_start();
    if(!isset($_SESSION["isAdmin"])){
    echo "Admin girişi yok";
    exit;
    }

    kodlarını eklerseniz muhtemelen çalışacaktır.
    dinamik bir include dosyanız varsa session_start(); ve diğer kodları tüm sayfalara tek dosyadan dahil edebileceksiniz.
    Güncel teknolojide token tutulur.
    İyi çalışmalar.
  • 23-02-2023, 10:43:20
    #4
    eypoffcl adlı üyeden alıntı: mesajı görüntüle
    Basit bir yöntemle admin girişi yapana SESSION tutman gerek.
    SESSION yoksa giriş sayfasına yönlendirecek.
    Her sayfada SESSION kontrolu yapmanız gerektiğini unutmayın.
    https://www.w3schools.com/php/php_sessions.asp

    Sayfanin en başına;
    session_start(); ekleyin.
    kontrol.php'de bilgiler doğruysa header Location ile yönlendirme yapıyorsunuz. Onun hemen üst satırına;
    $_SESSION["isAdmin"] = $kullaniciadi;
    ekleyin.

    Ondan sonra index.php sayfasına gidip sayfanın en üstüne;
    session_start();
    if(!isset($_SESSION["isAdmin"])){
    echo "Admin girişi yok";
    exit;
    }

    kodlarını eklerseniz muhtemelen çalışacaktır.
    dinamik bir include dosyanız varsa session_start(); ve diğer kodları tüm sayfalara tek dosyadan dahil edebileceksiniz.
    Güncel teknolojide token tutulur.
    İyi çalışmalar.
    Url ile direkt giriş engellendi teşekkür ederim ama giriş ekranında yanlış bilgi girip "hatalı kullanıcı" mesajı aldıktan sonra url'den /yonetici/panel dizinine gidilebiliyor yine giriş yapılmadan.
  • 23-02-2023, 11:31:29
    #5
    
    <?php
    session_start();
    if (isset($_SESSION['kullaniciadi'])) {
        header("Location: /yonetici/panel/");
        exit;
    }
    if (isset($_SESSION['giris_hata']) && $_SESSION['giris_hata'] == true) {
        echo "Hatalı giriş bilgileri.";
        unset($_SESSION['giris_hata']);
    }
    ?>
    
    <form method="POST" action="kontrol.php">
        <div class="py-3">
            <div class="mb-4">
                <img id="logo-container" class="h2 mb-1" src="fotograf/logo.png" alt="Login Logo" style="width: 75px;">
            </div>
            <div class="mb-4">
                <input type="text" class="form-control form-control-alt form-control-lg" id="kullaniciadi" name="kullaniciadi" placeholder="Kullanıcı Adı">
            </div>
            <div class="mb-4">
                <input type="password" class="form-control form-control-alt form-control-lg" id="sifre" name="sifre" placeholder="Şifre">
            </div>
            <div class="mb-4">
                <button class="btn btn-hero btn-lg btn-primary" type="submit">Giriş</button>
            </div>
        </div>
    </form>
    kontrol:

    
    <?php
    session_start();
     
    // Veritabanı bağlantısı oluşturma
    $host = 'localhost';
    $user = 'x';
    $password = 'x';
    $dbname = 'x';
     
    $conn = mysqli_connect($host, $user, $password, $dbname);
     
    // Veritabanı bağlantısı kontrolü
    if (!$conn) {
        die("Veritabanı bağlantısı başarısız: " . mysqli_connect_error());
    }
     
    // POST verilerini alma
    $kullaniciadi = $_POST['kullaniciadi'];
    $sifre = md5($_POST['sifre']);
     
    // Kullanıcı doğrulaması yapma
    $sql = "SELECT * FROM kullanicilar WHERE kullanici = '$kullaniciadi' AND sifre = '$sifre'";
    $result = mysqli_query($conn, $sql);
     
    // Kullanıcı doğruysa ana sayfaya yönlendir
    if (mysqli_num_rows($result) > 0) {
        $_SESSION['kullaniciadi'] = $kullaniciadi;
        header("Location: /yonetici/panel/");
        exit;
    } else {
        $_SESSION['giris_hata'] = true;
        header("Location: /yonetici");
        exit;
    }
     
    // Veritabanı bağlantısını kapat
    mysqli_close($conn);
     
    ?>