webForumDet fria alternativet

hjälp med SQL efter Session("Inloggad") = rs("anvID")

43 svar · 712 visningar · startad av ptr_lks

ptr_lksMedlem sedan juni 2005584 inlägg
#1

hej,
har fallit för grupptrycket och ändrat till Session("Inloggad") = rs("anvID")
Men efter detta så fungerar inte mina strSQL:

Jag sköter inloggningen på en sida inlogg.txt. Den sidan "fungerar" på så sätt att: det blir rätt ”redirect”

På visa.txt är det tänkt att meddelanderna skall visas. Denna sida funkar inte till fullo, eftersom tanken är att ett systemmeddelande skrivs ut (Namn online) när ngn loggar in.
Tillskrivningen (som sker på inlogg.asp) fungerar dock när man öppnar databasen.

På skriv.asp

Error Type:
Microsoft JET Database Engine (0x80004005)

men tittar jag i databasen , så är inte den sidan tom..

Sista felet är att ingen visas online på sidan online.txt
för att spara plats bifogar jag koderna

@ndersMedlem sedan juni 200032 969 inlägg
#2
  1. I filen inlogg.txt bör detta generera ett felmeddelande:
 ...SET dtelastSeeenOnline = #"[b]%[/b] Now() &"# ...
  1. I dina filer använder du omväxlande apostrofer och brädgårdar för att omsluta datum. Bestäm dig. Dessutom; det finns ingen anledning att konkatenera in Now() från ASP, använd now() direkt i SQL-frågan istället, eftersom den funktionen finns att tillgå i Jet SQL.
  2. I filen online.txt ställer du ett knepigt villkor i SQL-frågan. "Hämta alla som varit online senare än om en minut". Inte så konstigt att inga visas som online.

På skriv.asp

Error Type:
Microsoft JET Database Engine (0x80004005)

Inte något mer? Inte någon mer text eller en referens till en felande rad?

emissionMedlem sedan dec. 19996 721 inlägg
#3

I princip rätt tänkt, men...

Generellt:

Använd inte datum och datumfunktioner i ASP, när samma finns i Access.
Stoppa inte in HTML-encodad data i databasen. Encoda när du skriver ut på sidan

Skriv.asp(txt):

Textarea "chattText" ligger utanför formuläret
Du gör en insert oavsett om någon postat eller ej. Lägg det i en if-sats.

ptr_lksMedlem sedan juni 2005584 inlägg
#4

@nders skrev:

  1. I filen inlogg.txt bör detta generera ett felmeddelande:
 ...SET dtelastSeeenOnline = #"[b]%[/b] Now() &"# ...

Får inget felmess. Varför anser du att jag borde få?

@nders skrev:

  1. I filen online.txt ställer du ett knepigt villkor i SQL-frågan. "Hämta alla som varit online senare än om en minut". Inte så konstigt att inga visas som online.

Villkoret skall vara:

Hämta alla som är online nu

@nders skrev:

På skriv.asp
Error Type:
Microsoft JET Database Engine (0x80004005)

Inte något mer? Inte någon mer text eller en referens till en felande rad?

hela meddelande jag får från ISS är

Error Type:
Microsoft JET Database Engine (0x80004005)
Fältet 'chattMedeelande.chattText' får inte vara tomt
refrens till

minCon,Execute strSQL
ptr_lksMedlem sedan juni 2005584 inlägg
#5

emission skrev:

Skriv.asp(txt):
Textarea "chattText" ligger utanför formuläret

hur menar du att den ligger utanför formuläret?

emission skrev:

Skriv.asp(txt):
Du gör en insert oavsett om någon postat eller ej. Lägg det i en if-sats.

Jag har ju tidigare (på inlogg.asp) gjort ett "INSERT", så när sidan laddas så finns det redan post i databasen

@ndersMedlem sedan juni 200032 969 inlägg
#6

Varför anser du att jag borde få?

För att du skrivit ett procenttecken istället för & när du konkatenerar?

Villkoret skall vara:
Hämta alla som är online nu

Det finns inget som heter så. Villkoret borde vara "Hämta alla som varit online de senaste x minuterna". Det är bara att ändra i villkoret.

hela meddelande jag får från ISS är
Error Type:
Microsoft JET Database Engine (0x80004005)
Fältet 'chattMedeelande.chattText' får inte vara tomt
refrens till
Kod:
minCon,Execute strSQL

Skriv då det från början, så slipper vi fråga! Felmeddelandet får du eftersom, som emission påpekar, textarean inte ligger i formuläret. Därmed postas inte heller innehållet, och koden försöker spara en tom sträng.

Jag har ju tidigare (på inlogg.asp) gjort ett "INSERT", så när sidan laddas så finns det redan post i databasen

inlogg.asp har inte det minsta med denna insert att göra! Du borde ha en if-sats runt denna insert som gör att den inte utförs om det inte finns något att stoppa in.

ptr_lksMedlem sedan juni 2005584 inlägg
#7

Skriv då det från början, så slipper vi fråga!

ber om ursält för detta.. trodde att jag hade gjort det

ptr_lksMedlem sedan juni 2005584 inlägg
#8

@nders skrev:

Varför anser du att jag borde få?

För att du skrivit ett procenttecken istället för & när du konkatenerar?

Villkoret skall vara:
Hämta alla som är online nu

Det finns inget som heter så. Villkoret borde vara "Hämta alla som varit online de senaste x minuterna". Det är bara att ändra i villkoret

  1. ändrat % -> &
  2. strSQL

och de två sidorna verkar fungera

@ndersMedlem sedan juni 200032 969 inlägg
#9

Great! (y)

ptr_lksMedlem sedan juni 2005584 inlägg
#10

@nders skrev:

Du borde ha en if-sats runt denna insert som gör att den inte utförs om det inte finns något att stoppa in.

är det typ

 Call PageAccess() 
strMessage = Server.HTMLEncode(Trim(Replace(Request("textChatt"), "'", "''")))
if strMessage <> "" then
Call dbOpen()
    strSQL = "INSERT INTO chattMeddelande (avchattUser, chattText, skrivTid) VALUES ('"_
      & Session("Inloggad") & "', '" & strMessage & "', '" & Now & "');"
    minCon.Execute strSQL 
     
Call dbClose()

du menar?

@ndersMedlem sedan juni 200032 969 inlägg
#11

Precis.

Men som emission skrev också;

Stoppa inte in HTML-encodad data i databasen. Encoda när du skriver ut på sidan

ptr_lksMedlem sedan juni 2005584 inlägg
#12

ptr_lks skrev:

är det typ

 Call PageAccess() 
strMessage = Server.HTMLEncode(Trim(Replace(Request("textChatt"), "'", "''")))
if strMessage <> "" then
Call dbOpen()
    strSQL = "INSERT INTO chattMeddelande (avchattUser, chattText, skrivTid) VALUES ('"_
      & Session("Inloggad") & "', '" & strMessage & "', '" & Now & "');"
    minCon.Execute strSQL 
     
Call dbClose()

jag tror jag blir galen!!!
Antingen bilr det fel 0x800A03F6 och 'End' förväntas...
Sätter jag in end

Call dbClose()
End

då blir det:

'If' förväntas fel 0x800A03F4

Sätter jag

End
Call dbClose()

så blir det ändå samma fel...

@ndersMedlem sedan juni 200032 969 inlägg
#13

End If

ptr_lksMedlem sedan juni 2005584 inlägg
#14

@nders skrev:

End If

själv klart!!! vilket miss!

ptr_lksMedlem sedan juni 2005584 inlägg
#15

Det jag skriver på skriv2.txt läggs inte in i databasen och följdaktligen så visas inte det på sidan visa2.txt
Har inte hunnit ändra HTML-encodningen
Kan detta vara anledningen till felet?
Eller kan strulet bero på att jag sätter Session("Inloggad") = rs("chattID") dvs en integer och sen försöker jag skriva in Session i ett fält av typen text?

@ndersMedlem sedan juni 200032 969 inlägg
#16

Anledningen är nog som tidigare skrivet i tråden att textarean inte ligger i formuläret, därför skickas inte texten till sidan som ska lägga in det i databasen.

att jag sätter Session("Inloggad") = rs("chattID") dvs en integer och sen försöker jag skriva in Session i ett fält av typen text?

Varför gör du det? Tal skall lagras i talfält.

ptr_lksMedlem sedan juni 2005584 inlägg
#17

@nders skrev:

Anledningen är nog som tidigare skrivet i tråden att textarean inte ligger i formuläret, därför skickas inte texten till sidan som ska lägga in det i databasen.

Jag förstår itne vad ni menar, när ni säger att textarean inte ligger i formuläret??

@nders skrev:

att jag sätter Session("Inloggad") = rs("chattID") dvs en integer och sen försöker jag skriva in Session i ett fält av typen text?

Varför gör du det? Tal skall lagras i talfält.

Jag vet att tal skall lagras i talfält. Men jag vet inte hur jag skall lösa annars problematiken

  1. den som är inloggad skall skriva inllägget = avchattUser

  2. sedan när jag skriver ut:

    strUser = rs("avchattUser")
    Response.Write strUser
    
@ndersMedlem sedan juni 200032 969 inlägg
#18

när ni säger att textarean inte ligger i formuläret??

Allt som tillhör formuläret skall ligga mellan <form> och </form>.

Det andra problemet förstår jag inte alls vad du menar med.

ptr_lksMedlem sedan juni 2005584 inlägg
#19

@nders skrev:

Det andra problemet förstår jag inte alls vad du menar med.

Vet inte riktig hur jag skall förklara:

  • databasen består av 2 tbl - se db.doc

  • om en anv är inloggad kollas

     Session(”Inloggad”) = rs(chattID”)
    
  • när meddelande skrivs

     strSQL = "INSERT INTO chattMeddelande (avchattUser, chattText, skrivTid) VALUES ('"_
          & Session("Inloggad") & "', '" & strMessage & "', '" & Now & "')"
    
  •  strSQL = "SELECT * FROM chattMeddelande WHERE DateDiff('N', skrivTid, Now()) < 30 ORDER BY skrivTid DESC"
    Set rs = minCon.execute(strSQL)
    n = 0
      do while (not rs.EOF) and (n < 20)
        
        strUser = rs("avchattUser")
        strMessage = ""
        	if strUser <> "System" then
          		strMessage = "<i>" & strUser & "</i>: "
        	end if
        
        strMessage = strMessage & rs("chattText") & " <small>(" & FormatDateTime(rs("skrivTid"), 3) & ")</small>"
    
        			if strUser = "System" then
          				strMessage = "<font color=""777777""><b><i>" & strMessage & "</i></b></font>"
        			end if
        
        response.write strMessage & "<br>" &vbCRLF
    

    Mina funderingar:

  1. går det att "koda" så utana tt det blir massor med konfikter
  2. Hur bör/skall jag ändra mina koder?
@ndersMedlem sedan juni 200032 969 inlägg
#20

Vad menar du att det är för massor av konflikter?

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