Avatar billede axkris Nybegynder
02. september 2003 - 11:30 Der 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
       
        rs2.MoveNext
   
    Loop

      rs.MoveNext
Loop

myConn.close

response.write "Slutter scanning<br>"
%>
Avatar billede axkris Nybegynder
02. september 2003 - 11:34 #1
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 :-)
Avatar billede kemoiq Nybegynder
02. september 2003 - 11:46 #2
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

myConn.close
response.write "Slutter scanning<br>"
%>
Avatar billede squashguy Nybegynder
02. september 2003 - 11:54 #3
Du kunne også lege lidt med GetRows(), noget i denne stil

strSQL="SELECT navn,ip FROM tabel1"

all_rows = rs.GetRows

For i_row = 0 to UBound(all_rows, 2)
    Response.Write "Kontrollerer: " & all_rows(0, i_row) & "<br>"

    For n_row = i_row+1 to UBound(all_rows, 2)
        Response.Write "&nbsp;&nbsp&nbsp; mod: " & all_rows(0, n_row)

        If all_rows(1, i_row) = all_rows(1, n_row) Then
            Response.Write " - de har samme ip adresse"       
        Else
            Response.Write " - OK"       
        End If

        Response.Write "<br>"
    Next
Next
Avatar billede erikjacobsen Ekspert
02. september 2003 - 11:57 #4
Du kan lave det med een SQL og noget sortering

strSQL="SELECT * FROM FORUM_MEMBERS order by <etellerandetfelt>"

Så vil ens værdier stå ved siden af hinanden

Du kan også direkte finde dem, der er flere af:

  select ip,count(*) as antal from forum_members group by ip having antal>1
Avatar billede axkris Nybegynder
02. september 2003 - 12:42 #5
Hej og mange tak for hjælpen alle :-)

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
       
        rs2.MoveNext
    Loop

      rs2.MoveFirst
    rs.MoveNext
Loop

myConn.close

response.write "Slutter scanning<br>"
%>
Avatar billede axkris Nybegynder
02. september 2003 - 12:43 #6
Ups, se lige blot følgende tekst, som burde have været slettet inden at jeg postede:

Følgende profiler blev oprettet på samme computer:
Mads, Henrik og Sofie
Avatar billede axkris Nybegynder
02. september 2003 - 21:13 #7
blot = bort
Avatar billede axkris Nybegynder
02. september 2003 - 22:14 #8
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
   
    rs2.MoveFirst
    rs.MoveNext
Loop

myConn.close

response.write "<br>Slutter scanning<br>"
%>
Avatar billede kemoiq Nybegynder
03. september 2003 - 09:05 #9
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
Avatar billede axkris Nybegynder
03. september 2003 - 09:35 #10
Hej kemoiq

Du har næsten forstået det rigtigt :-)

Jeg er dog kun ikke interesseret i at få listet de profiler, som anvender samme IP. Dit script lister dem alle f.eks.:

IP = a.a.a.a
Gitte
IP = b.b.b.b
Hanne1
IP = c.c.c.c
Ole
IP = d.d.d.d
Mads
Søren
Peter
IP = e.e.e.e
Sofie

Det eneste, som jeg er interesseret i er, listning af:

IP = d.d.d.d
Mads
Søren
Peter

Altså alle profiler, som er har samme IP - resten har ikke min interesse.

Scriptet skal jeg bruge til at regne ud, om folk har falske profiler, hvor de udgiver sig for at være andre.
Avatar billede kemoiq Nybegynder
03. september 2003 - 09:50 #11
Ok, du har altså en variabel "IP", som er det ip du ønsker at finde profiler ud fra.

Så skal strSQL se sådan ud:
strSQL="SELECT * FROM FORUM_MEMBERS Where M_IP  = '"& IP &"' order by M_NAME"
Avatar billede axkris Nybegynder
03. september 2003 - 10:03 #12
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.:

IP = b.b.b.b
Ole
Mads
Jens

IP = d.d.d.d
Mads
Søren
Peter

IP = h.h.h.h
Inge
Sofie
Pia
Mette
Ida
Avatar billede kemoiq Nybegynder
03. september 2003 - 10:38 #13
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

rs.MoveNext
Loop

myConn.close
response.write "<br>Slutter scanning<br>"
%>
Avatar billede axkris Nybegynder
08. september 2003 - 16:16 #14
Super mange tak for hjælpen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester