webForumDet fria alternativet

Hjälp med simpelt loginscript

17 svar · 521 visningar · startad av Mika3l

Mika3lMedlem sedan nov. 20018 492 inlägg
#1

Hej!

Jag skulle behöva lite hjälp med ett simpelt loginscript som jag gjorde för att repetera lite granna.

<% @ Page Language="VB" %>

<script runat="server">
Sub skicka(obj As object, e as eventargs)
Dim strMinUser As String = "Mikael"
Dim strMittPass As String = "test"
If strUser Is strMinUser AND strPass Is strMittPass Then
Response.Redirect("test.aspx?page=inloggad")
Else
lblMessage.Text = "Fel användarnamn eller lösenord!<br><br>"
End If
End Sub
</script>
<html>
<head>
<title>Inloggning</title>
</head>
<body>

<%
Dim strPage As String = Request.QueryString("page")
Select Case strPage
Case ""
%>

<asp:label id="lblMessage" runat="server"/>
<form runat="server">
<table>
 <tr>
  <td>
Användarnamn:
  </td>
  <td>
<asp:textbox id="strUser" runat="server"/>
  </td>
 </tr>
 <tr>
  <td>
Lösenord:
  </td>
  <td>
<asp:textbox id="strPass" runat="server"/>
  </td>
 </tr>
 <tr>
  <td colspan="2">
<asp:button id="knapp" text="Logga in" onClick="skicka" runat="server"/>
  </td>
 </tr>
</table>
</form>

<%
Case "inloggad"
Response.Write("Du är inloggad!")
End Select
%>

</body>
</html>

Jag får inga felmeddelanden men jag blir aldrig inloggad.
Jag får meddelandet om att jag har skrivit fel användarnamn eller lösenord varje gång. :l
Jag vet att jag skriver rätt användarnamn och lösenord men jag får bara meddelandet hela tiden. :(

Någon som vet vad som kan vara fel?

/Mika3l

NETworkMedlem sedan juni 20011 732 inlägg
#2

Kan inte vb, men så här kanske?

If strUser[b].Text[/b] Is strMinUser AND strPass[b].Text[/b] Is strMittPass Then
Mika3lMedlem sedan nov. 20018 492 inlägg
#3

Det ville inte fungera. :(
Jag provade att sätta paranteser runt om också men det fungerade inte bättre det heller. :l

PatrikBMedlem sedan mars 20002 836 inlägg
#4

om du ändrar Is till =

cya,
PatrikB

Mika3lMedlem sedan nov. 20018 492 inlägg
#5

Jag har testat med = men då får jag ett felmeddelande där det står att jag ska ändra = till Is istället(tycker det verkar lite konstigt). :l

SweyMedlem sedan apr. 20003 971 inlägg
#6

If strUser = strMinUser And strPass = strMittPass Then

Du jämför två strängar med = (== i C#). Om inte det fungerar är det något annat som är fel.

Is jämför om två objekt är av samma typ. Eftersom båda objekten är av typen String kommer det uttrycket alltid vara sant.

Det ska INTE vara .Text efter strängens namn. Vad ditt fel beror på vet jag inte, men = ska du använda istället för Is.

NETworkMedlem sedan juni 20011 732 inlägg
#7

Jodå, nog måste det vara .Text alltid. strUser och strPass är ju textboxarnas id och även i vb så plockar man väl ut texten i textboxen med textboxensID.Text? Det är jag ganska så säker på. Det är ju texten i textboxen han vill jämföra med.

Fungerar detta?

If (strUser.Text = strMinUser AND strPass.Text = strMittPass) Then

...funkar det inte så lovar jag att krypa ned i min grotta igen och aldrig mer svara i en vb.net-tråd! :)

NETworkMedlem sedan juni 20011 732 inlägg
#8

Tillägg.

Den här case-satsen som du kör i koden förstår jag inte riktigt... eftersom casevillkoret inte uppfylls när du loggas in så kommer ju textboxarna att försvinna helt så fort du postar tillbaka till servern och då kanske du inte heller kan jämföra med innehållet i dem. Åtminstone inte om den koden exekveras innan din skicka-funktion. En tori bara, vet inte om det stämmer men det kan vara värt att prova.

Prova att plocka ut querystringen i koden istället och fylla en label huruvuda du är inloggad eller inte... och sätt en panel runt inloggningsformuläret som du döljer när du är inloggad.

Känns lite för mycket gammal asp om din lösning annars... *attjo*

;)

NETworkMedlem sedan juni 20011 732 inlägg
#9

Och ett tips också:

Jag använder response.write hela tiden för att skriva ut variabler och kolla att loppar och if-satser exekveras som det är tänkt, det är lätt att missa vad en variabel verkligen innehåller. Skriv förslagsvis ut dina variabler så får du svart på vitt vad du jämför med!

juventus1Medlem sedan dec. 2000399 inlägg
#10

Gör som NETwork säger men (sista inlägget) men använd hellre trace. Då behöver man ju inte städa tills nästa gång...

Mika3lMedlem sedan nov. 20018 492 inlägg
#11

Trace?
Städa?

/Mika3l - *Nybörjare* :stud :p

juventus1Medlem sedan dec. 2000399 inlägg
#12

Ok, ska försöka förklara med ett exempel.

<%@ Page Language="VB" Trace="true"%>
<script runat="server">
Sub skicka(obj As object, e as eventargs)
Dim strMinUser As String = "Mikael"
Dim strMittPass As String = "test"
Trace.Warn("username=", strMinUser) 'Skriver ut innehållet i
strMinUser med röd text längst ned på sidan!
Trace.Warn("password=", strMittPass) 'Samma här
If (strUser = strMinUser) AND (strPass = strMittPass) Then
Response.Redirect("test.aspx?page=inloggad")
Else
lblMessage.Text = "Fel användarnamn eller lösenord!<br><br>"
End If
End Sub
</script>
mer kod...

Nu kommer du längst ner på sidan se en massa information. En del är lite kryptiskt men leta bara efter den röda text :)
När du sedan hittat buggen är allt du behöver göra att i Page-direktivet ta bort Trace="true". Du behöver alltså inte städa upp efter att ha debuggat vilket man måste göra med Response.Write... Hoppas det klarnar något....

Red: lite väl mycket C# smög sig in i VB-koden...

Mika3lMedlem sedan nov. 20018 492 inlägg
#13

Jag får det inte att fungera. :l
Jag ser den röda texten och username=Mikael, password=test men jag blir fortfarande inte inloggad! :(

<%@ Page Language="VB" Trace="true"%>
<script runat="server">
Sub skicka(obj As object, e as eventargs)
Dim strMinUser As String = "Mikael"
Dim strMittPass As String = "test"
Trace.Warn("username=", strMinUser) 'Skriver ut innehållet i strMinUser med röd text längst ned på sidan!
Trace.Warn("password=", strMittPass) 'Samma här
If (strUser Is strMinUser) AND (strPass Is strMittPass) Then
Response.Redirect("text.aspx?page=inloggad")
Else
lblMessage.Text = "Fel användarnamn eller lösenord!<br><br>"
End If
End Sub
</script>
<html>
<head>
<title>Inloggning</title>
</head>
<body>

<%
Dim strPage As String = Request.QueryString("page")
Select Case strPage
Case ""
%>

<asp:label id="lblMessage" runat="server"/>
<form runat="server">
<table>
 <tr>
  <td>
Användarnamn:
  </td>
  <td>
<asp:textbox id="strUser" runat="server"/>
  </td>
 </tr>
 <tr>
  <td>
Lösenord:
  </td>
  <td>
<asp:textbox id="strPass" runat="server"/>
  </td>
 </tr>
 <tr>
  <td colspan="2">
<asp:button id="knapp" text="Logga in" onClick="skicka" runat="server"/>
  </td>
 </tr>
</table>
</form>

<%
Case "inloggad"
Response.Write("Du är inloggad!")
End Select
%>

</body>
</html>
NETworkMedlem sedan juni 20011 732 inlägg
#14

Har du provat att göra som jag sa och ta bort den där case-satsen som du använder? Jag tror inte riktigt på den... om du ska använda case så ska du göra det i koden, inte löpande i layouten. Dessutom har du en label utanför formtaggen, alla asp.net-taggar bör vara innanför formtaggen!

Helt rätt också det där om trace, det är en riktigt bra feature för felsökning, exempelvis om du behöver optimera prestanda på en applikation... men på små sidor, om du bara vill skriva ut en variabel eller två, så klarar man sig rätt bra med en gammal hederlig response.write också. :)

juventus1Medlem sedan dec. 2000399 inlägg
#15

Ok här kommer ett exempel på lite trevligare kod:

<%@ Page Language="VB" Trace="true"%>
<script runat="server">
protected sub Page_Load (obj As object, e as eventargs)
	if Page.IsPostBack then
		Const username As String = "Mikael"
		Const password As String = "test"
	
		Trace.Warn("username=", Request.Form("username")) 
		Trace.Warn("password=", Request.Form("password"))
		
		if (Request.Form("username") = userName) and (Request.Form("password") = password) then
			lblMessage.Text = "Inloggad och glad!"
		else
			lblMessage.Text = "Fel lösenord eller användarnamn!"
		end if
	end if
end sub
</script>
<html>
<head>
<title>Inloggning</title>
</head>
<body>
<asp:label id="lblMessage" runat="server" />
<form method="post" runat="server">
<table>
<tr>
<td>
Användarnamn:
</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>
Lösenord:
</td>
<td>
<input type="text" name="password">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="logga in">
</td>
</tr>
</table>
</form>
</body>
</html>

(html-indenteringen försvann för att man ska slippa scrolla så..)

Jag har tagit mig friheten att ändra struktur samt ta bort några serverkontroller som, i det här sammanhanget, bara sög prestanda. Formuläret måste dock fortfarande köras på servern för att Page.IsPostBack ska kunna användas. Hoppas du får en ide om hur man kan göra.

Mika3lMedlem sedan nov. 20018 492 inlägg
#16

Jag kollade igenom koden och den såg bra ut :) , men vad är protected(innan Sub) och Const?

Jag får väl fortsätta att läsa min bok och kolla om det inte står någonting om det i det sista kapitlet av webbformulär. :stud

juventus1Medlem sedan dec. 2000399 inlägg
#17

Const betyder att man inte kan ändra på värdet i 'username' och 'password'. Protected är en skyddsnivå. Här hade man kunnat använda 'public', 'protected' eller 'private' med samma resultat. Om du vill lära dig alla detaljer så kolla i dokumentation.

Mika3lMedlem sedan nov. 20018 492 inlägg
#18

Jo, jag läste lite om public igår men om jag ska vara ärlig så fattar jag knappt vad som menas i min bok just nu. :l

144 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)