v2.5.2
Giriş yap

PHP Oturum Hatası

Anonim
597 defa görüntülendi

Merhabalar, PHP OOP Derslerine yeni başladım, yönetici girişini ayarlamaya çalışıyorum fakat veritabanındaki kullanıcıyı nedense bulamıyorum.
Nerede hata yapıyorum yardımcı olabilir misiniz ?
https://www.awesomescreenshot.com/image/5869637/ab9057592bcbd7db6b2130ad402295c1

//Login.php
<?php  
  if (isset($_POST['admins_login'])) {
    $result = $db->adminsLogin(htmlspecialchars($_POST['username']), htmlspecialchars($_POST['pass']));
    
    if ($result['status']) {
      header("Location:index.php");
      exit;
    }else{
      echo'
      <div class="alert alert-danger text-center text-white" style="background: #fd3535;border-color: #fd3535;padding: 2px;">
        Giriş bilgileriniz hatalı, bilgilerinizi kontrol ediniz !
      </div>';
    }
  }
?>
//class.crud.php
<?php
    public function adminsLogin($username, $pass){
		try {
			$stmt=$this->db->prepare("SELECT * FROM admins WHERE username=? AND pass=?");
			$stmt->execute([$username, md5($pass)]);

			if ($stmt->rowCount()==1) {
			
				$row=$stmt->fetch(PDO::FETCH_ASSOC);

				$_SESSION["admins"]=[
					"username" => $username,
					"fullname" => $row['fullname'],
					"avatar" => $row['file'],
					"id" => $row['id']
				];
				return ['status' => TRUE];
			}else{
				return ['status' => FALSE];
			}
		} catch (Exception $e) {
			return ['status' => FALSE, 'error' => $e->getMessage()];
		}
	}
?>
                        
Cevap yaz
Cevaplar (6)
isimimcokguzel2
1451 gün önce

Hocam sizin için araştırdım ve böyle bir konu buldum umarım işinize yarar.
https://stackoverflow.com/questions/6933079/pdo-mysql-select-statement-returning-boolean-true/6933107

veoper
1450 gün önce

Sorunu çözdüm hocam, ilgi ve alakanız için tekrardan teşekkür ederim

veoper
1451 gün önce

Hocam yardımcı olduğunuz ve ilgi ve alakanız için tekrardan teşekkür ederim, son mesajımdan sonra tüm yapıyı tek tek test ettim. SELECT, INSERT ve diğer işlemleri test ettiğimde "true" değerini döndürüyor fakat herhangi bir işlem yapmıyor. Stackoverflow ve diğer sitelere göz attım hatanın çözümü için fakat yardımcı olabilecek herhangi bir konuya denk gelemedim.

isimimcokguzel2
1451 gün önce

Hocam soruyu yanlış anlamışım kusura bakmayın ve bunun için özür dilerim. İlk önce username i kontrol edip daha sonra pass kontrol etmeyi denediniz mi? Bence parçalara ayırırsanız hatayı bulmak kolaylaşacaktır.

Örnek Verirsek


$k = emailkontrol();
$k->execute()

if($k->rowCount() > 0){
    $pass = $k["pass"];
    
    $passcheck = ($pass == $gelenpassdegeri);
    
    if($passcheck){
        //işlemler
    } else {
        //hata
    }
}

veoper
1451 gün önce

Öncellikle tüyo için teşekkürler hocam, sayfanın en başında session_start(); ekli olmasına rağmen hata veriyor sebebini bir türlü çözemedim. Çözemediğimden de diğer derslere devam edemiyorum, ilgilendiğiniz için teşekkür ederim bu arada hocam

isimimcokguzel2
1451 gün önce

Hocam session'a bir şey kaydetmeniz için ilk olarak session_start() ile oturum başlatmalısınız.

...
    try {
        $stmt=$this->db->prepare("SELECT * FROM admins WHERE username=? AND pass=?");
        $stmt->execute([$username, md5($pass)]);
        if ($stmt->rowCount() > 0) {
            $row=$stmt->fetch(PDO::FETCH_ASSOC);
            session_start();
            $_SESSION["admins"]=[
				"username" => $username,
				"fullname" => $row['fullname'],
				"avatar" => $row['file'],
				"id" => $row['id']
			];
...

Bu arada ufak bi tüyo vereyim: MD5 yerine password_hash() şifrelemede daha iyi olacaktır.