• 05-12-2023, 15:57:06
    #1
    yeni yaptığım bir site için giriş ekranında bildirim yapmaya çalışıyorum banlı kullanıcılar için bildirim doğru bir şekilde gözükürken hatalı giriş bilgisi için bildirim gözükmüyor hatanın nedeni nedir




    <?php
    session_start();
    define("DATA", "data/");

    include("admin/function.php");
    include("config/baglanti.php");

    if (isset($_SESSION['userId'])) {
    header("Location: index.php");
    exit;
    }
    ?>

    <!doctype html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link href="https://fonts.googleapis.com/css?family=Roboto:300,400&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="fonts/icomoon/style.css">
    <link rel="stylesheet" href="css/owl.carousel.min.css">
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/login.css">
    <title>Kullanıcı Girişi</title>
    </head>
    <body>
    <div id="notification" style="display: none;">
    <span id="notification-message">Hesabınız geçici olarak kısıtlandı. Daha fazla bilgi için site yöneticisi ile iletişime geçebilirsiniz.</span>
    <span class="close-btn" onclick="closeNotification()">&times;</span>
    </div>
    <div id="invalid-credentials" style="display: <?php echo ($isInvalidCredentials) ? 'block' : 'none'; ?>;">
    <span id="invalid-message">Kullanıcı adı veya şifre hatalı. Lütfen tekrar deneyin.</span>
    <span class="close-btn" onclick="closeInvalidCredentials()">&times;</span>
    </div>


    <div class="d-lg-flex half">
    <div class="bg order-1 order-md-2" style="background-image: url('images/bg_1.jpg');"></div>
    <div class="contents order-2 order-md-1">
    <div class="container">
    <div class="row align-items-center justify-content-center">
    <div class="col-md-7">
    <h3>Giriş Yap <strong>Lolunranked.net</strong></h3>
    <form action="" method="post">
    <div class="form-group first">
    <label for="username">kullanıcı adı</label>
    <input name="kullanici" type="text" class="form-control" placeholder="kullanıcı adı"
    id="username">
    </div>
    <div class="form-group last mb-3">
    <label for="password">şifre</label>
    <input name="sifre" type="password" class="form-control" placeholder="şifre"
    id="password">
    </div>
    <div class="d-flex mb-5 align-items-center">
    <label class="control control--checkbox mb-0"><span class="caption">Beni Hatırla</span>
    <input type="checkbox" checked="checked"/>
    <div class="control__indicator"></div>
    </label>
    <span class="ml-auto"><a href="forget_password.php" class="forgot-pass">Şifremi unuttum</a></span>
    </div>
    <input type="submit" value="Giriş Yap" class="btn btn-block btn-primary">

    </form>
    </div>
    </div>
    </div>
    </div>
    </div>
    <script src="js/jquery-3.3.1.min.js"></script>
    <script src="js/popper.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/main.js"></script>
    <script>
    function closeNotification() {
    document.getElementById('notification').style.disp lay = 'none';
    }

    function closeInvalidCredentials() {
    document.getElementById('invalid-credentials').style.display = 'none';
    }
    </script>
    <script>
    var isBanned = <?php echo $isBanned; ?>;
    if (isBanned == 1) {
    document.getElementById('notification').style.disp lay = 'block';
    }
    var isInvalid = <?php echo $isInvalidCredentials ? 'true' : 'false'; ?>;
    if (isInvalid) {
    document.getElementById('invalid-credentials').style.display = 'block';
    }

    </script>
    </body>
    </html>

    <?php
    $isBanned = false;
    $isInvalidCredentials = false;

    if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $kullanici = guvenlik($_POST["kullanici"]);
    $sifre = guvenlik($_POST["sifre"]);

    $sorgu = $baglan->prepare("SELECT id, username, password, balance, is_banned FROM users WHERE username=?");
    $sorgu->bind_param("s", $kullanici);
    $sorgu->execute();
    $sorgu->store_result();

    if ($sorgu->num_rows > 0) {
    $sorgu->bind_result($userId, $username, $hashedPassword, $balance, $is_banned);
    $sorgu->fetch();

    if ($is_banned == 1) {
    $isBanned = true;
    }

    if (password_verify($sifre, $hashedPassword)) {
    if ($isBanned) {
    echo "<script>
    document.getElementById('notification').style.disp lay = 'block';
    </script>";
    exit;
    }

    setcookie("kullanici", "msb", time() + 60 * 60);
    $_SESSION["giris"] = sha1(md5("var"));
    $_SESSION["giris"] = true;
    $_SESSION["userId"] = $userId;
    $_SESSION["username"] = $username;
    $_SESSION["balance"] = $balance;

    header("Locationanel/");
    exit;
    } else {
    $isInvalidCredentials = true; // Kullanıcı adı veya şifre hatalı
    }
    } else {
    $isInvalidCredentials = true; // Kullanıcı bulunamadı, hatalı giriş
    }

    $sorgu->close();
    $baglan->close();
    }
  • 05-12-2023, 16:01:29
    #2
    Detaylı incelemedim fakat JS de displayi "disp lay" olarak yazmışsınız. Bir kontrol edin olmadı tekrar inceleyelim.
  • 05-12-2023, 16:09:00
    #3
    yapay zeka ya sordun mu?



    Kodunuzda birkaç sorun var gibi görünüyor. İşte düzeltme önerileri:
    1. Değişken Başlatma: HTML kodunuzda $isInvalidCredentials değişkenini hata mesajının görünürlüğünü kontrol etmek için kullanıyorsunuz, ancak bu değişkeni HTML kısmında kullanmadan önce başlatmıyorsunuz. Bu sorunu düzeltmek için $isInvalidCredentials değişkeninin başlatılmasını PHP bölümünde form gönderimi kontrolünden önce yapın.
      phpCopy code
      <?php
      $isBanned = false;
      $isInvalidCredentials = false;
      if ($_SERVER["REQUEST_METHOD"] === "POST") { // Geri kalan kodlar
      ?>
    2. Hata Mesajını Gösterme: Hata mesajını göstermek için JavaScript kullanmak yerine, stil özelliğini doğrudan HTML içinde echo komutu ile ekleyebilirsiniz. HTML'deki ilgili bölümü şu şekilde değiştirin:
      htmlCopy code
      <div id="invalid-credentials" style="display: <?php echo ($isInvalidCredentials) ? 'block' : 'none'; ?>;"> <span id="invalid-message">Kullanıcı adı veya şifre hatalı. Lütfen tekrar deneyin.</span> <span class="close-btn" onclick="closeInvalidCredentials()">&times;</span>
      </div>
      Bu şekilde, hata mesajı PHP değişkeninin değerine dayalı olarak görüntülenecektir.
    3. Geçersiz Kimlik Bilgisi Kontrolü: Geçersiz kimlik bilgisi kontrolü doğru çalışmıyor gibi görünüyor. $isInvalidCredentials yerine, doğrudan URL'de bir hata parametresi ile giriş sayfasına yönlendirme yapabilirsiniz. Kodunuzu buna göre değiştirin:
      phpCopy code
      } else { header("Location: login.php?error=invalid_credentials"); exit; }
      Ve HTML'de, hata parametresini kontrol edip buna göre hata mesajını görüntüleyin:
      htmlCopy code
      <div id="invalid-credentials" style="display: <?php echo (isset($_GET['error']) && $_GET['error'] == 'invalid_credentials') ? 'block' : 'none'; ?>;"> <span id="invalid-message">Kullanıcı adı veya şifre hatalı. Lütfen tekrar deneyin.</span> <span class="close-btn" onclick="closeInvalidCredentials()">&times;</span>
      </div>
    Bu değişikliklerle, geçersiz kimlik bilgileri için hata mesajını doğru bir şekilde göstermeniz gerekmelidir.
  • 05-12-2023, 16:28:51
    #4
    lancelot adlı üyeden alıntı: mesajı görüntüle
    Detaylı incelemedim fakat JS de displayi "disp lay" olarak yazmışsınız. Bir kontrol edin olmadı tekrar inceleyelim.
    kopyalarken öyle olmuş fakat sorun ondan kaynaklı değil sunucuda doğru yazılmış
  • 05-12-2023, 16:29:25
    #5
    mavikorku adlı üyeden alıntı: mesajı görüntüle
    yapay zeka ya sordun mu?



    Kodunuzda birkaç sorun var gibi görünüyor. İşte düzeltme önerileri:
    1. Değişken Başlatma: HTML kodunuzda $isInvalidCredentials değişkenini hata mesajının görünürlüğünü kontrol etmek için kullanıyorsunuz, ancak bu değişkeni HTML kısmında kullanmadan önce başlatmıyorsunuz. Bu sorunu düzeltmek için $isInvalidCredentials değişkeninin başlatılmasını PHP bölümünde form gönderimi kontrolünden önce yapın.
      phpCopy code
      <?php
      $isBanned = false;
      $isInvalidCredentials = false;
      if ($_SERVER["REQUEST_METHOD"] === "POST") { // Geri kalan kodlar
      ?>
    2. Hata Mesajını Gösterme: Hata mesajını göstermek için JavaScript kullanmak yerine, stil özelliğini doğrudan HTML içinde echo komutu ile ekleyebilirsiniz. HTML'deki ilgili bölümü şu şekilde değiştirin:
      htmlCopy code
      <div id="invalid-credentials" style="display: <?php echo ($isInvalidCredentials) ? 'block' : 'none'; ?>;"> <span id="invalid-message">Kullanıcı adı veya şifre hatalı. Lütfen tekrar deneyin.</span> <span class="close-btn" onclick="closeInvalidCredentials()">&times;</span>
      </div>
      Bu şekilde, hata mesajı PHP değişkeninin değerine dayalı olarak görüntülenecektir.
    3. Geçersiz Kimlik Bilgisi Kontrolü: Geçersiz kimlik bilgisi kontrolü doğru çalışmıyor gibi görünüyor. $isInvalidCredentials yerine, doğrudan URL'de bir hata parametresi ile giriş sayfasına yönlendirme yapabilirsiniz. Kodunuzu buna göre değiştirin:
      phpCopy code
      } else { header("Location: login.php?error=invalid_credentials"); exit; }
      Ve HTML'de, hata parametresini kontrol edip buna göre hata mesajını görüntüleyin:
      htmlCopy code
      <div id="invalid-credentials" style="display: <?php echo (isset($_GET['error']) && $_GET['error'] == 'invalid_credentials') ? 'block' : 'none'; ?>;"> <span id="invalid-message">Kullanıcı adı veya şifre hatalı. Lütfen tekrar deneyin.</span> <span class="close-btn" onclick="closeInvalidCredentials()">&times;</span>
      </div>
    Bu değişikliklerle, geçersiz kimlik bilgileri için hata mesajını doğru bir şekilde göstermeniz gerekmelidir.
    chat gptye sordum fakat düzgün çözemedi ya kodumu bozdu yada alakasız cevaplar verdi
  • 05-12-2023, 17:00:03
    #6
    hocam kodunuzda bir çok mantık hatası bulunuyor.
    1- Kontrol yaptığınız "isInvalidCredentials" değişkeni daha öncesinde tanımlamamışsınız.
    2- Tanımlama yaptığınız "isInvalidCredentials" değişken değeri sayfa yeniden yüklendiğinde korunamaz.
    3- Değerini korumuş olsa dahi öncesinde yönlendirme yapıyorsunuz.

    Tavsiyem bu kontrolü session tanımlayarak session üzerinden gerçekleştirmeniz. Kontrolü ona göre yapmanız ve sonrasında bildirim açılınca sessionu destroy etmeniz yönünde olur. Kontrolden sonra önce session ataması sonrasında yönlendirme işlemi yapılması gerekmektedir.