23. februar 2006 - 09:44Der 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?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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
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?
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!
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...
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?
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); } } }
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.