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.