• 11-12-2013, 12:45:26
    #1
    Merhaba arkadaşlar. PDO'ya yeni başlamış birisi olarak kafam çok karışık desem yeridir Genel olarak basit bir fonksiyon sistemi olsa da eski yönetim panelimi PDO'ya dönüştürürken sıkıntılar yaşıyorum.

    $query = mysql_query("SELECT * FROM uyeler WHERE uye_kadi = '$kadi' && uye_sifre = '$sifre'");
                if (mysql_affected_rows()){
                
                   $row = row($query);
                   $session = array(
                      "girisyap" => true,
                      "uye_id" => $row["uye_id"],
                      "uye_kadi" => $row["uye_kadi"],
                      "uye_ad_soyad" => $row["uye_ad_soyad"],
                      "uye_rutbe" => $row["uye_rutbe"]
                   );
                   session_olustur($session);
                   
                   header("Refresh:0;");
                
                }else {
                    echo "<font color='red'>Böyle Bir Yönetici Yoktur.</font>";
                }

    Tayfun abi nin BBSY projesinden öğrendiğim bu kodu PDO'ya dönüştüremedim bir türlü. Sürekli "Böyle bir yönetici yoktur" hatası veriyor. Yardımcı olabilecek var mı ? Şimdiden teşekkürler.
  • 11-12-2013, 12:56:48
    #2
    <?php
    /* Ben DB islemini örnekleme acisindan ekledim cünkü sizin PDO klasina verdiginiz degiskeni bilmiyorum. */
    
    $host = "localhost";
    $database = "test";
    $user = "root";
    $password = "";
    
    try {
    	$selco = new PDO("mysql:host={$host};dbname={$database}", $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    	$selco->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
    } catch (PDOException $e) {
    	return 'Hay Allah!, Connection Error: '. $e->getMessage();
    }
    	
    $row = $selco->query("SELECT * FROM uyeler WHERE uye_kadi = '$kadi' && uye_sifre = '$sifre'");
    $row = $selco->fetch(PDO::FETCH_ASSOC);
    
    if ( $row["uye_id"])
    {
    	$session = array(
    		"girisyap" => true,
    		"uye_id" => $row["uye_id"],
    		"uye_kadi" => $row["uye_kadi"],
    		"uye_ad_soyad" => $row["uye_ad_soyad"],
    		"uye_rutbe" => $row["uye_rutbe"]
    	);
    	session_olustur($session);        
    	header("Refresh:0;");
    } else {
    	echo "<font color='red'>Böyle Bir Yönetici Yoktur.</font>";
    }
    ?>
  • 11-12-2013, 13:05:10
    #3
    Selçuk adlı üyeden alıntı: mesajı görüntüle
    <?php
    /* Ben DB islemini örnekleme acisindan ekledim cünkü sizin PDO klasina verdiginiz degiskeni bilmiyorum. */
    
    $host = "localhost";
    $database = "test";
    $user = "root";
    $password = "";
    
    try {
    	$selco = new PDO("mysql:host={$host};dbname={$database}", $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    	$selco->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
    } catch (PDOException $e) {
    	return 'Hay Allah!, Connection Error: '. $e->getMessage();
    }
    	
    $row = $selco->query("SELECT * FROM uyeler WHERE uye_kadi = '$kadi' && uye_sifre = '$sifre'");
    $row = $veri->fetch(PDO::FETCH_ASSOC);
    
    if ( $row["uye_id"])
    {
    	$session = array(
    		"girisyap" => true,
    		"uye_id" => $row["uye_id"],
    		"uye_kadi" => $row["uye_kadi"],
    		"uye_ad_soyad" => $row["uye_ad_soyad"],
    		"uye_rutbe" => $row["uye_rutbe"]
    	);
    	session_olustur($session);        
    	header("Refresh:0;");
    } else {
    	echo "<font color='red'>Böyle Bir Yönetici Yoktur.</font>";
    }
    ?>
    hocam çok çok saol ya ne kadar teşekkür etsem azdır Allah razı olsun gerçekten çok teşekkür ederim.
  • 11-12-2013, 13:06:09
    #4
    Misafir adlı üyeden alıntı: mesajı görüntüle
    hocam çok çok saol ya ne kadar teşekkür etsem azdır Allah razı olsun gerçekten çok teşekkür ederim.
    r10 like ile tesekkür edebilirsiniz
  • 11-12-2013, 13:07:05
    #5
    Selçuk adlı üyeden alıntı: mesajı görüntüle
    r10 like ile tesekkür edebilirsiniz
    hallettim ek olarak

    if ( $row["uye_id"])
    {
    şu kısmın ne işe yaradığını tam anlamadım
  • 11-12-2013, 13:10:59
    #6
    Sizin verdiginiz kodda mysql_affected_rows(); bir önceki sorgunun basarili calip calismadigini kontrol ediyor. Bende o düzeni bozmadim, PDO da böyle bir fonksiyon yok ya da ben bilmiyorum. Onun yerine üye id sine göre kosul verdim. Ayni mantik sonucta. Üye id bos ise zaten kod calismamis demektir.

    Misafir adlı üyeden alıntı: mesajı görüntüle
    hallettim ek olarak

    if ( $row["uye_id"])
    {
    şu kısmın ne işe yaradığını tam anlamadım
  • 11-12-2013, 13:12:50
    #7
    Selçuk adlı üyeden alıntı: mesajı görüntüle
    Sizin verdiginiz kodda mysql_affected_rows(); bir önceki sorgunun basarili calip calismadigini kontrol ediyor. Bende o düzeni bozmadim, PDO da böyle bir fonksiyon yok ya da ben bilmiyorum. Onun yerine üye id sine göre kosul verdim. Ayni mantik sonucta. Üye id bos ise zaten kod calismamis demektir.
    evet çok mantıklı tekrar çok teşekkür ederim hocam.
  • 12-12-2013, 19:11:07
    #8
    Sorgulamayı şu şekilde de yapılabilir.

    $etkilenen_veri_sayisi = $selco->rowCount();
    
    if( $etkilenen_veri_sayisi !== 1 ) {
    
    	echo 'Başarılı';
    
    }
  • 12-12-2013, 22:36:51
    #9
    @Selçuk üstad izninizle verdiğiniz cevabı bir tık daha ileriye götürmek istiyorum. PDO'nun bence en büyük avantajlarından biri Prepared stament(hazır deyimler) olayı. Hazır deyimler yazdığımız sorguların güvenliği ve performansı açısından çok önemli. Hazır deyimler kullanarak, mysql_escape_string gibi fonksiyonlardan kurtuluyoruz çünkü bu şekilde sorguya dışarıdan yapılan müdahaleler engellenmiş oluyor. Bunun yanında güzel bir yanı da bizi tırnak olayından kurtarmış oluyor. PDO ile haşır neşir olmaya başlayan arkadaşlara kesinlikle hazır deyimleri kullanmalarını öneririm. Soru sahibi arkadaşın verdiği kodun pdo ile hazır deyimler kullanarak uyarlanmış hali de şu şekildedir ;
    <?php
    /* Ben DB islemini örnekleme acisindan ekledim cünkü sizin PDO klasina verdiginiz degiskeni bilmiyorum. */
    
    $host = "localhost";
    $database = "test";
    $user = "root";
    $password = "";
    
    try {
        $selco = new PDO("mysql:host={$host};dbname={$database}", $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
        $selco->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
    } catch (PDOException $e) {
        return 'Hay Allah!, Connection Error: '. $e->getMessage();
    }
    
    $getUsers = $selco->prepare("SELECT * FROM uyeler WHERE uye_kadi = ? && uye_sifre = ?");
    $getUsers->bindParam(1,$kadi);
    $getUsers->bindParam(2,$sifre);
    $getUsers->execute();
    
    if ($getUsers->rowCount() > 0)
    {
        $row = $getUsers->fetch(PDO::FETCH_ASSOC);
        $session = array(
            "girisyap" => true,
            "uye_id" => $row["uye_id"],
            "uye_kadi" => $row["uye_kadi"],
            "uye_ad_soyad" => $row["uye_ad_soyad"],
            "uye_rutbe" => $row["uye_rutbe"]
        );
        session_olustur($session);
        header("Refresh:0;");
    } else {
        echo "<font color='red'>Böyle Bir Yönetici Yoktur.</font>";
    }
    ?>
    Prepared Statements(Hazır Deyimler) konusunu daha iyi kavrayabilmek için güzel bir Türkçe makale buldum bu konuda bilgi sahibi olmayan arkadaşlar bu makaleyi inceleyerek konuyu daha iyi kavrayabilirler.
    http://www.superbug.co/2013/08/prepare-methodunu-kullanarak-sql.html