• 11-07-2009, 13:57:50
    #1
    Üyeliği durduruldu
    Tekrar merhaba;

    PHP öğrenmeye yeni başladım ve şu session olayında takıldım kaldım. Ceviz'deki makaleyide okudum, hatta kodlarıma bir arkadaş sessionu ekledi yazdı yine anlayıp çözemedim, son çarem yine burası kaldı

    Öncelikle yapmak istediğim çok basit gelebilir. Ama bu olayı yazacağım her scriptte kullanacağım için iyi öğrenmem gerekiyor diye düşünüyorum.

    Ziyaretçi defterinde yönetici için giriş sayfası bulunuyor. Veritabanındaki admin tablosundaki kısımları id, nick ve sifre olarak belirledim.

    giris.php

    <?php
        include("../inc/baglan.php"); 
        if(empty($nick) || empty($sifre))
        {
    ?>
    
    ... )
    ... ) Burada giriş formu var
    ... )
    
    <?php
    }else{
        $sorgu=mysql_query("SELECT * FROM admin WHERE nick='$nick' AND sifre='$sifre'");
        if(mysql_num_rows($sorgu)<1){
        echo "Kullanıcı adı veya şifreniz hatalıdır, lütfen tekrar deneyiniz..<br>";
    }else{
        echo "Başarıyla giriş yaptınız, lütfen bekleyin..";
        echo "<meta http-equiv=\"refresh\" content=\"3;URL=index.php\" />";
    }}
    ?>
    Bu sayfada if(mysql_num_rows($sorgu)<1) ile bir kontrol yaptırıyorum ama bu sadece girilen değerlerin doğru olup olmadığını kontrol ediyor.

    index.php

    <?php
              include("../inc/baglan.php");
              $sor = mysql_query("SELECT * FROM mesajlar WHERE onay='0'");
              while ($kayit=mysql_fetch_array($sor)) {
              $id=$kayit['id'];
                  echo "<div class='yorumxx'>Gönderen: ".$kayit['isim']."</div>";
                echo "<div class='yorumxx'>Şehir: ".$kayit['sehir']."</div>";
                echo "<div class='yorumxx'>Tarih: ".$kayit['tarih']."</div>";
                echo "<div class='yorumxx'><a rel='nofollow' href='onay.php?id=$id'>Onayla</a>"."</div><br><br>";
                echo "<div class='mesaj'>".$kayit['mesaj']."</div><br><br>";            
              } if ($kayit <1) {echo "Onaylanmayı bekleyen mesaj bulunmamaktadır";}
              ?>
    Şimdi bu sayfada onaylanmayı bekleyen mesajları sıraladım ve onaylama işlemini yapabiliyorum. O kısımlarda sorunum yok, fakat sadece bu index.php ye direk olarak şifresiz girilebiliyor. Yani kontrol mekanizmasını kuramadım.

    Sanırım bu 2 sayfada yapılacak değişikliklerle kontrol sağlanacak ama ben 2 gündür yapamadım ve artık delirmek üzereyim. Daha başlayalı 3 gün oldu, 2 gündür bu olayı çözmeye çalışıyorum.

    Eğer yapabilecek varsa session kodlarını ekleyip yanına ne anlama geldiğini yazarsa çok sevinirim. 3-5 satırlık koddan ibaret gibi duruyor ama beceremedim.

    Yardımlarınızı bekliyorum, teşekkürler.
  • 11-07-2009, 14:13:49
    #2
    Üyeliği durduruldu
    index.php 'nin en üstüne şöyle birşey ekleyebilirsiniz.
    if (empty($nick) || empty($sifre)) {
        echo "<script>location.href='giris.php';</script>";
        exit;
    }
    Yukarıdaki kod sessionları kontrol eder. Kullanıcı giriş yapmışsa giriş yapma sayfasına yönlendirir. Bunun gibi birşey olabilir veya giriş yapılmamış mesajı gibi birşeyde yazırabilirsiniz ekrana.
    Bu arada php ayarlarınızdan register_globals açık sanırım. Kapalı olması daha güvenli olacaktır.
    Ayrıntılı bilgi PHP: register_globals Kullanımı - Manual
  • 11-07-2009, 14:15:52
    #3
    THR
    Üyeliği durduruldu
    bak adım adım anlatayım
    giriş.php nin başına sesion_start(); ekle (birde ob_start(); ekle istersen ki header la yönlendirme yaparken sorun olmasın. Bunları yaptıktan sonra mysql'den bilgi alıp giriş doğru yapıldığında $_Session['oturum'] = 1; de bu oturum açtığımızın göstergesi altınada header("Loaction: index.php"); yaz ki giriş yaptıktan sonra da index.php ye gidelim. (ob_start(); yazdıysan en alta ob_end_flush(); yaz)

    Geledim index.php nin oturum açılmadan giriş yapılmaması olayına
    index.php nin başına session_start vs girişte yaptığımız gibi ekle
    altına if le oturum açılmış mı diye bakıcaz
    if(empty(($_SESSION['oturum'])) { // oturum açılmamışsa aşağıdakileri yap
    header("Location: giris.php"); // giris.php ye yönlendir
    exit(); // herhangi bir aksilikte sayfanın çalışmasını durdur
    }

    umarım anlatabilmişimdir
  • 11-07-2009, 14:19:58
    #4
    Üyeliği durduruldu
    @THR yazdığınızın daha anlaşılır olması için php kodlarınızı

     kodlar..
    şeklinde yazmalısınız.
  • 11-07-2009, 14:27:39
    #5
    THR
    Üyeliği durduruldu
    devturkeli adlı üyeden alıntı: mesajı görüntüle
    @THR yazdığınızın daha anlaşılır olması için php kodlarınızı
     kodlar..
    şeklinde yazmalısınız.
    tamam hocam dikkat ederim kodları parça parça yazdığım için böyle oldu uyarın için teşekkürler
  • 11-07-2009, 14:37:29
    #6
    Üyeliği durduruldu
    Hocam yukarıda verdiğin kodları benim verdiğim kodlara ekleyebilir misin? Dediğini anladım ama eklemeleri yapamadım.
  • 11-07-2009, 14:40:44
    #7
    Üyeliği durduruldu
    devturkeli adlı üyeden alıntı: mesajı görüntüle
    index.php 'nin en üstüne şöyle birşey ekleyebilirsiniz.
    if (empty($nick) || empty($sifre)) {
        echo "<script>location.href='giris.php';</script>";
        exit;
    }
    Yukarıdaki kod sessionları kontrol eder. Kullanıcı giriş yapmışsa giriş yapma sayfasına yönlendirir. Bunun gibi birşey olabilir veya giriş yapılmamış mesajı gibi birşeyde yazırabilirsiniz ekrana.
    Bu arada php ayarlarınızdan register_globals açık sanırım. Kapalı olması daha güvenli olacaktır.
    Ayrıntılı bilgi PHP: register_globals Kullanımı - Manual
    Hocam senin dediğin gibi yaptığımda, giriş yaptıktan sonrada tekrar giris.php ye yönlendiriyor.
  • 11-07-2009, 15:37:15
    #8
    THR
    Üyeliği durduruldu
       <?php
    ob_start();
    $nick = $_POST['nick'];
    $sifre = $_POST['sifre'];
    session_start();
        include("../inc/baglan.php"); 
        if(empty($nick) || empty($sifre))
        {
    ?>
    ... )
    ... ) Burada giriş formu var
    ... )
    <?php
    }else{
        $sorgu=mysql_query("SELECT * FROM admin WHERE nick='$nick' AND sifre='$sifre'");
        if(mysql_num_rows($sorgu)<1){
        echo "Kullanıcı adı veya şifreniz hatalıdır, lütfen tekrar deneyiniz..<br>";
    }else{
       $_SESSION['oturum'] = 1
       header("Location: index.php");
    }}
    ob_end_flush();
    ?>
       <?php
    ob_start();
    session_start();
    if(empty($_SESSION['oturum'])) {
    header("Location: index.php");
    exit()
    }
              include("../inc/baglan.php");
              $sor = mysql_query("SELECT * FROM mesajlar WHERE onay='0'");
              while ($kayit=mysql_fetch_array($sor)) {
              $id=$kayit['id'];
                  echo "<div class='yorumxx'>Gönderen: ".$kayit['isim']."</div>";
                echo "<div class='yorumxx'>Şehir: ".$kayit['sehir']."</div>";
                echo "<div class='yorumxx'>Tarih: ".$kayit['tarih']."</div>";
                echo "<div class='yorumxx'><a rel='nofollow' href='onay.php?id=$id'>Onayla</a>"."</div><br><br>";
                echo "<div class='mesaj'>".$kayit['mesaj']."</div><br><br>";            
              } if ($kayit <1) {echo "Onaylanmayı bekleyen mesaj bulunmamaktadır";}
    ob_end_flush();
              ?>
    umarım açıklayıcı olmuştur
  • 11-07-2009, 15:54:50
    #9
    Üyeliği durduruldu
    Hocam çok sağol ama birkaç hata verdi sayfalar.

    giris.php de

     Parse error:  syntax error, unexpected T_STRING in C:\AppServ\www\defter\admin\giris.php on line 97
    Bu hatayı verdi, 97. satırı kalın olarak yazıyorum.

    <?php
    }else{
        $sorgu=mysql_query("SELECT * FROM admin WHERE nick='$nick' AND sifre='$sifre'");
        if(mysql_num_rows($sorgu)<1){
        echo "Kullanıcı adı veya şifreniz hatalıdır, lütfen tekrar deneyiniz..<br>";
    }else{
       $_SESSION['oturum'] = 1
       header("Location: index.php");
    }} #97. satır
    ob_end_flush();
    ?>
    index.php de şu hatayı veriyor

    Warning:  session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\AppServ\www\defter\admin\index.php:10) in C:\AppServ\www\defter\admin\index.php on line 61
    
    Warning:  session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\defter\admin\index.php:10) in C:\AppServ\www\defter\admin\index.php on line 61
    
    Warning:  Cannot modify header information - headers already sent by (output started at C:\AppServ\www\defter\admin\index.php:10) in C:\AppServ\www\defter\admin\index.php on line 63
    Sayfa geliyor ama bu hatalar çıkıyor. 61. ve 63. satırları kalın yazıyorum

    <?php
    ob_start();
    session_start(); # 61. satır
    if(empty($_SESSION['oturum'])) {
    header("Location: index.php"); # 63. satır
    exit(); }
    Çok teşekkürler hocam.