Python Kodumdaki Elif Çalışmıyor? Yardım

    def signupfunction(self):
        user = self.username.text()
        password = self.passwordfield.text()
        confirmpassword = self.confirmpasswordfield.text()

        if len(user)==0 or len(password)==0 or len(confirmpassword)==0:
            self.error.setText("Bilgileri Doldurunuz!")

        elif password!=confirmpassword:
            self.error.setText("Şifreler Eşleşmişyor.Tekrar Deneyiniz!")
               
            conn = sqlite3.connect("shop_data.db")
            cur = conn.cursor()
            query = 'SELECT username FROM login_info WHERE username =\''+user+"\'"
            cur.execute(query)
            result_pass = cur.fetchone()[0]
        elif result_pass == user:            
            self.error.setText("Kullanıcı Adı Kullanılıyor.")            
            
        else:
            conn = sqlite3.connect("shop_data.db")
            cur = conn.cursor()

            user_info = [user, password]
            cur.execute('INSERT INTO login_info (username, password) VALUES (?,?)', (user_info))

            self.error.setText("Kayıt Başarılı.Aramıza Hoşgeldiniz!")
            self.error1.setText("Giriş Sayfasına Geri Gidebilirsiniz..")


            conn.commit()
            conn.close()

bu kod ile yapmak istediğim kullanıcı adı eğer veritabanında varsa alttaki hata kodunu yazdırması ama olmuyor. Birkaç yöntem daha denedim ama yine olmadı. Mesela veritabanı çağırma işlemini başa aldığım aldığım zaman aynı kullanıcı varsa hata mesajını yazdırıyor ama olmayan kullanıcı adını kaydet dediğimde result pass hatası veriyor ve veritabanına kullanıcıyı kaydetmiyor. Aşağıdaki Hatayı Veriyor:

Neden oluyordur bir yanlışlık mı yapıyorum ? Yardımlarınız İçin Şimdiden Teşekkürler …

Bu kısmı elif içinden çıkarın. Orayı atladığı icin result_pass diye bir değişken üretmiyor. Dolayısıyla aşağıda da atama yapmadığınız bir değişkenle işlem yapmaya çalışmış oluyorsunuz.

en altta büyük bir resim attım dikkat ederseniz orada elifin içinde değil. Bu durumda aynı kullanıcı adını bulup hata mesajı yazdırıyor sorun şu ki farklı kullanıcı adı girildiği zaman en alttaki elseyi çalıştırıp db kaydetmesi lazımken result_pass=cur.fetchone()[0] nonetype object is not subscriptable hatası veriyor ? burda elifden başka döngü kullanabilir miyim aynı işlemi yapacak olan bir yerde yanlış yapıyorum ama neresi hala çözemedim ?

fetchone() eğer sorgudan dönen sonuç yoksa None dönüyor. Bir de üstüne siz bu olmayan verinin sıfırıncı indisine erişmeye çalışıyorsunuz. Program burada patlıyor. elif not result_pass diye bir durum tanımlayıp onun altında işlem yapabilirsiniz.

tanımladım ama çalışmadı. buradaki mantığı anladım ama çözüm için bir yol üretemiyorum. başka yolu var mıdır ? veya nasıl birşey yapmam gerekli daha net yazabilir misiniz ?

Fetcone yetine fetchall kullanın. Kullanıcı adı yoksa boş döner. Orada if not kullanırsınız. Veya fethone() dedikten sonra sıfırıncı elemana erişmeye çalışmayın. Aynı zamanda

Burada da eşitlik kontrolü yapmanıza gerek yok. Çünkü SQL sorguda zaten veritabanı tarafında bu eşitliği kullanmışsınız. elif resultpass demeniz yeterli. Veri tabaninda o isimde varsa zaten dolu gelir, yoksa boş döner.

fethcall olarakda denedim aynı hatayı veriyor. muhtemelen 0 indeksiini eşittir dediğim için bir sonuç bulamayınca neye eşittir oldugunu bilemediği için hata veriyor. muhtemelen başka bir fonskiyon veya denklem kurmam gerekiyor…

şeklinde düzenleme yapmanız gerekiyor. Yani kısaca cursor boş dönmüyorsa zaten bu kullanıcı veri tabanında mevcut, boş bir şey dönmemiş. İçi dolu olduğu için de if bloğu True döndürür. ona göre hata dönüyorum.

deneyip tekrar yazacağım…