Avatar billede spottie Nybegynder
23. februar 2006 - 09:44 Der er 11 kommentarer og
1 løsning

Hjælp til spørgsmål omkring "rows" og login funktion?

Goddag eksperter

Jeg har følgende kode:
-------------------------------------------------------------
//Min "conn string" virker, men er ikke med.
private void button11_Click(object sender, System.EventArgs e)
{
string query = "SELECT a_user, a_passwd FROM ansat";
           
MySqlDataAdapter adapter = new MySqlDataAdapter(query,conn);
           
DataSet ds = new DataSet();
           
adapter.Fill(ds);

DataTable dt = ds.Tables[0];

foreach(DataRow dr in dt.Rows)
{
if(dr["a_user"].ToString() == textBox9.Text.ToString() && dr["a_passwd"].ToString() == textBox10.Text.ToString())
{
textBox1.Text = "Hej".ToString();
}
else
{
textBox9.Clear();
textBox10.Clear();
MessageBox.Show("Du har indtastet forkert brugernavn eller password", "Kontrol",MessageBoxButtons.OK);
}       
}
}
---------------------------------------------------------------
1) Det som er problemet er at hvis jeg indtaster en forkert user eller password som ikke matcher databasen får jeg fint boksen der frem, men hvis jeg skriver det rigtige får jeg både text i textbox 1 og den der boks, så jeg tænkte på om man kan lave udtræk fra en row på en anden måde end med foreach eller er det slet ikke foreach der laver ballede i denne stykke kode?

2) Hvordan kunen en login funktion ellers se ud?

Håber på lidt hjælp.

vh spottie
Avatar billede kalp Novice
23. februar 2006 - 09:47 #1
er ikke inde i c# endnu... men lyder som om du i denne

if(dr["a_user"].ToString() == textBox9.Text.ToString() && dr["a_passwd"].ToString() == textBox10.Text.ToString())
{
textBox1.Text = "Hej".ToString();
}

skal tilføje noget textBox9.setVisible(false);
og til box10 også..

nu ved jeg ikke om metoden findes som i java.. men mon ikke der er en erstatning
Avatar billede dr_chaos Nybegynder
23. februar 2006 - 09:47 #2
prøv med

if(ds.Tables[0].Rows.Count > 0)
{
DataRow dr = ds.Tables[0].Rows[0];

if(dr["a_user"].ToString() == textBox9.Text.ToString() && dr["a_passwd"].ToString() == textBox10.Text.ToString())
{
textBox1.Text = "Hej".ToString();
}
else
{
textBox9.Clear();
textBox10.Clear();
MessageBox.Show("Du har indtastet forkert brugernavn eller password", "Kontrol",MessageBoxButtons.OK);
}     
}
Avatar billede dr_chaos Nybegynder
23. februar 2006 - 09:49 #3
grunden til at du får tingene frem på den måde er p.ga du bruger en foreach sætning.
i første gennemløb opfylder den første krav og i anden gennemløb opfylder den din if sætning
Avatar billede spottie Nybegynder
23. februar 2006 - 10:28 #4
ja det virker men ikke optimalt fordi da jeg prøvede dit eksempel så kan den kun tage den første række i mysql database udtrækket, hvis jeg skriver de korrekte oplysninge rind som login fra databasen som jeg ved er korrekte får jeg fejl boxen og sletter jeg så den første række og prøver igen logger den fint ind så ptoblemet er at denk un kan logge den første række ind, hvad kan afhjælpe dette problem kodemæssigt?
Avatar billede dr_chaos Nybegynder
23. februar 2006 - 10:53 #5
Det bør jo altid være den første række som er den korrekte.
Det sikrer du ved at sørge for at brugernavn er unikt.
Avatar billede dr_chaos Nybegynder
23. februar 2006 - 10:55 #6
sorry så ikke lige din sqlsætning.
prøv med

string query = "SELECT a_user, a_passwd FROM ansat WHERE a_user='"+textBox9.Text+"' AND a_passwd='"+textBox10.Text+"'";
Avatar billede clausc Nybegynder
23. februar 2006 - 12:00 #7
Et par mavesure kommentarer:
* det er meget dårlig skik at gemme passwords i klartekst - gem en hash istedet
* det er dårlig skik at bygge sql direkte fra textbokse - brug parametre!
Avatar billede spottie Nybegynder
23. februar 2006 - 12:43 #8
private void button11_Click(object sender, System.EventArgs e)
{           
string query = "SELECT a_user, a_passwd FROM ansat WHERE a_user LIKE '"+textBox9.Text+"' AND a_passwd LIKE '"+textBox10.Text+"'";
           
MySqlDataAdapter adapter = new MySqlDataAdapter(query,conn);
           
DataSet ds = new DataSet();
           
adapter.Fill(ds);

DataTable dt = ds.Tables[0];

if(ds.Tables[0].Rows.Count > 0)
{
DataRow dr = ds.Tables[0].Rows[0];
               
if(dr["a_user"].ToString() == textBox9.Text && dr["a_passwd"].ToString() == textBox10.Text)
{
textBox1.Text = "Hej";
}
else
{
textBox9.Clear();
textBox10.Clear();
MessageBox.Show("Du har indtastet forkert brugernavn eller password", "Kontrol",MessageBoxButtons.OK);
}     
}
}
----------------------------------------------------------------------------------
Sådan ser min login funktion ud, men problemet er at den ikke går ned i else sætningen hvis man skriver forkert brugernavn eller password, men skrive rman det rigtige skriver den fint og korrekt hej ud...

Hvad kan være galt?
Avatar billede spottie Nybegynder
23. februar 2006 - 12:44 #9
clausc... ja ved godt med password men det er bare test ved godt de skal krypteres og lign.
Hvad mener du med parametre i sql sætninger, kan du give et eksempel?
Avatar billede dr_chaos Nybegynder
23. februar 2006 - 13:03 #10
du kan ændre den så den ser ud på denne måde:

private void button11_Click(object sender, System.EventArgs e)
{         
string query = "SELECT a_user, a_passwd FROM ansat WHERE a_user LIKE '"+textBox9.Text+"' AND a_passwd LIKE '"+textBox10.Text+"'";
         
MySqlDataAdapter adapter = new MySqlDataAdapter(query,conn);
         
DataSet ds = new DataSet();
         
adapter.Fill(ds);

DataTable dt = ds.Tables[0];
//hvis der er fundet en row logges brugeren på
if(ds.Tables[0].Rows.Count ==1)
{
textBox1.Text = "Hej";
}
else
{
textBox9.Clear();
textBox10.Clear();
MessageBox.Show("Du har indtastet forkert brugernavn eller password", "Kontrol",MessageBoxButtons.OK);
}   
}
}
Avatar billede clausc Nybegynder
23. februar 2006 - 13:34 #11
I .Net Framework dokumentationen se "Parameters Collection" - der er et fint eksempel.

Parameters gør bl.a. formatering af dato til en leg (og SQL injection er langt sværere)
Avatar billede spottie Nybegynder
06. april 2006 - 16:11 #12
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester