Tagi na forum.

C# 1456 XML 282
SQL 1192 sieci 268
ASP.NET 785 IIS 262
Windows 726 C++ 255
web 608 Html 218
Visual Studio 515 Information Technology 193
SQL Server 425 MSDN 167

pokaż wszystkie tagi na forum

Logowanie na podstawie danych z bazy danych

Avicii 2012-02-09 00:48:47
0
avatar
 
 

Witam :)

Mam problem polegający na tym, że chce zrobić podstronę z motywem logowania.  Zrobiłem już podstronę odnośnie rejestracji użytkownika raczej nic skomplikowanego.  

 

protected void Button1_Click(object sender, EventArgs e)

{

string data = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString();

SqlDataSource1.InsertCommand = "INSERT INTO Uzyt (Imie, Login, Mail, Haslo) VALUES ('" + TextBox1.Text + "' , '" + TextBox2.Text + "', '" + TextBox3.Text + "', '" + TextBox4.Text + "')";

try

{ SqlDataSource1.Insert(); Label1.Text = "

Adres " + TextBox1.Text + TextBox2.Text + TextBox3.Text + TextBox3.Text + TextBox4.Text " został dodany do bazy danych (" + data + ")";

TextBox1.Text = "";

}

catch (Exception exc)

{ Label2.Text = "Dopisanie adresu e-mail do bazy danych nie powiodło się (" + data + ")"; Label2.Text += "
" + exc.Message + "
"

; }

 

Tak jak widać prosty system dodania rekordów do bazy danych.

Teraz natomiast na podstawie tych danych chciałbym zrealizować motyw z logowaniem np. wymagane podczas logowania podanie: Login i Hasło czyli pobranie z bazy danych tych informacji i dajmy na to po prawidłowych danych przekierowanie na stronę dostępnej dla osob wyłącznie zarejejestrowanych a nie dostepnej dla nie zarejestrowanych użytkowników. 

I właśnie nasuwa sie pytanie jak, z czym i w ogole to zrobić ? ;/

Bardzo bym prosił o pomoc...


Edytowano 2 razy. Ostatnio 2012-02-09 00:51:09 przez Avicii.
tagi: ASP.NET
Liczba postów:

dev4s  2012-02-09 08:04:26 #1
1
avatar
 
 

Co do hasła i nazwy użytkownika, przydałoby się by były one kodowane + salt'dodatkowo.

Wrzucasz na stronę 2 textbox'y + przycisk, po kliknięciu przycisku pobierasz informację z textbox'ów (sprawdzasz czy hasło i nazwa użytkownika zostały podane), następnie pobrane dane porównujesz z bazą danych (SELECT Login, Haslo FROM Uzyt WHERE Login LIKE 'Login' AND Haslo LIKE 'haslo') i później robisz przekierowanie na stronę. To tak najprościej.

"Lepiej" - wykorzystaj mechanizm membership, który jest wbudowany bezpośrednio w ASP.NET - będziesz miał dostęp do grup użytkowników, haseł, login'ów i innych.


Avicii  2012-02-09 09:57:21 #2
0
avatar
 
 

Ok dziekowa za bardzo szybką odpowiedz ;) 

Membership czy masz tu na myśli kontrolki z palety "login" ? typu loginName, CreateUserWizard itd. Jeżeli o to chodzi to już na nich pracowałem. Jednakże zasugerowano mi, że jest to zbyt łątwy mechanizm i dlatego probuje teraz zrobić motyw z reje i logowaniem tak jak m.in powyzej. Zaraz zaczne motyw z logowaniem i pokieruje sie twoja metoda ;) A jeszcze mam takie pytanko odnośnie dodawania czy zczytywania rekordow z bazy danych. Mianowicie w większosci poradach gdzies na stronkach przed skladnia Sql jest zapis o łączeniu z baza danych :

 

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BazaProjektConnectionString"].ConnectionString); 

 

Taki m.in przyklad znalazłem. Z czego co sie dowiedzialem to odpowiada ten zapis za łącznie z baza danych. Ale w moim przypadku nie jest chyba to konieczne bo pracuje na VWD 2010 a ten zapis chyba w starszych wersjach bylo trzeba stosowac. Bo bazy byly gdzie indziej tworzone. Popraw mnie jak sie myle ;p


Edytowano 2 razy. Ostatnio 2012-02-09 09:58:43 przez Avicii.
dev4s  2012-02-09 10:53:09 #3
0
avatar
 
 

Co do wykorzystania wbudowanego w ASP.NET membership:

http://www.asp.net/web-forms/tutorials/security/membership/validating-user-credentials-against-the-membership-user-store-cs

Standardowo connectionstring'i są zapisywane do pliku web.config lub app.config, a to wywołanie umożliwia dostanie się do nich. Dzięki temu nie musisz mieć "na sztywno" tego w kodzie, tylko w każdym momencie możesz się do tego odwołać :)


Avicii  2012-02-09 14:08:05 #4
0
avatar
 
 

Znalazłem coś takiego odnośnie tego logowania:

 

SqlConnection conn = new SqlConnection();

SqlCommand cmd = new SqlCommand("Select * from Uzyt where (Login='" + TextBox1.Text + "')and(Haslo='" + TextBox2.Text + "')", conn);

conn.Open();

using (SqlDataReader Areader = cmd.ExecuteReader())

{

if (!Areader.HasRows)//nie ma rekordów. Nie ma takiego konta 

{

 Session["Zalogowano"] = 0;//nie zalogowano 

Label1.Text = "Złe dane";

}

else

{

Label2.Text = "Zalogowano pomyślnie!";

Areader.Read();//odczyt rekordu string LoginS = Areader["Login"] + " " + Areader["Imie"]; //odczyt pól rekordu

Session["LoginImie"] = LoginS;

Session["Zalogowano"] = 1;

}

 

Tylko problem jest z połączeniem się z bazą bo wywala mi błędy w pierwszej częsci kodu początkowo od conn.Open(); 

Po usunięciu tego czepia sie (SqlDataReader Areader = cmd.ExecuteReader()). Jestem ciekaw czy musi to być zapisane w kodzie czy nie da się napisać prostrzej metody podobnie tak jak w INSERCIE zastosowałem.


Edytowano 2 razy. Ostatnio 2012-02-09 14:09:49 przez Avicii.
dev4s  2012-02-09 14:30:32 #5
0
avatar
 
 

Najprawdopodobniej masz uruchomione już połączenie do bazy danych, po każdym otwarciu (czyli wykonaniu sqlconnection()) warto jest zamknąć, lub ew. przekazać utworzony obiekt dalej (np. klasa Singleton do tego by się nadawała ;)), czyli we wcześniejszym albo użyjesz using() {}, albo będziesz zamykał połączenie.


Avicii  2012-02-09 15:47:55 #6
0
avatar
 
 

hmm... kurde programowanie nie jest moją mocną stroną... ;/ fajnie jakbyś chociaż tak mniej więcej zrobił taki mały zarys tego jak powinno to wyglądać. Bo znając życie bede znowu kombinował i nic z tego nie wyjdzie. Jestem ciekaw jednego gdy robiłem ten Insert to nie musiałem pisać tego połączenia sqlconnection(). i to mnie zastanawia kurcze kupiłem sobie ksiazke Technologie asp.net i ado.net w VWD. I chyba strata kasy bo to co potrzebuje do swojej pracy. inż. to akurat nie ma ;/ i dlatego szukam informacji po forach :) Dobrze, że chociaż ty mi pomagasz :) To tak na marginesie ;P Bo jeżeli zdecydować sie na te zakonczenie połączenia to jakby to wyglądalo? kurcze za duzo mam pytań ;/ heh


Avicii  2012-02-09 16:23:40 #7
0
avatar
 
 

przy conn.Open() wywala błąd "Właściwość ConnectionString nie została zainicjowana"  zaś jak usune conn.Open()  to właśnie wywala błąd na            using (sqlDataReader . . . cmd.ExecuteReadre) mianowicie "Element ExecuteReader wymaga otwartego i dostępnego połączenia (Connection). Obecny stan połączenia: zamknięte." Czyli jakby wymagał włąśnie tego conn.Open(). 


dev4s  2012-02-09 19:51:33 #8
0
avatar
 
 

(OFFTOPIC) Co do książek - polecam Visual Studio 2010 dla programistów C# - jedna z lepszych jakie do tej pory miałem ;)

1. Zarys, tego o co mi chodziło z SqlConnection:

using (SqlConnection connection = new SqlConnection(connectionString)) {

connection.Open();

Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);

Console.WriteLine("State: {0}", connection.State);

}

SqlConnection posiada (po klasie Component) mechanizm Dispose, dzięki czemu nie musisz pisać connection.Close() po każdym wywołaniu connection.Open(). Tutaj przede wszystkim chodzi o datareader'y.

2. Nie zauważyłem, że korzystasz z kontrolki SqlDataSource. W tym wypadku ona sobie z "automatu" kieruje połączeniami :)

3. Lepiej by było zrezygnować z dostępu od strony zapytań typowo "SQL"owych, i może zrobić to w postaci LinqToEntities? Byłoby ci wygodniej i szybciej :)


Edytowano 1 raz. Ostatnio 2012-02-09 19:52:10 przez dev4s.
marcin7777  2012-02-14 09:45:05 #8.1
0
avatar
 
 
logowanie watek z moim udziałem http://www.codeguru.pl/forum/watek/t,546672/#post547219

marcin7777  2012-02-14 09:47:38 #9
0
avatar
 
 

////NAJPROSTRZE DODAWANIE DO BAZY

 

try

{SqlConnection CN = null;

string conn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

CN = new SqlConnection(conn);

string sql = "INSERT INTO [TwojaTabela] ([cos],[cos2])VALUES(@cos,@cos2)";

SqlCommand cmd = new SqlCommand(sql, CN);

cmd.Parameters.Add(new SqlParameter("@cos1", (object)TextBox2.Text));

cmd.Parameters.Add(new SqlParameter("@cos2", (object)TextBox3.Text));

CN.Open();

cmd.ExecuteScalar();

CN.Close();

}

catch(Exception ex)

{

//wyłapujesz ewentualny błąd np:

label1.Text=ex.ToString();

}

finally{}


Edytowano 2 razy. Ostatnio 2012-02-14 09:52:05 przez marcin7777.
Avicii  2012-02-14 14:06:02 #10
0
avatar
 
 

ok dev4s to z tymi połączeniami mniej więcej już kapuje :P teraz pozostaje tylko mi te logowanie czyli żeby te dane z bazy mi sprawdziło. marcin7777 twój wątek z tego co widze to dotyczy edytowania tej  kontrolki Login. A ja własnie nie chce z tego korzystac bo widze ze tam troche kombinowania jest a na razie z moimi umiejetnosciami wole w to nie brnąć. Będę kombinował dalej z tym moim, czyli dwa texboxy, przycisk i z nich zczytanie inforamcji i porownaie ich z informacjami w bazie. Troszke miałem zastój przez weekend z kontynuowania mojego projektu. Ale zaraz sie za niego zabieram. 


Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony