PHP Oturum Hatası
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()];
}
}
?>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (6)
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
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.
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
}
}
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.