• 13-07-2013, 21:29:14
    #1
    Merhaba üye kaydı yaparken şu fonksiyonu kullanıyorum

        
    function register($name,$username,$email,$password) {
            $this->db->where('username',$username);
            if ($this->db->count_all_results('users') > 0) {
                return 'e1'; //Kullanıcı adı kullanımda
            }
            $this->db->where('email',$email);
            if ($this->db->count_all_results('users') > 0) {
                return 'e2'; //Email kullanımda
            }
            $password=md5($password);
            $this->data=array(
                              'username' => $username,
                              'email' => $email,
                              'password' => $password,
                              'name' => $name
            );
            $this->db->insert('users',$this->data); //Kayıt Yapıldı
            return 'ok';
        }

    Ama üye olan kişilere baktığımda 50-60 kişi birebir aynı email ve kullanıcı adıyla üye olabilmiş.Bu nasıl olabilir ? Kayıtlar aynı kişi tarafından yapılmış mesela aynı kullanıcı adlı iki kişi var diyelim ikisininde ismi aynı ikisininde şifresi aynı vs. Sanki arka arkaya iki kere tıklamışlarda üye olmuşlar gibi bazıları 5-6 kayıt açmış hatta aynı mail ve kullanıcı adıyla.Neden kaynaklanıyor olabilir sizce ?

    Not:Codeigniter kullanıyorum
  • 14-07-2013, 02:43:43
    #2
    Bunun sebebi sizin kodlamada yaptığınız mantık hatasıdır. Yukarıda paylaştığınız kodda if bloklarını ard arda kullanmışınız fakat if koşulu içerisinde belirttiğiniz olay gerçekleşse bile, yani kullanıcı varsa bile elseif kullanmadığınız dan dolayı bir sonra ki if blokuna geçiş yapıyor. Onda da yine sağlansa bile, herhangi bir else durumu olmadığından veritabanına kayıtı her şekilde yapıyor.

    Şu şekilde sorun olamaması gerek.

    function register($name,$username,$email,$password) { 
            $this->db->where('username',$username); 
            if ($this->db->count_all_results('users') > 0) { 
                return 'e1'; //Kullanıcı adı kullanımda 
            } 
           $this->db->where('email',$email);
            else if ($this->db->count_all_results('users') > 0) { 
                  
                return 'e2'; //Email kullanımda 
            }else { 
            $password=md5($password); 
            $this->data=array( 
                              'username' => $username, 
                              'email' => $email, 
                              'password' => $password, 
                              'name' => $name 
            ); 
            $this->db->insert('users',$this->data); //Kayıt Yapıldı 
            return 'ok'; 
           }
        }
    Burada şunu yaptık, ilk önce kullanıcı adının var olup olmadığını kontrol ettik eğer kullanıcı adı alınmış ise, if else bloku oluşturduğumuzdan dolayı direk if koşulu sağlandığında diğerlerini görmeden fonksiyonu sonlandırır. Eğer ki hiç bir if koşulu sağlanmıyorsa direk else blokuna geçerek, orada ki işlemi yapar.
  • 14-07-2013, 12:55:24
    #3
    NepenTheS adlı üyeden alıntı: mesajı görüntüle
    Bunun sebebi sizin kodlamada yaptığınız mantık hatasıdır. Yukarıda paylaştığınız kodda if bloklarını ard arda kullanmışınız fakat if koşulu içerisinde belirttiğiniz olay gerçekleşse bile, yani kullanıcı varsa bile elseif kullanmadığınız dan dolayı bir sonra ki if blokuna geçiş yapıyor. Onda da yine sağlansa bile, herhangi bir else durumu olmadığından veritabanına kayıtı her şekilde yapıyor.

    Şu şekilde sorun olamaması gerek.

    function register($name,$username,$email,$password) { 
            $this->db->where('username',$username); 
            if ($this->db->count_all_results('users') > 0) { 
                return 'e1'; //Kullanıcı adı kullanımda 
            } 
           $this->db->where('email',$email);
            else if ($this->db->count_all_results('users') > 0) { 
                  
                return 'e2'; //Email kullanımda 
            }else { 
            $password=md5($password); 
            $this->data=array( 
                              'username' => $username, 
                              'email' => $email, 
                              'password' => $password, 
                              'name' => $name 
            ); 
            $this->db->insert('users',$this->data); //Kayıt Yapıldı 
            return 'ok'; 
           }
        }
    Burada şunu yaptık, ilk önce kullanıcı adının var olup olmadığını kontrol ettik eğer kullanıcı adı alınmış ise, if else bloku oluşturduğumuzdan dolayı direk if koşulu sağlandığında diğerlerini görmeden fonksiyonu sonlandırır. Eğer ki hiç bir if koşulu sağlanmıyorsa direk else blokuna geçerek, orada ki işlemi yapar.
    Hocam kodu deneyeceğim ama ben mantık hatası göremiyorum en baştaki if te kullanıcı adı varsa return ile fonksiyon duruyor zaten eğer yoksa ikinci if bloğu kontrol ediliyor onda varsa fonksiyon yine return ile durduruluyor,return dan sonra kod calısmaya devam edemezki niye ikinci if bloğuna veya kayıt işlemine geçsin ?
  • 14-07-2013, 15:13:42
    #4
    ikisbokusurfa adlı üyeden alıntı: mesajı görüntüle
    Hocam kodu deneyeceğim ama ben mantık hatası göremiyorum en baştaki if te kullanıcı adı varsa return ile fonksiyon duruyor zaten eğer yoksa ikinci if bloğu kontrol ediliyor onda varsa fonksiyon yine return ile durduruluyor,return dan sonra kod calısmaya devam edemezki niye ikinci if bloğuna veya kayıt işlemine geçsin ?
    Hocam return ile geri dönüyor fakat, işlemi sonlandıracak bir kod eklemesi, yapmamışsınız ondan dolayı devam ediyor, siz deneyin kodu.
  • 14-07-2013, 18:31:22
    #5
    NepenTheS adlı üyeden alıntı: mesajı görüntüle
    Hocam return ile geri dönüyor fakat, işlemi sonlandıracak bir kod eklemesi, yapmamışsınız ondan dolayı devam ediyor, siz deneyin kodu.
    Hocam koydum yine aynı sorun devam ediyor.Ben anlamıyorumki ben deniyorum aynı kullanıcı adıyla kaydolmayı hata alıyorum bu bazı kullanıcılar bunu nasıl beceriyor çözemedim.Sistemde başka o tabloya veri ekleyen fonksiyonda yok.
  • 15-07-2013, 11:19:36
    #6
    Sorun devam ediyor yok mu fikri olan ?