PHP Veritabanı ile giriş sistemi hatası

AuEnx

Hectopat
Katılım
25 Aralık 2018
Mesajlar
472
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Kaç gündür şu sorunla uğraşıyorum bir türlü çözümüne gidemedim. Veritabanını bağlayıp, ardından veritabanında kayıtlı olan kullanıcıların kullanıcı adı ve şifresini kontrol edip doğruysa girmesini, yanlış ise hata vermesini istiyorum ama bir türlü beceremedim. Nerede hata yaptığımı da bilmiyorum bir sürü kod denedim. Yardımcı olur musunuz?

Giriş PHP kodları;
Kod:
<?php

$cnn=@mysqli_connect("localhost","vtkullanici","vtsifre","gym") or exit('Bağlantı hatası:'.mysqli_connect_errno());

if(isset($_POST['sbmt'])){

$kadi = $_POST['kadi'];

$sifre = $_POST['sifre'];

 

if(empty($kadi) || empty($sifre)){

  header("Location: giris.html?hata=girdilerbos");

  exit();

}else{

 

    $stmt = $cnn->prepare("SELECT * FROM kullanicilar WHERE kullaniciadi=?");

    if($stmt === false) die("Bağlantı Hatası:".$cnn->error);

    $stmt->bind_param("s", $kadi);

    $stmt->execute();

$sonuc = $stmt->get_result();

if($veri = $sonuc->fetch_assoc()){

$sifrontrol = password_verify($sifre, $veri['sifre']);

if($sifrekontrol == false){

  header("Location: giris.html?hata=sifrehatali");

  exit();

}

else if($sifrekontrol == true){

  session_start();

  $_SESSION['kadi'] = $veri['kadi'];

  header("Location: index.php");

  exit();

}

 

}else{

  header("Location: giris.html");

  exit();

}

}

}else{

  header("Location: index.php?hata=uyeyok");

  exit();

}

 

?>
 
2. satirdaki @ i kaldirir misin hatayi okuyabilelim.
Kaldırdım ve şifre hatalı mesajı veriyor tarayıcı arama kutusunda şu şekil ama onu kaldırmadan önce de aynı hata vardı.
1673426554050.png
 
Öncelikle PDO kullanmanı öneririm. Hem yenilikçi hem güvenilir.
Bunun dışında if-else-elseif kullanımını iyice öğrenmen gerek. Sistemini PDO'ya çevirirsen kodlarında yardımcı olurum.
 
Öncelikle PDO kullanmanı öneririm. Hem yenilikçi hem güvenilir.
Bunun dışında if-else-elseif kullanımını iyice öğrenmen gerek. Sistemini PDO'ya çevirirsen kodlarında yardımcı olurum.
Maalesef çok bir bilgim yok bu konularda, nasıl çevireceğim? Yani ufak 5 puanlık değerinde bu ödevimden dolayı yapmaya çalışıyorum bu giriş sistemini. Ödevde kayıt ekleme, ürün ekleme vs gibi seçenekleri başarıyla yapabilmiş olsam da sistemde bir tek giriş yapmayı beceremedim ve bu ödevden alacağım her puan önemli benim için. Yardımınız gerçektende çok yararlı olurdu teşekkür ederim.
 
Şu şekilde test et bakalım çalışıyor mu?

PHP:
<?php
session_start();
$cnn=@mysqli_connect("localhost","vtkullanici","vtsifre","gym") or exit('Bağlantı hatası:'.mysqli_connect_errno());

if(isset($_POST['sbmt'])) {
    $kadi = $_POST['kadi'];
    $sifre = $_POST['sifre'];
    
    if($kadi<>"" && $sifre <>"") {
        $query  = $cnn->query("SELECT * FROM kullanicilar WHERE kullaniciadi='$kadi' && sifre='$sifre'");
            if ( $say = $query ->num_rows ){
                if( $say > 0 ){
                    $sorgu = $cnn->prepare("SELECT * FROM kullanicilar WHERE kullaniciadi = ?");
                    $sorgu->bind_param("s", $kadi);
                    $sorgu->execute();
                    $sonuc = $sorgu->get_result();
                    $cikti = $sonuc -> fetch_assoc();
                    
                    $_SESSION['kadi']=$cikti['kullaniciadi'];
                    header("Location: index.php");
                    
                }
            } else {
                header("Location: index.php?hata=uyeyok");
                // bilgiler hatalı mesajı...
            }
    } else {
        header("Location: giris.html?hata=girdilerbos");
    }
}
?>
 
Şu şekilde test et bakalım çalışıyor mu?

PHP:
<?php
session_start();
$cnn=@mysqli_connect("localhost","vtkullanici","vtsifre","gym") or exit('Bağlantı hatası:'.mysqli_connect_errno());

if(isset($_POST['sbmt'])) {
    $kadi = $_POST['kadi'];
    $sifre = $_POST['sifre'];
  
    if($kadi<>"" && $sifre <>"") {
        $query  = $cnn->query("SELECT * FROM kullanicilar WHERE kullaniciadi='$kadi' && sifre='$sifre'");
            if ( $say = $query ->num_rows ){
                if( $say > 0 ){
                    $sorgu = $cnn->prepare("SELECT * FROM kullanicilar WHERE kullaniciadi = ?");
                    $sorgu->bind_param("s", $kadi);
                    $sorgu->execute();
                    $sonuc = $sorgu->get_result();
                    $cikti = $sonuc -> fetch_assoc();
                  
                    $_SESSION['kadi']=$cikti['kullaniciadi'];
                    header("Location: index.php");
                  
                }
            } else {
                header("Location: index.php?hata=uyeyok");
                // bilgiler hatalı mesajı...
            }
    } else {
        header("Location: giris.html?hata=girdilerbos");
    }
}
?>
Yardımınız için teşekkür ederim, size de zahmet oldu fakat sorunun ufak bir kod hatamdan kaynaklandığını fark ettim ve düzelttim şu an sorunsuz kodlarımı çalıştırabildim.
Hatam ise, kayıt oluştururken şifre değerini aldığım değişkeni bind param'a yazmamam ve bunun yerine rastgele sayı oluşturan değişkeni yazmamdan kaynaklanıyordu. Rastgele şifre üreten değişkenimi bind param'dan sildim ve onun yerine değerini aldığım şifre değişkenini yazmam sonucu düzeldi.

Yeniden de teşekkür ederim yardımınızdan dolayı.

Kod:
@mysqli_stmt_bind_param($stmt,'sssss',$kullaniciadi,$adi,$soyadi,$sifre,$dogumtarihi) or exit('Bağlantı hatası');

Şu satirda $sifre yerine, $sif adında rastgele parola üreten değişkenim vardı. Onu kaldırmam sonucu düzeldi.
 

Yeni konular

Geri
Yukarı