Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [PHP/Mysql] limitare inserimento messaggi in base al tempo trascorso

    ciao a tutti, stò realizzando una shoutbox dove l' utente può inserire dei brevi messaggi che verranno registrati in un db mysql

    quello che vorrei fare è limitare l' invio di messaggi ogni tot minuti, per esempio ogni 3 minuti

    ho pensato di usare le sessioni, quando entra nella pagina viene creata la sessione
    Codice PHP:
    $limit 60*3// 3 minuti
    $_SESSION['sbtlimit'] = (!isset($_SESSION['sbtlimit']))?time()+$limit:$_SESSION['sbtlimit']; 
    ora dovrei controllare quando l'user inserisci 1 messaggio se sono passati 3 minuti dal suo ultimo inserimento
    Codice PHP:
    $expire $_SESSION['sbtlimit'] - time(); 
    e da 2 giorni che provo, ma non capisco come va implementare la logica che fa funzionare il tutto, se potete datemi una mano....

  2. #2
    beh, se te salvassi a database per quell'utente oltre al messaggio anche il timestamp...
    puoi fare un'operazione, timestamp attuale (quando viene lanciato lo script) - timestamp storato, se il risultato è meno di 180 secondi (tre minuti) avvisi l'utente con la tecnica che preferisci e non metti niente a db, se invece son passati almeno tre minuti metti a database. (senza usare sessioni se non per il nome utente)

  3. #3
    intanto grazie mille per il suggerimento, ora la funzione(metodo di una classe) è diventata così:

    Codice PHP:
        private function insertMess($nome,$mess){
            
    $tt time()-$_SESSION['sbtlimit'];
            if(
    $tt<$this->limit){
                echo 
    'non faccio nulla '.$tt."<".$this->limit;    
            } else {    
                
    ////------------
                
    echo $tt.">".$this->limit;
                
    $dati $this->stripData($nome,$mess);
                if(
    is_array($dati) && count($dati)==2){
                    
    // inserisco dati nel DB
                    
    $_SESSION['sbtlimit'] = time();
                    echo 
    "inserisco i dati";
                    } else {
                    
    // non inserisci dati nel DB
                    
    echo 'dati non validi';
                }
            }    
        } 
    facendo delle prove ho visto che ad ogni nuovo inserimento devo aggiornare il valore della sessione perchè il tutto funzioni
    Codice PHP:
    $_SESSION['sbtlimit'] = time(); 
    a questo punto mi consigli di gestire il tutto su db, inserendo il timestamp di php(time()) ad ogni inserimento di un nuovo messaggio su un campo datetime di mysql, tu come faresti?


  4. #4
    beh, farei che quando l'utente preme su invia storo il messaggio con il timestamp (non ricordo il comando esatto), poi al successivo inserimento farei una select, WHERE utente = (sessione_nomeutente) ordinato per timestamp (dal più recente al più vecchio), limit 0,1 (solo un record).
    Poi farei un controllo sui secondi trascorsi, quindi rilancio un timestamp, se la differenza tra i due è minore di 180 lo avviso che deve attendere (con javascript ad esempio), mentre se son passati quei 180 secondi inserisco il valore .

    Gestirei tutto da database poichè comunque se io chiudo il browser e lo riapro creo una nuova sessione, in quel determinato caso a meno che te salvi il dato in un cookie o in un database io potrei spammare quanto mi piace no?

  5. #5
    ciao, stò seguendo i tuoi suggerimenti, avrei però un'altro dubbio

    nella shutbox pensavo che l'utente anche se non registrato può lasciare messaggi, quindi pensavo che lanciato lo script faccio un controllo se il nome è impostato nella sessione o cookie altrimenti lo faccio inserire

    però se esce o scade la sessione(non posso risalire al suo nome) per controllare i suoi ultimi messaggi dovrei al momento dell' inserimento di un messaggio registrare anche il suo IP e fare un controllo non sul nome ma sul suo IP?

    edit: secondo te mi conviene scomodare AJAX?


  6. #6
    (per ajax è questione di gusti),

    beh, io farei di norma il controllo sul nome, poi nel caso non sia indicato un nome farei il controllo a livello di ip.

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.