Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: problema con timestamp

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    2,043

    problema con timestamp

    ciao a tutti,
    ho creato uno script dove dice quanti utenti sono collegati al sito e i loro nomi.
    se navigo sulle varie pagine del sito non mi da problemi e funziona correttamente, quando però nella pagina del form clicco sul pulsante invio mi da questo errore:

    Duplicate entry '1190236820' for key 1

    che vuol dire?
    questa è la tabella:
    --------------------------
    useronline

    Campo Tipo Null Predefinito
    timestamp int(15) No 0
    id_login int(4) Sì NULL
    ip varchar(40) No
    file varchar(100) No


    Indici:
    Nome chiave Tipo Cardinalità Campo
    PRIMARY PRIMARY 11 timestamp
    ----------------------------------

    e questo è lo script:
    Codice PHP:
    <?php
    $timeoutseconds 
    200;

    $timestamp time(); 
    $timeout $timestamp-$timeoutseconds;


    $inserisci "INSERT INTO useronline (timestamp, id_login, ip, file)
    VALUES ('
    $timestamp','$_SESSION[idlogin]','$REMOTE_ADDR','$PHP_SELF')";
    mysql_query($inserisci$conn) or die (mysql_error() );

    if(!(
    $inserisci)) { 
    print 
    "Useronline Insert Failed > "
    }

    $cancella "DELETE FROM useronline WHERE timestamp<$timeout";
    mysql_query($cancella$conn) or die (mysql_error() );

    if(!(
    $cancella)) { 
    print 
    "Useronline Delete Failed > "


    $select =  "SELECT DISTINCT useronline.ip, c_login.*
                FROM useronline, c_login
                WHERE useronline.id_login = c_login.id_login"
    ;
    $result mysql_query($select$conn) or die (mysql_error());
    $user mysql_num_rows($result); 
    ?>

  2. #2
    non e' una bella idea usare un dato della tabella come chiave primaria. Oltretutto non hai la sicurezza che possa sempre essere univoco.

    meglio se fai un id autoincrement. Perche' hai quell'errore ... sembrerebbe che gia' esista lo stesso valore di timestamp nella tabella. potrebbe anche essere errato che tu metta le apici al campo numerico, ma questo dipende dalla versione di mysql e dall'impostazione di SQL-MODE.

    quelle due variabili '$REMOTE_ADDR', '$PHP_SELF' dove le prendi? dovrebbero essere nell'array $_SERVER

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    2,043
    la cosa strana è che l'errore me lo da solo nella pagina del form quando clicco invio, se navigo tra le altre pagine funziona tutto correttamente
    chissà come potrei risolvere il problema

  4. #4
    Originariamente inviato da prinzart
    la cosa strana è che l'errore me lo da solo nella pagina del form quando clicco invio, se navigo tra le altre pagine funziona tutto correttamente
    chissà come potrei risolvere il problema
    non so come sei strutturato come script ma si presume che fino a scadenza del timeout non metti piu' dati nella tabella.. quindi navigando nelle pagine non credo tu inserisca ogni volta un record.

    stampa la query INSERT prima di eseguirla e controlla se il timestamp esiste gia'. Vale comunque "fortemente" quello che ho scritto prima.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    2,043
    Grazie!
    Mi hai dato un ottimo suggerimento, ho levato la chiave primaria al campo timestamp (avevi ragione sul fatto che non doveva essere una chiave) poi ho creato un nuovo campo id con chiave primaria e autoincrementale.

    E ora funziona!!

  6. #6
    ariciao, scusa un'altra domanda, mi sa che non mi funziona il timeout perchè stamattina mi sono ricollegato al sito e nella tabella c'era ancora un record inserito ieri, secondo te dove potrebbe essere il problema?

    Codice PHP:
    <?php
    $timeoutseconds 
    300;

    $timestamp time(); 
    $timeout $timestamp-$timeoutseconds;


    $inserisci "INSERT INTO useronline (timestamp, id_login, ip, file)
    VALUES ('
    $timestamp','$_SESSION[idlogin]','$REMOTE_ADDR','$PHP_SELF')";
    mysql_query($inserisci$conn) or die (mysql_error() );

    if(!(
    $inserisci)) { 
    print 
    "Useronline Insert Failed > "
    }

    $cancella "DELETE FROM useronline WHERE timestamp<$timeout";
    mysql_query($cancella$conn) or die (mysql_error() );

    if(!(
    $cancella)) { 
    print 
    "Useronline Delete Failed > "



    ?>

  7. #7
    esempio pseudo reale .... se fai:

    $timestamp = 123456;
    $timeout = 123456 - 6; ( = a 123450)

    e poi ... where 123456 < 123450 ($timestamp < $timeout)

    quando mai potra' essere TRUE questa condizione?????

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    quindi devo mettere timestamp maggiore di timeout?

    Codice PHP:
    DELETE FROM useronline WHERE timestamp>$timeout 

  9. #9
    Originariamente inviato da ufficio
    quindi devo mettere timestamp maggiore di timeout?

    Codice PHP:
    DELETE FROM useronline WHERE timestamp>$timeout 
    cosi' sara sempre TRUE....

    codice:
    $timestamp = time();
    $time_out = 300;
    
    where (timestamp + $time_out) < UNIX_TIMESTAMP()
    lo unix timestamp deve essere quello corrente, che sia superiore al unix timestamp memorizzato + il delta del time out.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    ho fatto così ma mi da questo errore:
    Fatal error: Call to undefined function: where() in /web/htdocs/www.sito.it/home/include_login_serviziounghie.php on line 90


    Codice PHP:
    <?php
    $timestamp 
    time();
    $timeout 300;

    where (timestamp $timeout) < UNIX_TIMESTAMP();


    $inserisci "INSERT INTO useronline (timestamp, id_login, ip, file)
    VALUES ('
    $timestamp','$_SESSION[idlogin]','$REMOTE_ADDR','$PHP_SELF')";
    mysql_query($inserisci$conn) or die (mysql_error() );

    if(!(
    $inserisci)) { 
    print 
    "Useronline Insert Failed > "
    }

    $cancella "DELETE FROM useronline WHERE timestamp<$timeout";
    mysql_query($cancella$conn) or die (mysql_error() );

    if(!(
    $cancella)) { 
    print 
    "Useronline Delete Failed > "



    ?>

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.