webForumDet fria alternativet

Jäfmröa Session med recordset.

ASP

43 svar · 679 visningar · startad av magnusfernstrom

Medlem sedan mars 20033 686 inlägg
Frågan#1

Hej hej!
Jag vill jämföra en Session med ett recordset för att kolla om användarens Id är lika med det ID som meddelandent är till.
Annars ska man redirectas till meddelande sidan.

Jag får det inte att fungera med den här koden:

If Session("userID") = rs("To") Then
'koden som skriver ut meddelanden

Jag får inget felmeddelande, men ingen data dyker helt enkelt upp på sidan.

Jag kanske får förklara lite tydligaare om ingen förstår.
Men jag tänkte att det kanske är nåt speciellt när man ska jämföra värden med siffror?

Medlem sedan juni 200032 967 inlägg
#2

Men jag tänkte att det kanske är nåt speciellt när man ska jämföra värden med siffror?

Jepp, man måste alltid tänka på att subtypskonvertera.

If IsNumeric(Session("UserID")) Then
     If CLng(Session("userID")) = CLng(rs("To")) Then
....
....
....
End if
Medlem sedan mars 20033 686 inlägg
#3

Oooo okej, tänkte väl att det var nåt lurt med det hela ;)

Men som vanligt så får man hjälp av någon kunnig :)
Tack så mycket @nders.
Men du, det vore toppen om du förklarade för mig vad som egentligen händer med denna kod.
Vad är IsNumeric och CLng t.ex?

Medlem sedan dec. 20003 887 inlägg
#4

Det kan vara spökerier i subdatatyperna även om jag nu inte tror att VBScript är så känsligt för det...

If CInt(Session("userID")) = CInt(rs("To")) Then
  [blue]'Hubba hubba[/blue]
Else
  Response.Write "Session.userID = " & Session("userID") & "<br>rs(""To"") = " & rs("To")
End If

Jag skulle dock rekommendera dig att döpa om fältet To till något vettigt, eftersom jag har för mig att TO är ett reserverat ord.

Medlem sedan juni 200032 967 inlägg
#5

If Isnumeric(någonting) then ---> Om någonting kan anses vara ett tal, gör följande
Clng (någonting) ---> Konverterar någonting till subtypen long, dvs långt heltal (32 bitar).

Medlem sedan mars 20033 686 inlägg
#6

Okej, tack anders.
Engine^ tack för din hjälp också.
Jag tror inte To är ett reserverat ord, för det blir inte fel.
Jag hade innan ett fält som hette From. Men då blev det fel på sidan eftersom det antagligen är ett reserverat ord.

Men det kanske inte behöver bli fel för att det är ett reserverat ord?

Medlem sedan dec. 20003 887 inlägg
#7

Ja, det är ju inte omöjligt att jag har för mig fel... ;) Jag rekommenderar dock fortfarande att du byter namn på fältet. :)

Summa summarum bör det se ut som följer nu...

If IsNumeric(Session("userID")) And IsNumeric(rs("To")) Then
  If CLng(Session("userID")) = CLng(rs("To")) Then
    ...
Medlem sedan mars 20033 686 inlägg
#8

OKej tack så mycket Engine^ för tipset.
:)

Medlem sedan juni 200032 967 inlägg
#9

TO är reserverat av ODBC, så beroende av anslutningstyp kan saker och ting gå åt pipan. Byt namn på fältet.

Använd mer specifika fältnamn så slipper man sånt krångel.

Medlem sedan mars 20033 686 inlägg
#10

Ooops ett nytt problem!
Jag tar det här så slipper vi en till tråd.

Om Strängen är tom så har jag löst det med denna kod:

If Request.Querystring("MID") = "" Then
Response.Write "Meddelanden finns inte"
Else
----
---
----
End If

Och med dne koden är det inga problem.
Men om man istället skriver t.ex. MID=3434 i länken så får man detta meddelande:

error '80020009'

/slauson/db/1/message.asp, line 14

Alltså, hur skall jag gära för att kolla om strängen har något värde, samt om siffran i strängen överhuvudtaget finns i databasen?

Medlem sedan mars 20033 686 inlägg
#11

Okej, då byter jag väl då :)

Medlem sedan juni 200032 967 inlägg
#12

samt om siffran i strängen överhuvudtaget finns i databasen?

If objRS.EOF Then
    ' tomt, för böveln!!!
else
    ' gör prylar
end if
Medlem sedan mars 20033 686 inlägg
#13

Och OBJ skall i detta fall ersättas av?

Medlem sedan juni 200032 967 inlägg
#14

objRS ska givetvis bytas mot namnet på ditt recordsetobjekt.

Medlem sedan mars 20033 686 inlägg
#15

Hehe okej :)

Medlem sedan mars 20033 686 inlägg
#16

men vad i...
Alltså ledsen, men jag är för trög...
Hur ska koden se ut?

Medlem sedan juni 200032 967 inlägg
#17

Visa din kod.

Medlem sedan mars 20033 686 inlägg
#18

Ja du det är den jag fick av dig helt enkelt....
Querystringen heter MID, och det gör även fältet i databasen-

Medlem sedan juni 200032 967 inlägg
#19

Du måste ju ha mer kod än den jag skrev?
Visa den koden du försökte med, som inte fungerar.

Medlem sedan mars 20033 686 inlägg
#20
<%
If Session("inloggad") = "ja" Then

If Request.Querystring("MID") = "" Then
Response.Write "Meddelanden finns inte"
Else

Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("users.mdb")
SQL = "SELECT * FROM meddelanden WHERE MID = " & Request.Querystring("MID") & ""
Set rs = db.Execute(SQL)

If IsNumeric(Session("userID")) Then
     If CLng(Session("userID")) = CLng(rs("Till")) Then
 
Do until rs.EOF
%>
<br>
Rubrik: <%=rs("Rubrik")%>
<br>
Från: <%=rs("FranUser")%>
<br>
<br>
<%=rs("Meddelande")%>
<br>
<%
rs.MoveNext
Loop

Else
Response.Redirect "meddelanden.asp"
End If
End If
End If
End If
%>

För övrigt så är koden himla stökig med tanke på alla If satser. Men det kanske inte går på något annat sätt?

262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)