webForumDet fria alternativet

webbchat

83 svar · 1 674 visningar · startad av ptr_lks · sida 2 av 5

ptr_lksMedlem sedan juni 2005584 inlägg
#21

så det skall se ut som följer??

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
if Request.Form("chattin") = "Börja chatta" Then

Set chatt = Server.CreateObject( "Adodb.Connection" )
chatt.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\4testasp\db\chat.mdb")
chatt.ConnectionString = "Data Source='" & MdbFilePath & "'"
chatt.open
strUser = replace(Request("chattnamn"), "'", "''")
strPasw = replace(Request("txtPassword"), "'", "''")

 strSQL = "SELECT * FROM chattare WHERE Chattnamn = '"_
  & strUser & "' AND Chattpassw ='" & strPasw & "';"
 minCon.Execute strSQL,,128
 

  if not rs.EOF then
    strSQL = "UPDATE chattare SET OnLine = 1 WHERE chattnamn ='" & strUser & "';"
     minCon.Execute strSQL,,128

	strSQL = "INSERT INTO skickade (from, skrivet, tidpkt) VALUES ("_
    & "'System', '<i>" & strUser & "</i> Steg in i chatten', '" & Now & "');"
     minCon.Execute strSQL,,128

	Session("Inloggad") = User("anvID")

    rs.Close
    minCon.Close
    Set rs = Nothing
    Set minCon = Nothing
  
    Response.Redirect "chatt.asp"
  else
    rs.Close
    minCon.Close
    Set rs = Nothing
    Set minCon = Nothing

    Response.Redirect("error.html")
  end if
  end if
%>
@ndersMedlem sedan juni 200032 969 inlägg
#22

Förutom att du inte har något connectionobjekt som heter minCon så ser det väl ut som om det kanske kan fungera.

ptr_lksMedlem sedan juni 2005584 inlägg
#23

@nders skrev:

Förutom att du inte har något connectionobjekt som heter minCon

mIN "connectionsobjekt" torde väl vara chatt med hänvisning till följande

Set chatt = Server.CreateObject( "Adodb.Connection" )

Så exekveringen av fågan borde se ut

 chatt.execute strSQL,,128

eller hur?

så ser det väl ut som om det kanske kan fungera

du verkar vara lite tveksam?

Sedan bordejag väl ändra slutet till:

chatt.Close
    Set chatt = Nothing
  
    Response.Redirect "chatt.asp"
  else
   
    chatt.Close
    Set chatt= Nothing

    Response.Redirect("error.html")
  end if
  end if
@ndersMedlem sedan juni 200032 969 inlägg
#24

du verkar vara lite tveksam?

Klart jag är tveksam när det gäller kod jag inte själv kan se i aktion.

Fungerar alltså inte scriptet?

ptr_lksMedlem sedan juni 2005584 inlägg
#25

@nders skrev:

du verkar vara lite tveksam?

Klart jag är tveksam när det gäller kod jag inte själv kan se i aktion.

Fungerar alltså inte scriptet?

Jag har inte kunnat testa scriptet... kommer inte in på mitt konto hos brinkster...
Men ser koden ut att kunna fungera?

<%
if Request.Form("chattin") = "Börja chatta" Then

Set chatt = Server.CreateObject( "Adodb.Connection" )
chatt.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\4testasp\db\chat.mdb")
chatt.ConnectionString = "Data Source='" & MdbFilePath & "'"
chatt.open
strUser = replace(Request("chattnamn"), "'", "''")
strPasw = replace(Request("txtPassword"), "'", "''")

 strSQL = "SELECT * FROM chattare WHERE Chattnamn = '"_
  & strUser & "' AND Chattpassw ='" & strPasw & "';"
 chatt.execute strSQL,,128
 

  if not rs.EOF then
    strSQL = "UPDATE chattare SET OnLine = 1 WHERE chattnamn ='" & strUser & "';"
    chatt.execute strSQL,,128

	strSQL = "INSERT INTO skickade (from, skrivet, tidpkt) VALUES ("_
    & "'System', '<i>" & strUser & "</i> Steg in i chatten', '" & Now & "');"
     chatt.execute strSQL,,128

	Session("Inloggad") = chattare("anvID")

    
    chatt.Close
    Set chatt = Nothing
  
    Response.Redirect "chatt.asp"
  else
   
    chatt.Close
    Set chatt= Nothing

    Response.Redirect("error.html")
  end if
  end if
%>
@ndersMedlem sedan juni 200032 969 inlägg
#26

Men ser koden ut att kunna fungera?

I stort sett. Förutom att du inte skapar ett recordset när du ska hämta datat med din SELECT-fråga. Varför tog du bort det recordsetet?

Som det ser ut nu försöker du hämta data ifrån ett (eller rättare sagt två, eftersom du använder både namnen rs och chattare i koden) recordset som aldrig skapats.

Jag vet inte om det är jag som skriver otydligt eller du som läser otydligt.

När du ska hämta data med SELECT, då skall du skapa recordsets, annars kan du ju inte läsa datat du hämtar.
När du ska ändra data med INSERT, UPDATE eller DELETE ska du inte skapa något recordset, eftersom du inte får någon data tillbaka.

Dock: det är omöjligt att koda i blindo. Mitt tips är således: skaffa ett webhotell som fungerar, och eventuellt också; se till att ha IIS installerat på din egen dator.

- - - -

Fixa gärna till indenteringen en aning också, det känns som att det bara blir kladdigare och kladdigare. A och O är att kunna läsa koden ordentligt.

ptr_lksMedlem sedan juni 2005584 inlägg
#27

@nders skrev:

I stort sett. Förutom att du inte skapar ett recordset när du ska hämta datat med din SELECT-fråga. Varför tog du bort det recordsetet?

Är det så här du menar? (se ändringen i fetstil)

Set chatt = Server.CreateObject( "Adodb.Connection" )
chatt.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\4testasp\db\chat.mdb")
chatt.ConnectionString = "Data Source='" & MdbFilePath & "'"
chatt.open
strUser = replace(Request("chattnamn"), "'", "''")
strPasw = replace(Request("txtPassword"), "'", "''")

 strSQL = "SELECT * FROM chattare WHERE Chattnamn = '"_
  & strUser & "' AND Chattpassw ='" & strPasw & "';"
 [B]Set rs = chatt.execute strSQL,,128[/B]
 

  if not rs.EOF then
    strSQL = "UPDATE chattare SET OnLine = 1 WHERE chattnamn ='" & strUser & "';"
    chatt.execute strSQL,,128

	strSQL = "INSERT INTO skickade (from, skrivet, tidpkt) VALUES ("_
    & "'System', '<i>" & strUser & "</i> Steg in i chatten', '" & Now & "');"
     chatt.execute strSQL,,128

	Session("Inloggad") = chattare("anvID")

    
    chatt.Close
    Set chatt = Nothing
  
    Response.Redirect "chatt.asp"
  else
   
    chatt.Close
    Set chatt= Nothing

    Response.Redirect("error.html")
  end if
  end if
%>

Som det ser ut nu försöker du hämta data ifrån ett (eller rättare sagt två, eftersom du använder både namnen rs och chattare i koden) recordset som aldrig skapats.

ovanstående förstår jag inte riktigt... Eller menar du

Session("Inloggad") = chattare("anvID")

trodde att jag skall använda tabellens namn här?

Fixa gärna till indenteringen en aning också, det känns som att det bara blir kladdigare och kladdigare. A och O är att kunna läsa koden ordentligt.

Min gamla svaghet... Tycker att det är jätte svårt/knepig med indentering, fast det ser så enkelt och elegant ut när ni proffsen gör det

se till att ha IIS installerat på din egen dator.

Tyvärr har jag bara XP home, och då funkar väl inte IIS?

@ndersMedlem sedan juni 200032 969 inlägg
#28

Är det så här du menar? (se ändringen i fetstil)

Nej, inte riktigt. ,,128 gör att det inte skapas något recordset. Skall alltså bara användas när du inte använder SELECT. Gör som du brukar göra när du hämtar data.

trodde att jag skall använda tabellens namn här?

Det är där jag menar. Du skall använda recordsetets namn.

Tycker att det är jätte svårt/knepig med indentering

Jag förstår inte riktigt vad det är som är svårt, men öva, öva, öva.

ptr_lksMedlem sedan juni 2005584 inlägg
#29

@nders skrev:

trodde att jag skall använda tabellens namn här?

Det är där jag menar. Du skall använda recordsetets namn

Du menar

Session("Inloggad") = [B]rs[/B]("anvID")
@ndersMedlem sedan juni 200032 969 inlägg
#30

Ja

ptr_lksMedlem sedan juni 2005584 inlägg
#31

tack @nders för din pedagogiska förmåga, och tålamod med mig :birp
jag hoppas och tror att jag nu förstått det ovanstående :OO

ptr_lksMedlem sedan juni 2005584 inlägg
#32

nu har jag lagt ut min chat på brinkster..

Och redan på andra sidan har jag stött på problem :(
Får följande felutskrift:

Active Server Pages error 'ASP 0126'
Include file not found
/4testasp/default.asp, line 1
The include file '/includes/dbkoppling.asp' was not found.

fast den filen finns i mappen includes
Jag har enligt instuktioner från Brinkster skrivit

<!-- #include virtual="/includes/dbkoppling.asp" -->
@ndersMedlem sedan juni 200032 969 inlägg
#33

Det skulle inte förvåna mig om brrrrrrinkster har knepigt installerade servrar. Prova att lägga till /4testasp först i sökvägen.

ptr_lksMedlem sedan juni 2005584 inlägg
#34

@nders skrev:

Det skulle inte förvåna mig om brrrrrrinkster har knepigt installerade servrar. Prova att lägga till /4testasp först i sökvägen.

Du har rätt nu igen! fast konstigt att det står fel i FAQ...

@ndersMedlem sedan juni 200032 969 inlägg
#35

Antagligen är FAQ skriven för betalande kunder. Det innebär i så fall att den är skriven utefter premisserna att användaren har en egen website, vilket jag inte tror är fallet på gratiskontona. Jag tror helt enkelt att gratiskontona helt enkelt bara är en egen mapp i en gemensam stor website på servern. Detta skulle också kunna vara anledningen till att du inte kan använda global.asa på ditt konto; du har ingen website, utan bara en egen mapp.

EclipseMedlem sedan juli 20003 825 inlägg
#36

När du tröttnat på Brinkster
Regga ett vanligt full ASP konto hos Aleborg, lär dig använda global.asa och allt annat på ett relevant och vettigt sätt!!

Just nu är det dessutm höstrea hos Aleborg!

http://www.aleborg.se/

ptr_lksMedlem sedan juni 2005584 inlägg
#37

ADODB.Field error '80020009' på registrera.asp

= att rs är tom, har jag fått reda på efter sökning här på wf, har dock inte lyckats lösa problemet.
Hoppas på er hjälp med att modulera om koden:

<!-- #include virtual="/4testasp/includes/dbkoppling.asp" -->
<%
strUser = replace(Request("chattnamn"), "'", "''")
strPasw1 = replace(Request("pwd1"), "'", "''")
strPasw2 = replace(Request("pwd2"), "'", "''")
Call dbOpen()
if strUser <> "" then
set rs = Server.CreateObject("ADODB.Recordset") 
strSQL = "SELECT * FROM chattare WHERE chattNamn = '" & strUser & "';"
rs.Open strSQL, minCon, 3, 3  
	if (rs.EOF) and (strUser <> "System")  then
		strSQL = "INSERT INTO chattare (chattNamn, chattPassw) VALUES ('"_
				& strUser & "', '" & strPasw1 & "');"
		 minCon.Execute strSQL
Session("Inloggad") = rs("anvID")

rs.Close
Call dbClose()
Set rs = Nothing
Response.Redirect "chatt.asp"
  
  end if
  end if
%>

Även fast jag får felutskrift

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/4testasp/registrera.asp, line 15

så fungerar skrivningen till databasen, men inte redirecten

ptr_lksMedlem sedan juni 2005584 inlägg
#38

Det verkar som om jag fick till det med:

<!-- #include virtual="/4testasp/includes/dbkoppling.asp" -->
<%
strUser = replace(Request("chattnamn"), "'", "''")
strPasw1 = replace(Request("pwd1"), "'", "''")
strPasw2 = replace(Request("pwd2"), "'", "''")

//'skapa databaskopplingen
Call dbOpen()

//'Skapa sql-sträng för att kontrollera om anvndaren finns
strSQL = "SELECT * FROM chattare WHERE chattNamn = '" & strUser & "';"

//''Skapa och öppna recordset
set rs = minCon.execute(strSQL)
	if (rs.EOF) and (strUser <> "System")  then 
'namnet är ledig
	//'Skapa sql-sträng för att lägga in en ny användare
		strSQL = "INSERT INTO chattare (chattNamn, chattPassw) VALUES ('"_
				& strUser & "', '" & strPasw1 & "');"
	//'Kör sql-strängen mot databsaen
		 minCon.Execute(strSQL)
	//''Skicka tillbaka användaren till inloggnings-sidan 
	Response.Redirect "chatt.asp"

	Session("Inloggad") = rs("anvID")

rs.Close
Call dbClose()
Set rs = Nothing
  
    end if

%>

det blir iaf en redirect

@ndersMedlem sedan juni 200032 969 inlägg
#39

Vad är det du försöker göra förresten?
Du försöker sätta en sessionsvariabel med ett värde från ett recordset som är tomt. Att recordsetet är tomt vet vi, eftersom det är själva villkoret för att den koden ska köras... Du har ju skrivit:

If recordsetet är tomt then
      lägg in värde från recordsetet in i en sessionsvariabel
end if
ptr_lksMedlem sedan juni 2005584 inlägg
#40

@nders skrev:

Vad är det du försöker göra förresten?
Du försöker sätta en sessionsvariabel med ett värde från ett recordset som är tomt.

Jag försöker registrera en användare med namna och lösenord
för att senare använda sessionen för att kolla ett användaren är behörig med nedanstående

Public Sub PageAccess()
     If len(Session("Inloggad")) = 0 Then 
          Response.Redirect("error.htm") 
     End If 
End Sub

@nders skrev:

Du har ju skrivit:

If recordsetet är tomt then
      lägg in värde från recordsetet in i en sessionsvariabel
end if

Var har jag skrivit detta?

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