Skocz do zawartości
MarkZuckBimber

SQL - problem z dbPoll/rezultatem.

Rekomendowane odpowiedzi

Witam, napisałem otóż taki event: 
 

addEventHandler("SprobujZalogowac", root, 
 function(login,pass)
    local sprawdz = dbQuery(conn,"SELECT * FROM users WHERE login=?",login)
	local result = dbPoll(sprawdz,-1)
	if result then 
	   local sprawdz_haslo = dbQuery(conn,"SELECT * FROM users WHERE haslo=?",pass)
	   local result_haslo = dbPoll(sprawdz_haslo,-1)
	   if result_haslo then 
	   
	   else
	      triggerClientEvent("ZleHaslo", root)
	   end
	else 
	   triggerClientEvent("BrakKonta",root)
	end
 end
)

i zawsze result ~= 1 więc wyświetla się BRAK KONTA. Dopiero zaczynam swoją przygodę z sql i zapytaniami, nie wiem gdzie jest błąd więc zwracam się z tym do Was.
Będę wdzięczny za pomoc! 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

debugscript sypie jakieś błędy?
 

/debugscript 3 <- żeby włączyć debugscript
Ewentualnie sprawdzić czy konsola serwera wyrzuca jakieś błędy/warningi

EDIT:
Tym nie sprawdzisz czy wynik jest poprawny:

if result_haslo then 

Jeśli zapytanie się wykona to zawsze będzie true
Musisz sprawdzić czy tablica która jest zwracana ma więcej elementów niż 0. Czyli

if #result_haslo > 0 then 

 

Edytowane przez RJ45

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
WARNING: panele/server.lua:13: dbPoll failed: no such column: login. 

Dziwne, że wyświetla się taki error, ponieważ "login" jest w users. 
 

CREATE TABLE "users" ("login" TEXT, "haslo" TEXT, "ranga" INTEGER, "uprawnienia" INTEGER, "blokady" INTEGER, "elo" INTEGER, "reporty" INTEGER)

BTW: Nie patrz na to odnośnie passwordu, przez nieuwagę nie napisałem tego co miałem napisać - to nie miało w ogóle sprawdzać, czy dbPoll zwróci true. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dodaj ten kod:

addCommandHandler('pokazTabele', function (plr, cmd, tableName)
	local query = dbQuery(conn,"PRAGMA table_info(?);",tableName);
	local result = dbPoll(query,-1);
	outputDebugString('TABELA: '..tostring(tableName)..' LICZBA KOLUMN: '..tostring(#result), 3);
	for k, v in pairs(result) do
		outputDebugString('-KOLUMNA: '..tostring(v.name)..' TYP: '..tostring(v.type));
	end
end);

Wywołaj komendę:
/pokazTabele users

I pokaż co pokazał debugscript

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
[2015-10-17 17:42:31] INFO: TABELA: users LICZBA KOLUMN: 6
[2015-10-17 17:42:31] INFO: -KOLUMNA: haslo TYP: TEXT
[2015-10-17 17:42:31] INFO: -KOLUMNA: ranga TYP: INTEGER
[2015-10-17 17:42:31] INFO: -KOLUMNA: uprawnienia TYP: INTEGER
[2015-10-17 17:42:31] INFO: -KOLUMNA: blokady TYP: INTEGER
[2015-10-17 17:42:31] INFO: -KOLUMNA: elo TYP: INTEGER
[2015-10-17 17:42:31] INFO: -KOLUMNA: reporty TYP: INTEGER

Oto takie logi, nie wiem dlaczego nie "wczytuje" kolumny login, wow. Czyli muszę stworzyć nową tabelę i wtedy powinno to się naprawić? 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie ma tej kolumny w bazie ;)
Możesz ją dodać przez ALTER TABLE, ale jak nie chce  ci się bawić to zrób DROP TABLE users i od nowa CREATE wywołaj

Ehh stworzyłem nową tabelę i w konsoli wyświetla się: 
 

WARNING: panele/server.lua:32: dbPoll failed; no such column: login

Nie rozumiem na czym polega ten błąd... Inne kolumny są, a tej akurat nie ma mhm. 

Rozwiązałem ten problem:
po prostu jakimś dziwnym cudem ten skrypt nie wczytywał .db tylko tworzył nie wiem gdzie i nie wiem jak. Pomyślałem sobie - coś tu nie gra, więc zmieniłem wszystkie kolumny w bazie danych i użyłem eventu RJ45 do sprawdzania kolumn - zobaczyłem coś, co na pierwszy rzut oka nie mogłem zrozumieć bo kolumny nie były zgodne z tymi co są w bazie danych. Więc usunąłem plik .db i stworzyłem ten sam plik łącząc się z nim przez dbConnect oraz do skryptu podpiąłem tworzenie tabeli: 
 

local stworz = dbExec(conn,"CREATE TABLE IF NOT EXISTS users(login TEXT, haslo TEXT, uprawnienia INTEGER, ranga INTEGER, wygrane INTEGER, przegrane INTEGER, elo INTEGER, blokady INTEGER, reporty INTEGER)")

o dziwo zadziałało i wszystko już działa normalnie - plik konta.db się sam utworzył oraz tabela. Dzięki @RJ45 za pomoc. 

Edytowane przez MarkZuckBimber
Rozwiązanie

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×