Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Cosigli visualizzazione utenti connessi

    Come si procede normalmente per vedere tutti gli utenti che sono loggati su un sito?! sistema data/ora o cosa?
    [ SimplyMepis 8 ]Copyleft
    www.mepisitalia.org IL SITO ITALIANO UFFICIALE DI MEPIS
    www.salentomovida.it LA MOVIDA DEL SALENTO HA UN NUOVO PUNTO D'INCONTRO SUL WEB
    [ SUD SOUND SYSTEM MINA FUECU INTRA ALLU SALENTU ]

  2. #2
    anche qualche script che supporti sta funzionalità che me lo studio un po'..
    [ SimplyMepis 8 ]Copyleft
    www.mepisitalia.org IL SITO ITALIANO UFFICIALE DI MEPIS
    www.salentomovida.it LA MOVIDA DEL SALENTO HA UN NUOVO PUNTO D'INCONTRO SUL WEB
    [ SUD SOUND SYSTEM MINA FUECU INTRA ALLU SALENTU ]

  3. #3
    Potresti inserire in un db ogni visitatore che entra nel portale (controlli nel database, se non ce lo inserisci, se ce aggiorni l'ora), dopo 5 minuti se il visitatore se ne è andato, lo cancelli dal database (potresti inserire un controllo dopo 30 secondi, ma faresti appesantire il tuo sito)

    Codice PHP:
    @$date date(YmdHi);

    //Inserisco nel database i nuovi visitatori o aggiorno l'ora di quelli gia' presenti
    $on mysql_num_rows(mysql_query("SELECT * FROM online WHERE ip='$ip"));
    if (
    $on>0) {
        
    $update mysql_query("UPDATE online SET date='$date' WHERE ip='$ip'");
    } else {
        
    $insert mysql_query("INSERT INTO online VALUES ('$ip','$date')");
    }

    //Cancello dal database i dati piu' vecchi di 5 minuti
    $old mysql_query("SELECT * FROM online");
    while (
    $row mysql_fetch_assoc($old)) {
        
    $ip_db $row['ip'];
        
    $date_db $row['date'];
        if (
    $date_db<($date-5)) {
            
    $delete mysql_query("DELETE FROM online WHERE ip='$ip_db'");
        }


  4. #4
    Originariamente inviato da mem
    Potresti inserire in un db ogni visitatore che entra nel portale (controlli nel database, se non ce lo inserisci, se ce aggiorni l'ora), dopo 5 minuti se il visitatore se ne è andato, lo cancelli dal database (potresti inserire un controllo dopo 30 secondi, ma faresti appesantire il tuo sito)

    Codice PHP:
    @$date date(YmdHi);

    //Inserisco nel database i nuovi visitatori o aggiorno l'ora di quelli gia' presenti
    $on mysql_num_rows(mysql_query("SELECT * FROM online WHERE ip='$ip"));
    if (
    $on>0) {
        
    $update mysql_query("UPDATE online SET date='$date' WHERE ip='$ip'");
    } else {
        
    $insert mysql_query("INSERT INTO online VALUES ('$ip','$date')");
    }

    //Cancello dal database i dati piu' vecchi di 5 minuti
    $old mysql_query("SELECT * FROM online");
    while (
    $row mysql_fetch_assoc($old)) {
        
    $ip_db $row['ip'];
        
    $date_db $row['date'];
        if (
    $date_db<($date-5)) {
            
    $delete mysql_query("DELETE FROM online WHERE ip='$ip_db'");
        }

    Sarebbe anche il caso di ottimizzare le query qualche volta...ad esempio:
    codice:
    //Inserisco nel database i nuovi visitatori o aggiorno l'ora di quelli gia' presenti
    $on = mysql_num_rows(mysql_query("SELECT * FROM online WHERE ip='$ip"));
    if ($on>0) {
    	$update = mysql_query("UPDATE online SET date='$date' WHERE ip='$ip'");
    } else {
    	$insert = mysql_query("INSERT INTO online VALUES ('$ip','$date')");
    }
    lo sostituirei con una REPLACE dato che IP (volendo seguire il tuo scheda), siccome unico, lo imposterei chiave primaria o unique e quindi basterebbe un:
    codice:
    REPLACE INTO online (ip, date) VALUES( '$ip', NOW() );
    in modo da evitare anche la query SELECT.

    Poi abolirei quel WHILE xkè è un po inutile...basta costruire una query un po migliore e sostituire:
    codice:
    //Cancello dal database i dati piu' vecchi di 5 minuti
    $old = mysql_query("SELECT * FROM online");
    while ($row = mysql_fetch_assoc($old)) {
    	$ip_db = $row['ip'];
    	$date_db = $row['date'];
    	if ($date_db<($date-5)) {
    		$delete = mysql_query("DELETE FROM online WHERE ip='$ip_db'");
    	}
    }
    con un più rapido e pulito:
    codice:
    DELETE FROM online WHERE (data + INTERVAL 5 MINUTE) < NOW()
    Ovviamente tutto questo impostando il campo DATE di tipo TIMESTAMP...

    Così in definitiva il codice risultante sarebbe:
    codice:
    $ip = $_SERVER['REMOTE_ADDR'];
    
    mysql_query("REPLACE INTO online (ip, date) VALUES( '$ip', NOW() );");
    mysql_query("DELETE FROM online WHERE (data + INTERVAL 5 MINUTE) < NOW()");
    Se analizziamo la differenza è molto grande in termini di spreco...supponendo che nella tabella "online" ci siano 1000 tuple (righe) tutte più vecchie di 5 minuti l'algoritmo proposto prima faceva: 1004 query al database ed un ciclo while da 1000 iterazioni, mentre quello che ho proposto io fa 2 query al database e nessun ciclo while.

    Ragazzi ottimizziamo quando si può...in questo modo magari uno si può anche permettere di fare ogni minuto...tanto la query la deve fare le stesso ogni volta che qualcuno carica una pagina...

  5. #5

  6. #6
    Originariamente inviato da LeaderGL
    Sarebbe anche il caso di ottimizzare le query qualche volta...ad esempio:

    Così in definitiva il codice risultante sarebbe:
    codice:
    $ip = $_SERVER['REMOTE_ADDR'];
    
    mysql_query("REPLACE INTO online (ip, date) VALUES( '$ip', NOW() );");
    mysql_query("DELETE FROM online WHERE (data + INTERVAL 5 MINUTE) < NOW()");
    grazie!..ma non andrebbe messo comunque l'if per controllare se l'utente è gia inserito?..cioè..il replace non implica che ci sia già l'ip in tabella?e se non ci fosse?..
    [ SimplyMepis 8 ]Copyleft
    www.mepisitalia.org IL SITO ITALIANO UFFICIALE DI MEPIS
    www.salentomovida.it LA MOVIDA DEL SALENTO HA UN NUOVO PUNTO D'INCONTRO SUL WEB
    [ SUD SOUND SYSTEM MINA FUECU INTRA ALLU SALENTU ]

  7. #7
    scusate eh.. ma non mi fa il replace!
    mi aggiunge una riga ogni volta nuova..

    ho fatto la tabella online con i cambi id(chiave) ip date username
    il replace con:
    "REPLACE INTO online (id, ip, date, username) VALUES('','$ip', NOW(), '$username')";

    il delete è ok..
    [ SimplyMepis 8 ]Copyleft
    www.mepisitalia.org IL SITO ITALIANO UFFICIALE DI MEPIS
    www.salentomovida.it LA MOVIDA DEL SALENTO HA UN NUOVO PUNTO D'INCONTRO SUL WEB
    [ SUD SOUND SYSTEM MINA FUECU INTRA ALLU SALENTU ]

  8. #8
    Il REPLACE funzionerebbe benissimo se la tabella fosse studiata bene, in quanto questa funzione di MySQL ha la stessa valenza dell'INSERT solo che se dovesse trovare valori corrispondenti (al nuovo inserimento) per una CHIAVE PRIMARIA e una UNIQUE va a sostituire quelli che già ci sono nel database.

    Quindi la tua tabella o la fai così:
    codice:
    CREATE TABLE login (
      ip VARCHAR(15) NOT NULL,
      data TIMESTAMP,
      PRIMARY KEY(ip)
    );
    oppure:
    codice:
    CREATE TABLE login (
      id INT(10) NOT NULL,
      ip VARCHAR(15) NOT NULL,
      data TIMESTAMP,
      PRIMARY KEY(id),
      UNIQUE (ip)
    );

    anche se trovo inutile la presenza del campo ID in quanto l'identificativo univoco è sicuramente l'indirizzo IP.

  9. #9
    ok grazie ragazzi!
    funziona tutto alla perfezione..

    si in effetti è ridondante pero' usando il formato text per l'ip non mi permetteva di metterlo come identificativo..ora l'ho eliminato
    [ SimplyMepis 8 ]Copyleft
    www.mepisitalia.org IL SITO ITALIANO UFFICIALE DI MEPIS
    www.salentomovida.it LA MOVIDA DEL SALENTO HA UN NUOVO PUNTO D'INCONTRO SUL WEB
    [ SUD SOUND SYSTEM MINA FUECU INTRA ALLU SALENTU ]

  10. #10
    Originariamente inviato da LeaderGL
    anche se trovo inutile la presenza del campo ID in quanto l'identificativo univoco è sicuramente l'indirizzo IP.
    non è detto se al sito si accede da una LAN (come dall'università), l'ID univoco non può essere l'IP perchè per "n" computer è sempre quello.

    io suggerisco una chiave "username" + "ip"


    www.funkazzisti.it - The Real Venetian Funky Style
    www.feempandora.it - Progetto di Ricerca sullo sviluppo sostenibile
    www.e-makina.it - Web Design

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.