rijen in geheugen :s

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sam

Sam

14/06/2006 14:16:00
Quote Anchor link
Hallo,

Ik ben hier een best ingewikkeld script aan het maken (denk ik, want ik kom er niet uit :P) Het is een script om te kijken of er meerdere gebruikers op hetzelfde IP in de databse staan, dus eigenlijk meerdere accounts op één IP. Met het volgende script check ik dit na:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$query0
= "SELECT * FROM `leden`";
$selecteren = mysql_query($query0) or die ( mysql_error( ) );
while ($lijst = mysql_fetch_object($selecteren)) {

    $query01 = "SELECT * FROM `leden` WHERE `ip` = '".$lijst->ip."'";
    $selecter = mysql_query($query01) or die ( mysql_error( ) );
    
    if (mysql_num_rows($selecter) != 1) {
        while ($kat = mysql_fetch_object($selecter)) {
            echo $kat->username." -ip- <b>".$lijst->ip."</b><br><br>";
            
        }

    echo "<hr>";    
    }
}

?>


In princiepe werkt dit goed. Ik krijg keurig een lijst met gebruikers die met dezelfde IP's in de lijst staan. Als voorbeeld krijg ik het volgende:

Piet -ip- 86.212.293.219

Peter -ip- 86.212.293.219

Pieter -ip- 86.212.293.219
--------------------------------------------
--------------------------------------------
Jan -ip- 96.272.222.211

Janus -ip- 96.272.222.211

Job -ip- 96.272.222.211

Die informatie klopt. Alleen, nu heb ik als probleem, dat elk rijtje 3 keer voorkomt, omdat hij na het IP van Jan gecheckt te hebben, ook het ip van Janus checkt, en dan zegt hij weer dat ze alledrie hetzelfde IP hebben. Dat klopt ook wel, maar dat wil ik niet :P.

Ik wil dat hij de gebruikers die al gecheckt zijn, niet nog eens gecheck worden. Kan dit door bijvoorbeeld een array te maken en daarnaa met een if te kijken of hij erin staat o.i.d?

Bedankt alvast, SAplayer
 
PHP hulp

PHP hulp

18/11/2024 01:23:40
 
Jan Koehoorn

Jan Koehoorn

14/06/2006 14:22:00
Quote Anchor link
SELECT ip, COUNT(username) AS aantal
FROM leden
group by ip
order by ip

geeft het aantal users per ip
 
Frank -

Frank -

14/06/2006 14:28:00
Quote Anchor link
Met die query van Jan, heb je dus slechts 1 query nodig om in 1 keer alle informatie op te halen. En dus niet per user een query.

Tip: Gebruik in je queries nooit backtics `, die zijn echt niet nodig. Andere databases accepteren deze niet, je leert jezelf een SQL-dialect aan waar deze databases niet mee kunnen werken.
 
Jan Koehoorn

Jan Koehoorn

14/06/2006 14:36:00
Quote Anchor link
@Frank: wat zou jij doen, als je ook nog alle namen eruit wilt laten rollen? Ik zou denk ik gewoon:

SELECT ip, username
FROM leden
ORDER BY ip ASC, username ASC

doen en dan in de while zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
    $vorige_ip
= '';
    while ($row = mysql_fetch_assoc ($res)) {
        if ($vorige != $row['ip']) {
            // ip echoën
            $vorige_ip = $row['ip'];
        }

        // naam echoën
    }
?>

zodat je per ip nummer keurig een of meer usernames eronder krijgt.
 
Sam

Sam

14/06/2006 14:49:00
Quote Anchor link
Ik snap het niet :s Ik heb het volgende gemaakt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$query0
= "SELECT ip, username FROM leden ORDER BY ip ASC, username ASC";
$selecteren = mysql_query($query0) or die ( mysql_error( ) );
while ($lijst = mysql_fetch_object($selecteren)) {

    $query01 = "SELECT * FROM `leden` WHERE `ip` = '".$lijst->ip."'";
    $selecter = mysql_query($query01) or die ( mysql_error( ) );
    
    $vorige_ip = '';
    while ($row = mysql_fetch_assoc ($selecter)) {
        if ($vorige != $row['ip']) {
            echo $row['ip']."<br>";
            $vorige_ip = $row['ip'];
        }

        echo $row['username'];
    }    
}

?>


Dan komen de gebruikersnamen wel keurig onder elkaar te staan, maar ze komen er nogsteeds 2 of meer keer in voor :s
 
Jan Koehoorn

Jan Koehoorn

14/06/2006 15:01:00
Quote Anchor link
In mijn voorbeeld ga ik er van uit dat elke gebruikersnaam maar 1 keer voorkomt in je db. Is dat ook zo?
 
Sam

Sam

14/06/2006 15:06:00
Quote Anchor link
ja, dat is ook zo, maar als hij een ip tegenkomt, wat er meerdere keren instaat, laat hij zien welke gebruikers dat IP hebben, maar dan laat hij ze dus meerdere keren zien, want hij ziet dat Jan hetzelfde IP heeft als Janus, en hij ziet dat Janus hetzelfde IP heeft als Jan, dus laat hij het 2x zien, terwijl ik het maar 1x wil zien..
 
Sam

Sam

14/06/2006 23:49:00
Quote Anchor link
Ik heb een manier gevonden, door middel van een array:s

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$arr
= array("a", "b"); //de a en b als opvulling, weet niet of hij een lege array pakt
?>


en dan elke keer als hij een gebruikersnaam tegenkomt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
array_push($arr, $lijst->username);
?>


Hiermee werkt het ;)
Gewijzigd op 01/01/1970 01:00:00 door Sam
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.