Just nu i M3-nätverket
Jump to content

Typblandningsfel i villkorsuttryck.


Sharingan

Recommended Posts

Tjenare.

 

Jag skall visa profilen för en användare inne på min sida, men jag får detta felet:

 

Feltyp:

Microsoft JET Database Engine (0x80040E07)

Typblandningsfel i villkorsuttryck.

/community/userInfo.asp, line 25

 

Här nedan är koden:

 

[log]

<%

 

' Deklarerar värderna.

Dim objConn

Dim strConn

Dim strSQL

Dim rstUser

 

' Vi skapar en databaskoppling

Set objConn = server.CreateObject("ADODB.Connection")

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/community.mdb")

objConn.Open strConn

 

' Vi skapar en sql-sträng

strSQL = "SELECT userID FROM tblUsers WHERE userID ='"& Request.QueryString("userID") &"'"

 

' response.write strSQL

' response.end

 

' Vi skapar en recordset och öppnar den

Set rstUser = Server.CreateObject("ADODB.Recordset")

rstUser.Open strSQL, objConn, 3, 3

 

%>[/log]

 

Här är linje 25:

rstUser.Open strSQL, objConn, 3, 3

 

Men jag läste igenom de gamla forums inläggen och där står det att man skulle ändra SQL-strängen och jag gjorde det då fick jag bara nya fel medelanden, jag skriver med de olika metoderna jag testat och vilket felmedlande jag fick:

 

Metod 1 (ta bort ')

strSQL = [GRÅ]"SELECT userID FROM tblUsers WHERE userID ="[/GRÅ]& [b]Request[/b].QueryString([GRÅ]"userID"[/GRÅ]) &[GRÅ]""[/GRÅ]

Felmedlande 1:

Syntaxfel (operator saknas) i frågeuttrycket 'userID ='.

 

Metod 2 (lägg till cint())

strSQL = [GRÅ]"SELECT userID FROM tblUsers WHERE userID ="[/GRÅ]& [color="#0000ff"]Cint[/color]([b]Request[/b].QueryString([GRÅ]"userID"[/GRÅ])) &[GRÅ]""[/GRÅ]

Felmedelande 2:

Inkompatibla typer: 'cint'

 

Metod 3 (lägg till clng())

strSQL = [GRÅ]"SELECT userID FROM tblUsers WHERE userID ="[/GRÅ]& [color="#0000ff"]CLng[/color]([b]Request[/b].QueryString([GRÅ]"userID"[/GRÅ])) &[GRÅ]""[/GRÅ]

Felmedelande 3:

Inkompatibla typer: 'CLng'

 

Ville bara se om någon kanske har ett förslag på något annat jag kan prova?

 

MVH//pundus

 

[inlägget ändrat 2006-04-17 18:54:28 av Sharingan]

Link to comment
Share on other sites

Micke_skane

Har du testat att skriva ut din QueryString("userID") för att se så att den innehåller ett tal(värde)?

 

Sen räcker det med att använda det så här OM det är ett tal i QueryStringen:

strSQL = "SELECT userID FROM tblUsers WHERE userID ="& CLng(Request.QueryString("userID"))

 

MEN jag hade lagt in värdet i en variabel för att först kolla så att det verkligen är ett tal innan man kör en databasfråga.

Det ska man göra för att skydda sig mot nått som kallas sql-injection.

 

 

Link to comment
Share on other sites

När du menar att jag skall skriva ut den, menar du ngt sånt här då ?

 

response.write QueryString("userID")

response.end

 

 

 

Link to comment
Share on other sites

Micke_skane

Att du har kraschat hela servern!

Det blir en dyr historia för dig!!!

Nä, skojar bara med dig :)

 

Om du visar lite kod så är det lättare att se hur det ser ut.

Är det mycket kod så lägg det inom LOG-taggarna! :)

 

Link to comment
Share on other sites

Haha ;D

 

Jag har reda lagt in koden iofs däruppe inom log tagar men jag kan lägga in den igen, den kommer här nedan:

 

[log]<%

 

' Deklarerar värderna.

Dim objConn

Dim strConn

Dim strSQL

Dim rstUser

Dim qsID

 

' Vi skapar en databaskoppling

Set objConn = server.CreateObject("ADODB.Connection")

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/community.mdb")

objConn.Open strConn

 

'qsID = cint(Request.QueryString("userID"))

 

' Vi skapar en sql-sträng

strSQL = "SELECT userID FROM tblUsers WHERE userID = "& Request.QueryString("userID")

 

Response.Write Request.QueryString("userID")

Response.End

 

' Vi skapar en recordset och öppnar den

Set rstUser = Server.CreateObject("ADODB.Recordset")

rstUser.Open strSQL, objConn, 3, 3

 

%>

 

<html>

<head>

<title>Andvändarninfo</title>

</head>

<body>

 

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="47%" height="196">

<tr>

<td width="10%" height="1" rowspan= "5"><img src="<%=rstUser("userPictureURL")%>" width="78" height="110" hspace="0" style="padding: 0"></td>

<td width="90%" height="1">Namn: <%=rstUser("userFullName")%></td>

</tr>

 

<tr>

<td width="90%" height="21">Email: <%=rstUser("userEmail")%></td>

</tr>

<tr>

<td width="90%" height="21">Poäng: <%=rstUser("userPoints")%></td>

</tr>

<tr>

<td width="90%" height="10">Senast inloggad: <%=rstUser("userLoginLatest")%></td>

</tr>

<tr>

<td width="90%" height="10">Reggad: <%=rstUser("userRegisrerad")%></td>

</tr>

<tr>

<td width="90%" height="5">

<b><br><%

 

if rst("userLoginStatus") = "1" Then

 

%>

<font color="#008000">Online</font>< br> <%

else

%>

<font color="#FF0000">Offline</font>

<%

end if

%>

</b>

</td>

</tr>

<tr>

<td width="10%" height="102">&nbsp;</td>

<td width="90%" height="102" valign="top">Presentation:<br><%=rstUser("userPresentation")%></td>

</tr>

</table>

<%

If Request.QueryString("userID") = Session("userID") Then

%>

<a href="userInfoEdit.asp">Ändra din profil</a>< br><%

end if

%>

 

</body>

</html>

 

<%

 

' Vi stänger och frigör rs och databaskopplingen

objConn.Close

rstUser.Close

Set rstUser = nothing

Set objConn = nothing

 

%>[/log]

 

Link to comment
Share on other sites

Micke_skane

Ja, jag såg det nu :)

Tittade inte så noga men den visade iof inte hur du hade gjort Nu.

 

Prova att skriv ut strSQL:n istället för att se vad den innehåller.

Det såg rätt ut annars så varför det bara blev en vit sida kan jag inte svara på just nu.

 

Link to comment
Share on other sites

Okej, så här skriver den ut:

 

SELECT userID FROM tblUsers WHERE userID =

 

är det att den inte hittar ID nummret?

 

Link to comment
Share on other sites

Hängde inte riktigt med på vad du menade nu, men jag antog att det var denna du letade efter?

 

If Request.QueryString("userID") = Session("userID") Then

 

den ligger längst ner i koden, här resterande kod som kommer efter den raden:

 

[log]<%

If Request.QueryString("userID") = Session("userID") Then

%>

<a href="userInfoEdit.asp">Ändra din profil</a>< br><%

end if

%>

 

</body>

</html>

 

<%

 

' Vi stänger och frigör rs och databaskopplingen

objConn.Close

rstUser.Close

Set rstUser = nothing

Set objConn = nothing

 

%>[/log]

 

Link to comment
Share on other sites

Micke_skane
Hängde inte riktigt med på vad du menade nu, men jag antog att det var denna du letade efter?

Nopp! Den menade jag inte :)

 

Vilken sida har du innan denna sidan?

För på den sidan måste du ju ha en länk till denna sidan.

Och i den länken måste det "hängas" på ett värde till QueryStringen userID.

 

Typ så här:

<a href="dennasida.asp?userID=<%=nått värde%>">Klicka här</a>

 

Visa koden på Den sidan och speciellt länken till denna sidan.

 

Link to comment
Share on other sites

Aha okej, min main sida ;D

 

Den har jag inte kommit så långt med, men jag har länkat den såhär:

 

<a href=[GRÅ]"userInfo.asp?userID="[/GRÅ] & Session([GRÅ]"userID"[/GRÅ]) & ">Din profil</a>

[inlägget ändrat 2006-04-17 23:28:04 av Sharingan]

Link to comment
Share on other sites

Micke_skane

Misstänker att du INTE skriver ut länken med Asp-kod utan länken är ren html-kod och då har du inte skiljt på html och Asp koden i din länk.

 

Ändra till:

<a href=[GRÅ]"userInfo.asp?userID=<%=Session("[/GRÅ]userID[GRÅ]")%>"[/GRÅ]>Din profil</a>

 

<% Mellan dessa taggar skriver man Asp-kod %>

 

Hade en " för mycket i koden.

Kolla nu så att Session("userID") har ett värde :)

 

[inlägget ändrat 2006-04-17 23:37:23 av Micke_skane]

Link to comment
Share on other sites

Okej, har ändrat det nu, men fungerar fortafarande inte, har dock fått ett nytt felmedelande nu :P

 

Microsoft JET Database Engine (0x80040E14)

Syntaxfel (operator saknas) i frågeuttrycket 'userID ='.

/community/userInfo.asp, line 18

 

Jag vet inte om det säger dig ngt, men om du har något förslag kan du skriva det så skall jag kolla det imorgon. Måste dra mig nu, men du skall ha ett stort tack för all hjälp idag. Sätter självklart poäng till dig.

 

MVH//pundus

 

Link to comment
Share on other sites

Micke_skane

Det betyder att Request.QueryString("userID") fortfarande inte har ett värde.

Prova att skriv ut Session("userID") och se vad den innehåller.

 

Innehåller den ett tal-värde så gör här på userInfo.asp sidan:

qsID = [b]Request[/b].QueryString([GRÅ]"userID"[/GRÅ])
[color="#0000ff"]If[/color] qsID=[GRÅ]""[/GRÅ] [color="#0000ff"]Then[/color]
  qsID=[GRÅ]"gummislang"[/GRÅ]
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

Skriv sen ut din strSQL och se hur den ser ut:

strSQL = [GRÅ]"SELECT userID FROM tblUsers WHERE userID = "[/GRÅ]& qsID
[b]Response[/b].Write strSQL
[b]Response[/b].[color="#0000ff"]End[/color]

 

Kollar imorgon hur det gått.

 

Tackar för poängen :thumbsup:

 

[inlägget ändrat 2006-04-17 23:57:00 av Micke_skane]

Link to comment
Share on other sites

Tjenare provade det du skrev igår, mitt reslutat blev detta:

 

När jag satta qsID = gummislang

 

och skrev ut strSQL fick jag detta:

 

SELECT userID FROM tblUsers WHERE userID = gummislang

 

Och när jag skrev in:

 

Response.Write Session("userID")

Response.End

 

Fick jag inte fram ngt alls.

 

Link to comment
Share on other sites

Micke_skane
När jag satta qsID = gummislang

Du hade väl med hela If-satsen?

Annars blir det tokigt :)

 

För om du hade det så som jag skrev plus att det inte blev något utskrivit med Response.Write Session("userID") så är det överbevisat att du inte har något värde i din Session-variabel.

 

Var försöker du sätter dit värdet i första läget?

Är det vid inloggningen?

Visa stället med den kodsnutten.

 

"Gummislangen" var bara för skojs skull :)

Såg rätt kul ut...

 

Link to comment
Share on other sites

Ja jag använde all kod du skrev, även if satsen.

 

Hmm vad jag kan se så används session("userID") första gången vid inloggningen jag, jag lägger in den koden här.

 

[log]<%

 

' Request.Querystring, det finns i formuläret som kommer längre ner.

if Request.QueryString("action") = "login" then

 

' Deklarar värderna

Dim objConn

Dim strConn

Dim strSQL

Dim strLoginName

Dim strPassword

Dim rstUser

 

' Deklarera variabler för inloggningsnamn och lösenord och ogiltiga tecken i ASP.

strLoginName = Replace(Request.Form("fldLoginName"), " '", "''")

strPassword = Replace(Request.Form("fldPassword"), " '", "''")

strLoginName = Replace(strLoginName, "%", "")

strPassword = Replace(strPassword, "%", "")

 

' Skapa databaskopplingen i detta fall ligger den i en mapp som heter "db"

Set objConn = server.CreateObject("ADODB.Connection")

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/community.mdb")

objConn.Open strConn

 

' Kontrollerar från formuläret inloggningen så att den stämmer med databasens info.

strSQL = ""

strSQL = strSQL & "SELECT userID, userLoginName, userEmail, userFullName FROM tblUsers "

strSQL = strSQL & "WHERE userLoginName = '" & strLoginName & "' AND userPassword = '" & strPassword & "'"

 

' Öppnar recordset

Set rstUser = Server.CreateObject("ADODB.Recordset")

rstUser.Open strSQL, objConn, 3, 3

 

' Om det blev fel inloggning.

if (rstUser.EOF or rstUser.BOF) then

 

' Skicka tillbaka användaren till inloggninssidan med ett meddelande.

Session("message") = "<font color=""red"">Misslyckad inloggning.<br>Försök igen</font>"

Response.Redirect("login.asp")

 

' Inloggningen lyckades

else

 

Response.Write(strSQL)

 

' Deklarera sessions som är ett smidigare sätt.

Session("userID") = rstUser(0)

Session("userLoginName") = rstUser(1)

Session("userEmail") = rstUser(2)

Session("userFullName") = rstUser(3)

 

' Uppdatera information om användaren

strSQL = ""

strSQL = strSQL & "UPDATE tblUsers SET "

strSQL = strSQL & "userLoginStatus = 1, " 'Användaren är inloggad

strSQL = strSQL & "userLoginLatest = #" & Now() & "#, " 'Användarens senaste inloggning

strSQL = strSQL & "userPoints = userPoints+2 " 'Man får 2 poäng för att logga in

strSQL = strSQL & "WHERE userID = " & Session("userID")

objConn.Execute(strSQL)

 

' Sedan efter allt, skickas tillbaka till startsidan.

Response.Redirect("main.asp")

 

End if

 

'Stäng recordset och databaskopplingen.

rstUser.Close

Set rstUser = nothing

objConn.Close

Set objConn = nothing

 

' Stänger End IF.

end if

 

%>

 

<html>

<head>

<title>Inloggning</title>

</head>

<body>

 

<div align="center">

 

<%=Session("message")%>

 

// Ni ser att formuläret går till "action=login"

<form name="frmLogin" method="post" action="login.asp?action=login">

 

// Skapar textruta till användarnamnet.

Användarnamn: <input type="text" name="fldLoginName"><br>

 

// Skapar textruta till lösenordet

Lösenord: <input type="password" name="fldPassword"><br>

 

// Skapar knappen.

<input type="submit" value="Logga in">

</form>

 

<a href="register.asp">Registrera dig här</a>

</div>

 

</body>

</html>[/log]

 

Det jag tycker är konstig är att i write_gb.asp, som du hjälpte mig med igår oxå så funkar denna raden och den får ett id:

 

qsId = CLng(Request.QueryString("userID"))

 

Men den raden funkar inte i userInfo.asp för att få ett id och CLang är ogiltligt, även så cint. Vet du möjligt varför?

 

Link to comment
Share on other sites

Micke_skane

Vet inte riktigt uppbyggnaden i sidorna som du har och när allt faller in men för att Session("userID") ska få ett värde måste du logga in med korrekta värden.

Om du provar att skriva ut variabeln+fältvärdet direkt efter du loggat in så ser du om den får ett värde då.

Skriv även ut Session-variabeln+fältvärdet för loginnamnet.

 

Alltså såhär:

' Inloggningen lyckades
else

Response.Write(strSQL)

' Deklarera sessions som är ett smidigare sätt.
Session("userID") = rstUser(0)
Session("userLoginName") = rstUser(1)

Response.Write Session("userID")&"<br />"
Response.Write rstUser(0)&"<br /><br />"
Response.Write Session("userLoginName")&"<br />"
Response.Write rstUser(1)
Response.End

 

Vad händer då?

 

Kommer inte vara vid datorn nu på ett tag.

Kollar senare!

 

Link to comment
Share on other sites

Okej, men här är min reslutat av det jag skrev in:

 

' Inloggningen lyckades
 else

 Response.Write(strSQL)

' Deklarera sessions som är ett smidigare sätt.
 Session("userID") = rstUser(0)
 Session("userLoginName") = rstUser(1)

 Response.Write Session("userID")&"<br />"
 Response.Write rstUser(0)&"<br /><br />"
 Response.Write Session("userLoginName")&"<br />"
 Response.Write rstUser(1)
 Response.End

 

Då fick jag följande medelande:

 

SELECT userID, userLoginName, userEmail, userFullName FROM tblUsers WHERE userLoginName = 'pundus' AND userPassword = '*********'2
2

pundus
pundus

 

 

Jag provade än denna koden för att se om querystringen är numerinsk:

 

qsUserID = Request.QueryString("userID")

' Kontrollera om det är en numerisk querystring, annars så skicka tillbaka till startsidan
 if not IsNumeric(qsUserID) then Response.Redirect("main.asp")

 

Resultat blev att jag bara hamnar på main.asp hela tiden.

 

Link to comment
Share on other sites

Micke_skane

Okej,

Då får vi nog summera ihop det lite :)

 

Inloggnigssidan:

På din sida med inloggning så sätter du värdet på Session("userID").

Och det blir 2 i detta fallet.

Är fältet i databasen av datatypen tal?

Och din UPDATE-körning på databasen blir rätt, utan något felmeddelande?

Sen åker man vidare till main-sidan.

 

Mainsidan:

Där har du en länk som är så här:

<a href=[GRÅ]"userInfo.asp?userID=<%=Session("[/GRÅ]userID[GRÅ]")%>"[/GRÅ]>Din profil</a>

Vad finns där mer på sidan, innan denna länk?

Vad händer om du enbart skriver ut din Session("userID") på den sidan?

Så här: Värde: <%=Session("userID")%>

Du kan även testa att skriva ut länken under.

Då blir det såhär:

Värde: <%=Session("userID")%><br />

<a href="userInfo.asp?userID=<%=Session("userID")%>">Din profil</a>

Kolla sen i din länk vad där står efter userID=

 

userInfo-sidan:

Där finns det inget värde i QueryStringen som kommer ifrån länken på mainsidan.

 

Så frågan är vad som händer mellan inloggningen och mainsidan.

Men testa att skriv ut variabeln ensam på mainsidan.

Man får ta en bit i taget och till slut har du "ringat in" felet.

 

Svårt att säga mer nu då jag inte ser alla sidorna i sin helhet.

 

[inlägget ändrat 2006-04-18 19:41:12 av Micke_skane]

Link to comment
Share on other sites

Micke_skane

EDIT:

Forumet strulade så det blev en för mycket.

Ta GÄRNA bort denna!

 

[inlägget ändrat 2006-04-18 19:38:45 av Micke_skane]

Link to comment
Share on other sites

Jag har en databas som heter community.mdb, en acsess alltså.

I denna ligger det 4 tabeller, den jag använder mig av i detta fallet är:

 

tblUsers och den innehåller följande:

 

userID / Räknare (primärnykel) - Detta är den vi är ute efter

userLoginName / Text

userPassword / Text

userEmail / Text

userLoginStatus / Tal

userRegistred / Datum/Tid

userLoginStatus / Datum/Tid

userFullName / Text

userPresentation / PM

userURL / Text

userPictureURL / Text

userPoints / Tal

 

Och din UPDATE-körning på databasen blir rätt, utan något felmeddelande?

 

Jag får inget felmedelande när man skall login utan kommer direkt in på main.asp

 

Vad finns där mer på sidan, innan denna länk?

 

Min main sida består av en rubrik och länkar enbart, jag bifogar denna inom LOG tagarna

 

[log]<html>

<head>

<title>Community</title>

</head>

<body>

 

<h1>Grattis du har kommit in, du kan dock inte göra något ännu.</h1>

<br>

<br>

<a href="be_friend.asp">Bli vän med någon</a>

<br>

<br>

<a href="friends.asp">Vänner</a>

<br>

<br>

<a href="inbox.asp">Inbox</a>

<br>

<br>

<a href="lasMess.asp">Läs Mess</a>

<br>

<br>

<a href="userInfo.asp?userID="<%=Session("userID")%>">Din profil</a>

<br>

<br>

<a href="messRemove.asp">Ta bort Mess</a>

<br>

<br>

<a href="remove_friend.asp">Ta bort Vän</a>

<br>

<br>

<a href="sendForm.asp">Skicka Form</a>

<br>

<br>

<a href="top10.asp">Top 10</a>

<br>

<br>

<a href="userInfo.asp">Medlems info</a>

<br>

<br>

<a href="userInfoEdit.asp">Medlems info (redigera)</a>

<br>

<br>

<a href="view_gb.asp">Visa gästbok</a>

<br>

<br>

<a href="write_gb.asp">Skriv i gästbok</a>

 

</body>

</html>[/log]

 

Vad händer om du enbart skriver ut din Session("userID") på den sidan?

 

Då får jag: Värde: 2

 

Hoppas detta svarade på alla din frågar.

 

Måste även ta i akt att säga tack så mkt för att du tar dig tid och ork att hjälpa mig, väldigt bussigt. ;D

 

Link to comment
Share on other sites

Archived

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



×
×
  • Create New...