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

    [pillolina] utenti on-line

    L'idea di creare questa pillolina me l'ha data Bobo88 in questa discussione
    http:[COLOR=orange]//forum.html.it/f...hreadid=738831

    Per poter creare un sistema che ci conta quante persone sono on-line sul nostro sito
    Sfruttiamo php+mysql facendo dei controlli su un campo.

    Incominciamo a creare un tabella
    Nome tabella:line
    1° Campo id: tipo intero extra(auto_increment primaria)
    2° Campo ip: tipo varchar max caratteri=15 ; inseriremo gli ip degli utenti
    3° Campo entrata: tipo intero; inseriremo il timestamp
    4° Campo pagina: tipo varchar max caratteri=255

    Questo è l'sql per creare la tabella:

    codice:
    CREATE TABLE `line` (
    `id` INT NOT NULL AUTO_INCREMENT ,
    `ip` VARCHAR( 15 ) NOT NULL ,
    `entrata` INT NOT NULL ,
    `pagina` VARCHAR( 255 ) NOT NULL ,
    PRIMARY KEY ( `id` ) 
    );
    Ora creiamo lo script in 2 file uno conterra le variabili per la configurazione l'altro conterra lo script:

    Primo file "configurazione" nome=conf.php
    codice:
    <?
    //Host del database
    $db_host="localhost";
    //Nome utente per connettersi al database
    $db_user="root";
    //Password per connettersi al database
    $db_pass="monaco";
    //Nome del database
    $db_name="utenti";
    //Tempo massimo di inattività del visitatore in secondi
    $timeout=360;//360 corrisponde a 5 minuti
    
    //I dati sottostanti non si devono modificare
    //Mi connetto al database
    $db=mysql_connect($db_host,$db_user,$db_pass);
    //seleziono il database
    mysql_select_db($db_name,$db);
    ?>
    Secondo file "il cuore dello script" nome=utenti_on_line.php
    codice:
    <?
    //includo il file conf.php
    include"./conf.php";
    //Imposto la variabile $ip uguale all'ip del visitatore
    $ip=$_SERVER['REMOTE_ADDR'];
    //Imposto la variabile $tempo uguale al timestamp
    $tempo=time();
    //Imposto la variabile $pagina uguale all'url della pagina che si sta visitando
    $pagina=$_SERVER['REQUEST_URI'];
    //Faccio una query che mi conta quanti record ci sono nella tabella con il campo ip uguale all'ip del visitatore
    $query="SELECT COUNT(\"id\") AS tot From line WHERE ip=\"$ip\"";
    [COLOR=orange]//applico la query..
    $result=mysql_query($query,$db);
    //imposto la variabile $tot uguale al risultato che mi da la query
    $tot=mysql_result($result,0,"tot");
    //faccio un controllo per vedere se l'ip è già presente nella tabella se è presente faccio una query che aggiorna il campo entrata e il campo pagina
    //se invece l'ip non esiste nella tabella faccio una query che inserisce tutti i dati nella tabella
    $query=($tot>0)?"UPDATE line SET entrata = \"$tempo\", pagina=\"$pagina\" WHERE ip=\"$ip\" LIMIT 1":"INSERT INTO line (ip,entrata,pagina) VALUES (\"$ip\",\"$tempo\",\"$pagina\")";
    //applico la query
    mysql_query($query,$db);
    //imposto $tempo_min uguale al valore minimo consentito
    $tempo_min=$tempo-$timeout;
    //Creo una query che cancella tutte le righe dove il valore del campo entrata è minore di $tempo_min
    $query="DELETE FROM line WHERE entrata<$tempo_min";
    //applico la query
    mysql_query($query,$db);
    
    //inizio punto 1
    //Inizio del conteggio degli utenti on-line
    //faccio una query che mi  restituisce il numero delle diverse combinazioni del campo ip
    $query="SELECT COUNT(DISTINCT ip) AS utenti From line WHERE 1";
    //applico la query
    $result=mysql_query($query,$db);
    //metto nella variabile $online il risultato che mi da la query che corrisponde al numero di utenti in linea
    $online=mysql_result($result,0,"utenti");
    //Fine del conteggio degli utenti on-line
    //fine punto 1
    echo $online
    ?>

    Secondo me in molti vi state chiedendo "Ma perchè a cosa c' è sevito il campo pagine se nei risultati non compare?"
    Ho creato il campo pagine nel caso volete visualizzare anche la posizione degli utenti se lo volete basta modificare lo script nella parte compresa fra i commenti "//inizio punto 1" e "//fine punto 1".
    Non l'ho fatto perchè lo sconsiglio per motivi di protezione e di privacy degli utenti(Se volete vi spiego)

    Un'ultima cosa la dico per evitare brutti commenti
    La funzione COUNT(DISTINCT ip)
    Molti diranno che è inutile usare la funzione distinct perchè comunque lo script non permette inserimenti di nuove righe con lo stesso ip
    ma l'ho messa perchè se lo script si vuole modificare per esempio se si vuole vedere quali pagine ha visitato il singolo utente questa funzione è indispensabile.

  2. #2
    Utente di HTML.it L'avatar di Pasco
    Registrato dal
    Apr 2002
    Messaggi
    1,559
    L'idea è buona ma perchè non mettere il tutto in una classe?

    Personalmente sto utilizzando l'ottima classe di andr3a ( con alcune modifiche ) già da diverso tempo.

    Utilizza php5 e SQLite

    http://andr3a.dotgeek.org/index.php?language=1&class=13
    PyFanatics

  3. #3
    Non metto tutto in una classe perchè questa pilolina vuole spiegare come creare uno script che conta il numero di utenti in linea, quindi l'importante e far capire il funzionamento poi ognuno puo modficare lo script a modo suo.
    Non vorei andare in OT

  4. #4
    [supersaibal]Originariamente inviato da Pasco
    L'idea è buona ma perchè non mettere il tutto in una classe?

    Personalmente sto utilizzando l'ottima classe di andr3a ( con alcune modifiche ) già da diverso tempo.

    Utilizza php5 e SQLite

    http://andr3a.dotgeek.org/index.php?language=1&class=13 [/supersaibal]
    non so perche' mi sono ritrovato qua' comunque consiglio questa
    http://www.devpro.it/php5_id_63.html

    quella va ma qusta e' piu' completa e forse un pelino piu' sotto controllo
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente di HTML.it L'avatar di Japogi
    Registrato dal
    Feb 2004
    Messaggi
    190
    scusatemi di una riflessione...

    ho provato il codice ma se kiudo la pagina e poi controllo nel db mi dà sempre ke sn connesso...

    la variabile timeout sta ad indicare cosa?

  6. #6
    pillolina utile, speriamo che chiarisca bene le idee...

  7. #7
    Utente bannato
    Registrato dal
    Nov 2004
    Messaggi
    202
    il timeout è il tempo dopo il quale il visitatore viene considerato non più connesso...
    d'altraparte è anche scritto nel commento sopra....

    MA perchè è scritta in ARANCIONE ?!?!!!

    Ottima pillola e ben commentata.

  8. #8
    l'arancione probabilmente è una sorta di evidenziazione, un po come gli editor di testo per la programmazione... *penso*

  9. #9
    Utente bannato
    Registrato dal
    Nov 2004
    Messaggi
    202
    Bè... nel codice va benissimo anzi aumenta le leggibilità del codice ma nel testo sopra proprio non va......

  10. #10
    Originariamente inviato da Pasco
    L'idea è buona ma perchè non mettere il tutto in una classe?

    Personalmente sto utilizzando l'ottima classe di andr3a ( con alcune modifiche ) già da diverso tempo.

    Utilizza php5 e SQLite

    http://andr3a.dotgeek.org/index.php?language=1&class=13


    secfondo me hai fatto benissimo a programmare in "strutturata" anziche il oggetti perchè magari non tutti riescono a capirci qalcosa e per capire il funzionamento mi sembra più che ottima come pillola.

    Ma questo è il parere di un utente non troppo esperto .


    volendo si potrebbe fare una versione anche in classi ma che utilizzi le stesse variabili cosi da fare un confronto.

    e magari si riesce a capire meglio la programmazione ad oggetti
    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

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 © 2024 vBulletin Solutions, Inc. All rights reserved.