• 19-02-2023, 13:39:47
    #1
    <?php
    $host = "localhost";
    $username = "x";
    $password = "x";
    $dbname = "x";
    
    // Veritabanı
    $conn = new mysqli($host, $username, $password, $dbname);
    
    // Hata kontrolü
    if ($conn->connect_error) {
      die("Veritabanına bağlantı sağlanamadı: " . $conn->connect_error);
    }
    
    // Verileri post etme
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $email = $_POST["email"];
      $password = $_POST["password"];
    
      // Veritabanından kullanıcıyı sorgulama
      $stmt = $conn->prepare("SELECT password FROM users WHERE email = ?");
      $stmt->bind_param("s", $email);
      $stmt->execute();
      $stmt->store_result();
      
      // Kullanıcı bulunursa şifreyi doğrula
      if ($stmt->num_rows > 0) {
        $stmt->bind_result($hashed_password);
        $stmt->fetch();
        if (password_verify($password, $hashed_password)) {
          // Kullanıcı doğrulandı, yönlendir
          session_start();
          $_SESSION["email"] = $email;
          header("Location: dashboard.php");
          exit;
        } else {
          echo "Geçersiz şifre";
        }
      } else {
        echo "Geçersiz e-posta adresi";
      }
      $stmt->close();
    }
    ?>
    Bu benim index.html'den giriş yap butonuna tıklayınca dashboard.php'ye yönlendirmesi gereken giris.php dosyam. E-postayı doğru girince doğru, yanlış girince yanlış olduğunu giris.php'ye atarak söylüyor fakat şifreyi doğru da girsem yanlış da girsem sürekli "Geçersiz şifre" hatası alıyorum bu yüzden dashboard.php'ye gidemiyorum. SQL'de aşağı kodları çalıştırarakta "users" tablosunu oluşturup bilgileri içine koydum.

    1:
    CREATE TABLE users (
      id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(50) NOT NULL,
      email VARCHAR(100) NOT NULL,
      password VARCHAR(255) NOT NULL
    );
    2:
    INSERT INTO users (name, email, password)
    VALUES ('John Doe', 'johndoe@example.com', '$2y$10$wYF/t11nN/ho5i7yzC6OLO5SE5si5y5Ei/CbryREvp5QLwL7zDZ5C');
    
    INSERT INTO users (name, email, password)
    VALUES ('Jane Doe', 'janedoe@example.com', '$2y$10$wYF/t11nN/ho5i7yzC6OLO5SE5si5y5Ei/CbryREvp5QLwL7zDZ5C');
    şifreyi de hashli şekilde sql'e ve giris.php'ye kaydettim ama hata nerede bulamıyorum. database bilgilerim doğru, php sürümü son sürüm. şifre normalde admin123456
  • 19-02-2023, 13:49:33
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Şifreyi direk olduğu gibi veritabanından sorguluyor olabilir misiniz? Şifreyi md5 veya diğer şifreleme fonksiyonları ile şifreleyip veritabanına ekliyorsanız aynı şekilde giriş yaparken de şifreyi hashleyip o şekilde sorgu yapmanız gerekiyor.
  • 19-02-2023, 14:22:13
    #3
    ertach adlı üyeden alıntı: mesajı görüntüle
    Şifreyi direk olduğu gibi veritabanından sorguluyor olabilir misiniz? Şifreyi md5 veya diğer şifreleme fonksiyonları ile şifreleyip veritabanına ekliyorsanız aynı şekilde giriş yaparken de şifreyi hashleyip o şekilde sorgu yapmanız gerekiyor.
    E-posta normal, şifre ise bir çeşit şifreleme ile veritabanına kayıtlı, yukarıdaki php kodunda yazıyor olmalı, giriş ekranında da şifreyi hash ile verify edip çözerek girmiyor mu zaten?
  • 19-02-2023, 14:48:14
    #4
    Yukarıdaki kodlarda şifreyi alıp encrypt ettiği kod eksik
  • 19-02-2023, 15:16:10
    #5
    $stmt->fetch();
        if (password_verify($password, $hashed_password)) {
          // Kullanıcı doğrulandı, yönlendir
          session_start();
          $_SESSION["email"] = $email;
          header("Location: dashboard.php");
          exit;
        }
    Şu kodda sorun var. password_verify fonksiyonu ne yapıyor bilmek lazım. $hashed_password değişkeni nereden geliyor
  • 19-02-2023, 17:18:52
    #6
    hatanın neden olduğunu anlayamadığım için baştan kullanıcı adı ve şifre şeklinde yaparak düzelttim, teşekkür ederim sizlere de.