saraconta / OPB-kozmeticni-salon

MIT License
0 stars 1 forks source link

Nedelujoča registracija #2

Closed saraconta closed 1 year ago

saraconta commented 1 year ago

Pozdravljeni, v postopku registracije se vpisni podatki ob pritisku na gumb registracija kar nekam izgubijo, pa tudi napake ne javi nobene. Koda je sicer podobna kot pri profesorju Orbaniću. Postopek, kako naj bi registracija delovala, je sledeč:

Bi hoteli pogledati, kje se skriva napaka, ker je me ne zaznamo in pa sporočiti, kaj bi bilo treba popraviti, da bo delovalo?

Trenutno je to narejeno samo za tabelo strank. Zanima me še, če je mogoče v ta proces dodati tudi tabelo uslužbencev samo s kakšnim join stavkom, da ni treba delati ločenih prijav/registracij za stranke in uslužbence?

Hvala že vnaprej, Sara

majbc1999 commented 1 year ago

Živjo,

našel sem napako. S cursorjem ne morete verižiti (chaining) več ukazov, saj cur.execute ne vrača objekta cursor. Potrebno bo torej najprej izvesti klic in nato uporabiti metodo fetchone(). Med kodo sem našel še nekaj napakic, glejte komentarje:

@post('/registracija')
def registracija_post():
    ime_priimek = request.forms.ime_priimek

    # v formah je ime uporabnisko_ime in ne up_ime
    up_ime = request.forms.uporabnisko_ime
    geslo = request.forms.geslo
    geslo2 = request.forms.geslo2
    if ime_priimek is None or up_ime is None or geslo is None or geslo2 is None:
        nastaviSporocilo('Registracija ni mogoča!') 
        redirect('/registracija')
        return    
    uporabnik = None
    try:
        # fetchone se mora uporabiti posebej
        cur.execute("SELECT * FROM stranka WHERE ime_priimek = %s", (ime_priimek, ))
        uporabnik = cur.fetchone()
    except:
        uporabnik = None
    if uporabnik is None:
        nastaviSporocilo('Registracija ni mogoča!') 
        redirect('/registracija')
        return
    if geslo != geslo2:
        nastaviSporocilo('Gesli se ne ujemata!') 
        redirect('/registracija')
        return
    zgostitev = hashGesla(geslo)

    # namesto '?' je potrebno uporabiti %s
    cur.execute("UPDATE stranka SET up_ime = %s, geslo = %s WHERE ime_priimek = %s", (up_ime, zgostitev, ime_priimek))
    response.set_cookie('up_ime', up_ime, secret=skrivnost)
    return redirect('/stranke')

Zgornja koda sicer še ne deluje, saj uporabnik javnost še nima pravice za dodajanje oz. spreminjanje tabel.

Poleg tega sem opazil, da imate mapico Views poimenovano z veliko začetnico, kar povzroča težave na nekaterih operacijskih sistemih (npr. na Ubuntuju). Prosim, da jo preimenujete v views, tako da bo aplikacija povsod delovala.

Trenutno je to narejeno samo za tabelo strank. Zanima me še, če je mogoče v ta proces dodati tudi tabelo uslužbencev samo s kakšnim join stavkom, da ni treba delati ločenih prijav/registracij za stranke in uslužbence?

Glede na to, da imate uporabnike shranjene v več tabelah, boste morali pri registraciji iskati po vsaki tabeli posebej (in potem tudi spremeniti uporabnika v tej tabeli).

saraconta commented 1 year ago

Zdravo, popravila sem zadevo, kot je bilo rečeno, pa še vedno ne deluje prav. Prej se je ob registraciji preusmerilo nazaj na stran za registracijo, kar je bilo narobe, zdaj pa se preusmeri na stran stranke, tako kot je treba. Edini problem je, ker se podatki še vedno ne vpišejo v tabelo. Sem pa naredila ločeni strani za registracijo strank in uslužbencev, kar se mi zdi, da bi moralo delovati. Pri prijavi pa sem potem vgnezdila dve try zanki, ki preverita za obe tabeli, ali je uporabnik vpisan. Prosila bi, da še enkrat preverite, kje sem naredila napako. Hvala!

majbc1999 commented 1 year ago

Živjo,

potem ko narediš cur.execute(...) in spremeniš bazo (na primer spremeniš vrstico, dodaš novo ali pa izbrišeš), moraš vedno na koncu "commitati" (nekako potrditi spremembe) z ukazom conn.commit(). Na primer:

cur.execute("UPDATE stranka SET up_ime = %s, geslo = %s WHERE ime_priimek = %s", (up_ime, zgostitev, ime_priimek))
conn.commit()