Hej Nu syns det inte om "ol" är korrekt, men det kanske spelar mindre roll.Problem med databasskrivning
Jag tänkte först skapa en 404-sida som skickar en rapport vid varje uppkomst, men känner inte för att få massa e-post hela tiden. Så då tänkte jag lagra informationen i en databas och sen kolla på det när jag har tid och lust.
Min tanke gång är ungefär så här:
1. Har skapat en tabell med ID, url, hits, refers
url: sidan som man försökt gå till
hits: antal gånger sidan har öppnats
refers: now() + referer, så att man vet när sidan har försökts nå. (Den bygger på sig själv, ex första inlägget: now() & referer & "$", efter andra inlägget blir det: now() & referer & "$" & now() & referer & "$", sen sorterar jag ut allt. Inte så vackert men ändå.
2. När 404-sidan laddas söker den igenom databasen för att se om den aktuella url:en redan finns där.
Om så är fallet ska den uppdatera hits och refers på den posten, annars ska den skapa en ny.
Och det är där det brister. Den lyckas inte hitta poster med samma url! Jag använder följande kod (ol = urlen på sidan man vill gå till, vol = urlen på sidan man kommer ifrån):
<code=asp>
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("db.mdb")
SQL = " SELECT * FROM error ORDER BY ID "
Set RecSet = Databas.Execute(SQL)
dim hit, cntx, refstrng
cntx = true
do while not RecSet.EOF AND cnt = true
if RecSet("url") = ol then
hit = RecSet("ID")
cntx = false
end if
RecSet.movenext
loop
Set RecSet = nothing
refstrng = "@" & now() & ":" & vol & "$"
if cntx = true then
'Skriv in en ny post i databasen
set cnn = Server.CreateObject("ADODB.Connection")
set rst = Server.CreateObject("ADODB.RecordSet")
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("db.mdb")
sqltext = "SELECT * FROM error "
rst.Open sqltext,cnn,3,3
rst.Addnew
rst("hits") = "1"
'response.write("Sätter hits = 1<br>")
rst("url") = ol
'response.write("Sätter url = " & ol & "<br>")
rst("refers") = refstrng
'response.write("Sätter refstrng = " & refstrng)
rst.update
else
'Uppdatera en redan befintlig post i databasen
Databas.Execute "UPDATE error SET hits = hits + 1 WHERE ID = " & hit
Databas.Execute "UPDATE error SET refers = refers & '" & refstrng & "' WHERE ID = " & hit
'response.write("UPDATE error SET hits = hits + 1 WHERE ID = " & hit)
'response.write("<br>UPDATE error SET refers = refers & '" & refstrng & "' WHERE ID = " & hit)
end if
</code>
Den sätter alltså nya poster varje gång. Varför?
TacksamtSv: Problem med databasskrivning
Kan du inte skriva ut ol och sedan jämföra med alla rader i kolumnen url.
Eller så kan du göra SQLen till SELECT ID, URL from tabell WHERE URL='"&ol&"' "
Borde det inte gå?