v2.5.2
Giriş yap

Php 3 kere yanlış giriş yapılırsa hata verdirme sorunu

yazilimyolcusu
822 defa görüntülendi ve 3 kişi tarafından değerlendirildi

Merhaba arkadaşlar. Kullanıcı, şifreyi 3 kez yanlış girerse hata verdirmeye çalışıyorum. Bunun içinde veritabanında "hataligirissayisi" diye bir alan açtım. Varsayılan değer olarak da "0" verdim. Aşağıdaki kod ile yapmak istediğim şu: Her yanlış giriş yaptığında veritabanında, o kullanıcıya ait "hataligirissayisi" alanı 1 artırmak istiyorum. Bunu da "insert" işlemi ile yapmaya çalışıyorum ama en aşağıdaki "giriş yapılamadı" uyarısı veriyor ve veritabanındaki "hataligirissayisi" alanına da ekleme yapamıyorum. Log kaydında hata yok. Sayfa da hata vermiyor.

<?php
if($_POST['kullanicigirisgonder']) {
        $kullaniciadi    = trim(strip_tags(base64_encode($_POST['kullanicigirisadi'])));
        $kullanicisifre  = trim(strip_tags(base64_encode($_POST['kullanicigirissifre'])));
        ?>
        

        <?php
        $girissorgusu  = "SELECT * FROM kullanicilar WHERE kullanicilar_kullaniciadi = '$kullaniciadi' AND kullanicilar_sifre = '$kullanicisifre'";
        $girissorgu    = mysqli_query($db, $girissorgusu);
        $sonuc = mysqli_fetch_array($girissorgu);

        
        if(($sonuc['kullanicilar_kullaniciadi'] == $kullaniciadi) AND ($sonuc['kullanicilar_sifre'] == $kullanicisifre)) {

            $_SESSION['adi']       = $sonuc;
            $_SESSION['sifresi']   = $sonuc;

            if(!empty($_POST['benihatirla'])) {
                $cerez = trim(strip_tags($_POST['benihatirla']));
                $cerezadi     = "kullanicicerezi";
                $cerezdegeri  = "kullanicicerezsifre";
                setcookie($cerezadi, $cerezdegeri, time() + (86400), "/"); // 86400 = 1 day
            } else {
                
            }

            header("Refresh:0; url=index.php");
        } elseif(($sonuc['kullanicilar_kullaniciadi'] == $kullaniciadi) AND ($sonuc['kullanicilar_sifre'] != $kullanicisifre)) {
            $girissorg  = "SELECT * FROM kullanicilar WHERE hataligirissayisi";
            $girissor    = mysqli_query($db, $girissorg);
            $say = mysqli_num_rows($girissor);
            $saydir = mysqli_fetch_num($girissor);

            for($x=3; $x >= $saydir['hataligirissayisi']; $x++) {

                $ekle = "INSERT INTO kullanicilar (hataligirissayisi) VALUES ('$x')";
                if(mysqli_query($db, $ekle)) {
                    echo "<center><h1>"."Bir Artırıldı."."</h1></center>"."<center><br><h1>"."Lütfen Tekrar Deneyiniz."."</h1></center>"."<center><br><h2>"."Giriş Sayfasına Yönlendiriliyorsunuz...</center>";
        }
    }
} else {
    echo "<center><img src='images/onayhataresimleri/unlem.png' style='width:50px; height:135px; margin-top:25px;'></center>";
    echo "<center><h1>"."Giriş Yapılamadı."."</h1></center>"."<center><br><h1>"."Lütfen Tekrar Deneyiniz."."</h1></center>"."<center><br><h2>"."Giriş Sayfasına Yönlendiriliyorsunuz...</center>";
    header("Refresh:4; url=giris-formu.php");
}
}
?>
Cevap yaz
Cevaplar (12)
yazilimyolcusu
1008 gün önce

Sorunu çözdüm. İlk satırlardaki

$_SESSION["attempts"];

kısmını olarak

if(!isset($_SESSION["attempts"])) {
    $_SESSION["attempts"] = 0;
}

Alt satırlardaki

$_SESSION["attempts"] += 1;

kısmını da

intval($_SESSION["attempts"] += 1);

şeklinde yaptım ve sorunu çözdüm. :)

yazilimyolcusu
1008 gün önce

Undefined index: hatası veriyor. undifined session değil.

erdo
1011 gün önce

::;;bilmem..;;;;::

rephp7
1011 gün önce

Düzeltme:
yorumu geri alıyorum. link vermiştim belki işine yarar diye ama işine yaramayacakmış sonradan fark ettim. senin istediğin daha farklıymış.

yazilimyolcusu
1011 gün önce

rephp7 Sizin için tekrar denedim. Biliyorsunuzdur, hata verilen yerlere "@" ("et") işareti koyduğunuzda sayfa hatayı göstermez. En baştaki bu yere "@$_SESSION["attempts"];" ve aşağılardaki bu yere "@$_SESSION["attempts"] += 1;" bu şekilde "@" işareti koyduğumda hatayı göstermiyor. Biliyorsunuzdur da, aklımdayken hatırlatayım dedim. Ama sorun halâ çözülmedi. Çözülürse, kodu paylaşırım.

rephp7
1011 gün önce

sorun çözülürse son halini paylaşır mısınız? bende güvenlik önlemi olarak kullanmak istiyorum. yapabilirsem 5 denemeden sonra ip ban nasıl yaptırırım onu araştıracağım.

yazilimyolcusu
1012 gün önce

En son verdiğim cevapta zaten session kullandığımı anlattım. Benim şu anki sorunum: Session'a değer vermezsem çalışıyor; string değer versem, session "sayılabilir numara değil" uyarısı veriyor; session'ı sayı olarak yani "$_session["aaa"] = 0;" şeklinde yapsam hata vermiyor ama session'ı da artırmıyor.

zelemi
1013 gün önce

Session da tutabilirsin ve session count yaparak eğer 3'ten büyük ise hata verdire bilirsin
veya daha kapsamlı yapıcam diyorsan db üzerinde giriş ip bilgisini tutatarak ta bu işlemi gerçekleştire bilirsin.

yazilimyolcusu
1013 gün önce

Cevap veren yok galiba?

yazilimyolcusu
1013 gün önce

Arkadaşlar kodları session ile tekrar düzenledim. Şu anda tek sorunum şifreyi ilk yanlış girdiğimde undefined "attempts" uyarısı veriyor. Sebebi de şu: Session'a değer vermedim. String değer versem, session "sayılabilir numara değil" uyarısı veriyor. Session'ı sayı olarak yani "$_session["aaa"] = 0;" şeklinde yapsam hata vermiyor ama session'ı da artırmıyor. Hata vermeden nasıl yapabilirim acaba?

<?php
if($_POST['kullanicigirisgonder']) {

            
            $_SESSION["attempts"];


            $kullaniciadi          = trim(strip_tags(base64_encode($_POST['kullanicigirisadi'])));
            $kullanicisifre        = trim(strip_tags(base64_encode($_POST['kullanicigirissifre'])));

            $girissorgusu  = "SELECT * FROM kullanicilar WHERE kullanicilar_kullaniciadi = '$kullaniciadi' AND kullanicilar_sifre = '$kullanicisifre'";
            $girissorgu    = mysqli_query($db, $girissorgusu);
            $sonuc = mysqli_fetch_array($girissorgu);

            if(($sonuc['kullanicilar_kullaniciadi'] == $kullaniciadi) AND ($sonuc['kullanicilar_sifre'] == $kullanicisifre)) {

                $_SESSION['adi']       = $sonuc;
                $_SESSION['sifresi']   = $sonuc;


                if(!empty($_POST['benihatirla'])) {
                    $cerez = trim(strip_tags($_POST['benihatirla']));
                    $cerezadi     = "kullanicicerezi";
                    $cerezdegeri  = "kullanicicerezsifre";
                    setcookie($cerezadi, $cerezdegeri, time() + (86400), "/"); // 86400 = 1 day
                } else {

                }


            } else {
                echo "<center><img src='images/onayhataresimleri/unlem.png' style='width:50px; height:135px; margin-top:25px;'></center>";
                echo "<center><h1>"."Giriş Yapılamadı."."</h1></center>"."<center><br><h1>"."Lütfen Tekrar Deneyiniz."."</h1></center>"."<center><br><h2>"."Giriş Sayfasına Yönlendiriliyorsunuz...</center>";
                header("Refresh:1; url=giris-formu.php");


                $_SESSION["attempts"] += 1;
                
                if ($_SESSION["attempts"] > 2) { ?>

                    <div class='fazla-giris-uyarisi'>
                    <?php
                    echo ("İki kezden fazla giriş denemesi <br> Şifremi Unuttum Sayfasına Yönlendiriliyorsunuz");

                    header("Refresh:4; url=bilimhaberleri.php");
                    ?>
                    </div>
                <?php            
                }
                ?>
<?php            

            }
    }
?>
omerf
1013 gün önce

Merhaba. insert değil update kullanmalısınız. Birde bunu be şekilde değil de sessionda kullanmanızı tavsiye ederim. Örneğin bir projemden aldığım kod kalıbı;

Session::put('retrieve_password',Session::get('retrieve_password',0) + 1);
if(Session::get('retrieve_password') >= 3){
    DB::table('password_resets')->where('token',$request->token)->delete();
    Session::remove('retrieve_password');
    return redirect()->route('auth.login');
}
emirhankayabas
1014 gün önce

Merhaba iyi günler. Insert ile yeni veri girişi sağlanıyor diye biliyorum. hataligirissayisi tablosunu artırmak istediğiniz zaman UPDATE kullanmanız gerekmektedir. İşlemlere http://www.erbilen.net/pdo-kullanimi/ buradan bakabilirsiniz.