02. september 2003 - 11:30Der er
13 kommentarer og 1 løsning
To while-løker sammen?
Hej
Jeg har et lille simpelt script, som checker om flere profiler er blevet oprettte fra sammen pc (check ip'er). Men den tager kun den første profil's ip og checker den op mod alle de andre profiler's ip'er. Desværre går den ikke videre til den næste profil osv. ind til den har checket alle profiler's ip'er mod hinanden.
Hvad gør jeg forkert?
<% Set myConn=Server.CreateObject("ADODB.Connection") myConn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=forum.mdb") strSQL="SELECT * FROM FORUM_MEMBERS" set rs = myConn.execute(strSQL) set rs2 = myConn.execute(strSQL)
response.write "Starter scanning<br>" do while not rs.BOF and not rs.EOF
do while not rs2.BOF and not rs2.EOF
response.write "Sammenligner " & rs("M_NAME") & " og " & rs2("M_NAME") & "<br>" if not rs("M_NAME") = rs2("M_NAME") then if rs("M_IP") = rs2("M_IP") then response.write "Profilerne " & rs("M_NAME") & " og " & rs2("M_NAME") & " blev oprettet på samme computer<br>" end if end if
Outputter er kun: Starter scanning Sammenligner Ole og Signe Sammenligner Ole og Peter Sammenligner Ole og Søren Slutter scanning
Outputtet skulle have været: Starter scanning Sammenligner Ole og Signe Sammenligner Ole og Peter Sammenligner Ole og Søren Sammenligner Signe og Ole Sammenligner Signe og Peter Sammenligner Signe og Søren Sammenligner Søren og Ole Sammenligner Søren og Peter Sammenligner Søren og Signe Slutter scanning
PS. Hvis du kan optimere scriptet, giver jeg gerne ekstra points :-)
Det er fordi du i dit rs2 er flyttet til slut anden gang du skal løbe rs igennem. Prøv at sæt rs2.MoveFirst ind her ... rs2.MoveNext Loop rs2.MoveFirst rs.MoveNext Loop
Da jeg kørte scriptet slog det mig, at der er mange profiler, som var blevet oprettet på den samme pc. Så vil I ikke hjælpe mig med at udbygge scriptet, så der f.eks. kommer til at stå (jeg sætter lige pointene op til 50):
Følgende profiler blev oprettet på samme computer: Ole Søren Gitte Hanne
Følgende profiler blev oprettet på samme computer: Mads, Henrik og Sofie
Osv.
På den måde kan man bedre overskue det.
<% Set myConn=Server.CreateObject("ADODB.Connection") myConn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=forum.mdb") strSQL="SELECT * FROM FORUM_MEMBERS order by M_IP" set rs = myConn.execute(strSQL) set rs2 = myConn.execute(strSQL)
response.write "Starter scanning<br>" do while not rs.BOF and not rs.EOF
do while not rs2.BOF and not rs2.EOF
if not rs("M_NAME") = rs2("M_NAME") then if rs("M_IP") = rs2("M_IP") then response.write "<br>Følgende profiler blev oprettet på samme computer(" & rs("M_IP") & "):<br>" & rs("M_NAME") & "<br>" & rs2("M_NAME") end if end if
Kan I ikke hjælpe mig med at få scriptet til at liste alle de profiler, som er oprettet fra samme pc, i stedet for kun to profiler.
Den burde skrive:
Følgende profiler blev oprettet på samme computer: Ole Søren Gitte Hanne
Men lister desværre kun to profiler.
<% Set myConn=Server.CreateObject("ADODB.Connection") myConn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=forum.mdb") strSQL="SELECT * FROM FORUM_MEMBERS order by M_IP" set rs = myConn.execute(strSQL) set rs2 = myConn.execute(strSQL)
response.write "<br>Starter scanning<br>" do while not rs.BOF and not rs.EOF and y < 50 i = 0 do while not rs2.BOF and not rs2.EOF
if not rs("M_NAME") = rs2("M_NAME") then
if rs("M_IP") = rs2("M_IP") then
if i => 0 then response.write "<br>Følgende profiler blev oprettet på samme computer (" & rs("M_IP") & "):<br>" & rs("M_NAME") & "<br>" & rs2("M_NAME") & " " i = i + 1 else response.write rs2("M_NAME") & " " end if end if end if rs2.MoveNext Loop
Ok, skal lige forstå det hel rigtigt, din db indeholder profilern. Navn=Ole, ip= a.a.a.a Navn=Søren, ip= a.a.a.a Navn=Gitte, ip= a.a.a.a Navn=Hanne, ip= a.a.a.a Navn=Ole1, ip= b.b.b.b Navn=Søren1, ip= b.b.b.b Navn=Gitte1, ip= b.b.b.b Navn=Hanne1, ip= b.b.b.b Navn=Hanne2, ip= c.c.c.c
Og du ønsker at få listet alle profiler der kommer fra samme ip <% Set myConn=Server.CreateObject("ADODB.Connection") myConn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=forum.mdb") strSQL="SELECT * FROM FORUM_MEMBERS order by M_IP, M_NAME" set rs = myConn.execute(strSQL) strIP = ""
response.write "<br>Starter scanning<br>" do while not rs.BOF and not rs.EOF if (strIP <> rs("M_IP")) then strIP = rs("M_IP") response.write "<br>Følgende profiler blev oprettet på samme computer (" & rs("M_IP") & "):<br>" & rs("M_NAME") else response.write "<br>"& rs("M_NAME") end if rs.MoveNext Loop
myConn.close
response.write "<br>Slutter scanning<br>" %>
Så skulle det gerne komme til at se sådan ud: IP = a.a.a.a Gitte Hanne Ole Søren IP = b.b.b.b Gitte1 Hanne1 Ole1 Søren1 IP = c.c.c.c Hanne2
Det kunne man også, men så skulle jeg smide alle ip'erne ind i IP-variablen.
Ovenstående anvendte jeg to recordsets... set rs = myConn.execute(strSQL) set rs2 = myConn.execute(strSQL) ...
Som jeg kørte op mod hinanden, men der kunne jeg ikke finde ud af, at få scriptet til at liste mere end 2 profiler. Nu kan jeg godt få listet mere end 2 profiler, men omvendt så lister den også alle de andre profiler, som er uinteressante. (Altså alle dem, hvor der er ikke er blevet oprettet flere profiler på en pc)
Prøv at se min ovenstående kode. Det som jeg er interesseret i er at finde alle de profiler, hvor folk udgiver sig for at være andre - f.eks.:
Så skulle den være der: <% Set myConn=Server.CreateObject("ADODB.Connection") myConn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=forum.mdb") strSQL="SELECT M_IP, Count(*) FROM forum_members Group By M_IP having Count(*) > 1" set rs = myConn.execute(strSQL)
response.write "<br>Starter scanning<br>"
do while not rs.BOF and not rs.EOF response.write "<br>Følgende profiler blev oprettet på samme computer (" & rs("M_IP") & "):"
set rs1 = myConn.execute("SELECT * FROM forum_members Where M_IP = '"& rs("M_IP") &"' Order By M_NAME") do while not rs1.BOF and not rs1.EOF response.write "<br>"& rs1("M_NAME") rs1.MoveNext Loop
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.