Just nu i M3-nätverket
Jump to content

login-funktion


puttewickstrom

Recommended Posts

puttewickstrom

Jag har problem med koden nedan. Den rödmarkerade raden i koden ger felet: System.NullReferenceException: Objektreferensen har inte angetts till en instans av ett objekt. Hur löser jag detta?

 

<%@ Import NameSpace="System.Data" %>
<%@ Import NameSpace="System.Data.SqlClient" %>
<%@ Page Language="C#" debug="true" %>
<html>
 <body>
   <h1>Login</h1>
   <hr>
   <form runat="server">
  <table cellpadding="8">
   <tr>
     <td>
       User Name:
     </td>
     <td>
       <asp:TextBox ID="UserName" RunAt="server" />
     </td>
   </tr>
   <tr>
     <td>
       Password:
     </td>
     <td>
       <asp:TextBox ID="Password" RunAt="server" />
     </td>
   </tr>
   <tr>
     <td>
      <asp:Button Text="Submit" OnClick="OnSubmit" RunAt="server" />
     </td>
     <td>
       <asp:CheckBox Text="Remember me" ID="RememberMe" RunAt="server" />
     </td>
   </tr>
 </table>
</form>
   <hr>
   <h3><asp:Label ID="Output" RunAt="server" /></h3>
 </body>
</html>

<script language="C#" runat="server">

void OnSubmit(Object sender, EventArgs e){
if(authentCheck() > 0){
	FormsAuthentication.SetAuthCookie(UserName.Text, false);
	Response.Redirect("secret/inloggad.aspx");
}
else{
	Response.Redirect("loginpage3.aspx?error=true");
}
}

int authentCheck(){
string connectionString = "Server=localhost;Database=XX;uid=XX;pwd=XX;;";
SqlConnection objConn = new SqlConnection(connectionString);

string queryString = "SELECT * FROM users WHERE username = '" + UserName.Text + "' AND password = '" + Password.Text + "'";
SqlCommand sqlCommand = new SqlCommand(queryString, objConn);

objConn.Open();
[color="#ff0000"]	Int32 count = (Int32)sqlCommand.ExecuteScalar();[/color]

objConn.Close();

return count;
}

</script>

[inlägget ändrat 2009-01-08 13:12:17 av puttewickstrom]

Link to comment
Share on other sites

Username och password är väl reserverade ord i din databas (ms)?

 

Testa:

"SELECT * FROM users WHERE [username] = '" + UserName.Text.Replace("'", "''") + "' AND [password] = '" + Password.Text.Replace("'", "''") + "'";

 

Och din sql-sats nu är väldigt öppen för s.k. sql injections, därav min replace av enkelfnuttar.

 

Link to comment
Share on other sites

Hmm, kollade igenom igen och en anledning till att du får null är väl att du får ett tomt resultat från frågan. ExecuteScalar returnerar ju första kolumnen i första raden utifrån frågan. Och det returneras som ett objekt så om den inte hittar användaren så returneras således null. Du döper variabeln till "count". Vet inte varför du gör detta för ofta är första kolumnen id:t.

 

Gör en check på objektet du får tillbaka.

 

object obj = sqlCommand.ExecuteScalar();

if (obj == null)

{

// hittade inte användaren

}

else

{

// record found, do proper casting like:

int userID = (int)obj;

}

 

Link to comment
Share on other sites

puttewickstrom

Jag tackar så mycket för detta!

Scriptet du förmedlade funkade inte "out of the box", kommer inte ihåg vilket felmeddelande jag fick, men det gav mig väldigt god ledning!

 

int check = 0;

object obj = sqlCommand.ExecuteScalar();

 

if (obj == null){

check = 0;

}

else{

check = 1;

}

 

return check;

 

hade nog funkat med en bool också. Tack så mycket för hjälpen!

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...