Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    1,804

    adressi ip e useronline

    salve gente mi potete aiutare a far funzionare questo script il problema e che in locale funziona ma quando lo metto su un server linux mi da dei dati sbagliati tipo il numero di utenti melo da non esatto poi inoltre la date e lora mi da solo degli 00000 e l ip non me lo da pero quando lo metto nei server windows mi da il giusto numero degli utenti mi da l ora pero l indirizzo ip mi da unlown perche mi potete aiutare a sistemare questo script inmodoo che funzioni su tutto?

    Codice PHP:

    /*
    tabella 'useronline'
    --------------------
    campi:     time (datetime)
            ip (varchar 15 unique)
            url (varchar 255)
    */

    $dbhost "localhost";
    $dbuser "root";
    $dbpass "";
    $dbname "3333";
    $timeoutseconds 300;

    if (
    getenv("HTTP_CLIENT_IP")) {
        
    $ip getenv("HTTP_CLIENT_IP");
    } else if (
    getenv("HTTP_X_FORWARDED_FOR")) {
        
    $ip getenv('HTTP_X_FORWARDED_FOR');
    } else if (
    getenv('REMOTE_ADDR')) {
        
    $ip getenv('REMOTE_ADDR');
    } else {
        
    $ip "Unknown";
    }

    //Mi connetto al database
    $db = @mysql_connect($dbhost,$dbuser,$dbpass)
        or die(
    "&error=[b]Database error:[/b] Cannot establish connection.");

    //Seleziono il database
    @mysql_select_db($dbname,$db)
        or die(
    "&error=[b]Database error:[/b] Cannot select database.");

    //Cancello i "vecchi" visitatori
    @mysql_query("DELETE FROM useronline WHERE (time + INTERVAL 5 MINUTE) < NOW()")
        or die(
    "&error=[b]Database error:[/b] Cannot insert new data.");

    //Inserisco nuovi visitatori
    @mysql_query("REPLACE INTO useronline (time,ip,url) VALUES (NOW(),'$ip','".$_SERVER['PHP_SELF']."')")
        or die(
    "&error=[b]Database error:[/b] Cannot insert new data.");

    $result mysql_query("SELECT time,ip,url FROM useronline ORDER BY time DESC");
    while (
    $row mysql_fetch_assoc($result)) {
        echo 
    "&adress=".$row['ip']."&tempo=".$row['time'];
        
        
    }
    echo 
    "&usersOnLine=".mysql_num_rows(mysql_query("SELECT ip FROM useronline")); 

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    1,804
    QUALCUNO MI AIUTA HELP!

  3. #3
    Innanzitutto da quello che ho capito il tuo campo time è di tipo TIME e non di tipo DATETIME, per cui questa espressione

    WHERE (time + INTERVAL 5 MINUTE) < NOW()

    è sbagliata perché NOW() ritorna DATA e TEMPO invece a te serve solo il tempo, per cui prova al limite o

    WHERE (time + INTERVAL 5 MINUTE) < CURTIME()

    oppure

    WHERE ADDTIME(time, '00:05:00') < CURTIME()

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    1,804
    mi anno detto che quello serve a far si che non svuoti subito dal database gli user ma ogni cinque minuti

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    1,804
    lo script me lo ha fatto mem e qui ti posto la discussione perche gli avevo postato uno script che non andava bene e lui me l ha modificato posto la discussione
    $timeout dovrebbe essere $timestamp + $timeoutseconds e non -, così crei un riferimento futuro (adesso + 2 ore esempio)

    e poi nel confronto all'interno della query WHERE timestamp>$timeout invece di <, cioè io devo cancellare i dati che sono più vecchi di (adesso + intervallo)

    Per come è attualmente lo script, appena inserisci un dato, viene subito cancellato perchè timestamp sarà sempre > $timeout (che diventa minore di timestamp perchè fai timestamp - intervallo)



  6. #6
    Se vuoi un consiglio è inutile che apri + discussioni su cose simili.
    E comunque che c'entra. La mia osservazione era che NOW() ti ritorna DATA+ORA cioé per fare un esempio.

    supponiamo che NOW() ritorni:

    '2007-09-25 13:30:45'

    mentre il tuo campo time rappresenta solo il tempo e supponiamo contenga:
    '12:40:45'

    Ora, mi dici che senso ha fare:

    '12:40:45' + INTERVAL 5 MINUTE < '2007-09-25 13:30:45'


    Solo questa era la mia osservazione non devi usare NOW() ma CURTIME() che ti dà solo l'ora corrente e non la data. Quindi con CURTIME() diventerebbe:

    '12:40:45' + INTERVAL 5 MINUTE < '13:30:45'


    Se, invece il campo time è di tipo DATETIME e non di tipo TIME allora va bene come hai fatto in precedenza.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    1,804
    si e data time il campo

  8. #8
    OK, allora affrontiamo un problema alla volta. Il primo è ke non ti da l'ip

    ma dopo questo codice:

    $dbhost = "localhost";
    $dbuser = "root";
    $dbpass = "";
    $dbname = "3333";
    $timeoutseconds = 300;

    if (getenv("HTTP_CLIENT_IP")) {
    $ip = getenv("HTTP_CLIENT_IP");
    } else if (getenv("HTTP_X_FORWARDED_FOR")) {
    $ip = getenv('HTTP_X_FORWARDED_FOR');
    } else if (getenv('REMOTE_ADDR')) {
    $ip = getenv('REMOTE_ADDR');
    } else {
    $ip = "Unknown";
    }


    se qui fai

    echo "IP: " . $ip;
    exit;

    Cosa ti da?

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    1,804
    gianfranco ora lo provo online la cosa importante che ci siano gli imput che il php deve mandare a flash

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    1,804
    mi da l ip ma come devo dargli l output?

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.