Visualizzazione risultati 1 fino 15 di 15

Discussione: bannare gli utenti e liberarli alla scadenza

  1. #1
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito bannare gli utenti e liberarli alla scadenza

    Ciao a tutti ho un problema, io devo memorizzare il bann degli utenti che subiscono l'infrazione. Mi era stato detto che era utile tenere memoria dei minuti di espulsione piuttosto che altro, così data di oggi + minuti = giorno di libertà.

    Il problema è che non riesco, forse anche data la febbre, a capire quale campo DATA devo usare nel mio db per memorizzare la data odierna dell'uscita, e con quale operazione posso aggiungere i minuti e farmi restituire la data giusta.

    mi aiutate??

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Io di solito per queste cose salvo il timestamp (con la time()); poi il timestamp lo puoi gestire benissimo con le varie funzioni per le date; prima di tutte la Date().

    Lavorare con i timestamp a me risulta molto comodo, perché ad esempio è molto facile trovare la differenza tra due date (eseguendo una sottrazione tra il tiemstamp attuale e quello salvato, si ottengono i secondi di differenza)...

    Per i tipi di dati su mysql, leggi qui.

    Ciao!
    Ultima modifica di alemoppo : 05-05-2011 alle ore 20.04.56

  3. #3
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    non riesco a farlo funzionare scusa... ho fatto la update e nel campo data io ho questo,

    $data=time();
    ...
    ... ban_data='$data', ...


    però poi nel db il campo TIMESTAMP resta vuoto e non si aggiorna con il time attuale... >.>'
    ho sbagliato vero ?? ho letto anche la PHP TIME MANUAL ma non ho capito l'esempio che fa

  4. #4
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Oltre al metodo del timestamp suggerito da alemoppo, puoi utilizzare un campo di tipo DATETIME. In questo modo potrai sfruttare direttamente in una query di selezione la funzione DATE_ADD() per sapere quando finirà il ban:

    Codice:
    SELECT DATE_ADD(inizio_ban, INTERVAL minuti_durata MINUTE) AS fine_ban FROM tabella
    Dove, in tabella, inizio_ban è il campo DATETIME (che puoi riempire con NOW() quando inserisci il record), e minuti_durata è un campo di tipo numerico intero (tinyint, smallint, int, ...).


    EDIT: Mi sa che tardato un bel pò :D
    Ultima modifica di programmazioned : 05-05-2011 alle ore 20.30.25

  5. #5
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    EDIT: Mi sa che tardato un bel pò :D
    ???


    Comunque, il mio script è questo e non va ...
    Codice PHP:
    $row="UPDATE t_utenti SET BAN_DATA='NOW()', ban_fine='$minuti', ban_autore='$moderatore[id_utente]', ban_motivo='$motivo' WHERE username='$moderato[username]'";
    $intervento=mysql_query($row) or die('errore');
    in ban_data però non compare nulla. Il campo BAN_DATA è un DATETIME...

  6. #6
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Non devi mettere le virgolette fuori dal NOW(): è una funzione, non una costante.

    ???
    Nel senso che mentre io scrivevo avevi già risposto ad alemoppo!

    Ciao!

  7. #7
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    Non devi mettere le virgolette fuori dal NOW(): è una funzione, non una costante.
    sto odiando il mio script ... prima lo avevo scritto senza virgolette perché ricordavo le tue stesse parole, non è una costante ... e non andava... ora va è_é


    comunque, ora avendo la data in quel formato, posso creare una semplice operazione algebrica tipo :

    dataFineBann=dataInizioBann+minuti;

  8. #8
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    La query che ti ho scritto prima funziona di sicuro, usa quella.
    Te la riporto con i nomi che hai definito te:

    Codice:
    SELECT DATE_ADD(ban_data, INTERVAL ban_fine MINUTE) AS tempo_fine FROM t_utenti
    Ultima modifica di programmazioned : 05-05-2011 alle ore 20.54.58

  9. #9
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    La query che ti ho scritto prima funziona di sicuro, usa quella.
    Te la riporto con i nomi che hai definito te:

    Codice:
    SELECT DATE_ADD(ban_data, INTERVAL ban_fine MINUTE) AS tempo_fine FROM t_utenti

    ti prego dimmi che non devo scriverla in connotazione php 5

    Codice PHP:
    $row=mysql_query("SELECT DATE_ADD(ban_data, INTERVAL ban_fine MINUTE) AS fine_ban FROM t_utenti WHERE username='$userconnect'");
    $row=mysql_fetch_array($row);
    echo
    " // $row ";

  10. #10
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    mysql_fetch_array() restituisce un array, quindi:

    Codice PHP:
    ...
    echo
    $row['fine_ban'];


    Ciao!
    Ultima modifica di programmazioned : 05-05-2011 alle ore 21.12.04

  11. #11
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    mysql_fetch_array() restituisce un array, quindi:

    Codice PHP:
    ...
    echo
    $ban['fine_ban'];


    Ciao!

    o_ò mi stampa una S questo tuo echo...

  12. #12
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Una "S"?! Stranissimo

    Ho provato io e a me funziona, non è che magari c'è qualche altro errore nello script? Prova anche a mettere un print_r($row), così vediamo cosa contiene l'array.
    Ultima modifica di programmazioned : 05-05-2011 alle ore 21.37.11

  13. #13
    araim non è connesso Utente attivo
    Data registrazione
    26-06-2004
    Messaggi
    275

    Predefinito

    io ho scritto questo codice qui ... ma non va ...

    Codice PHP:
    <?php

    $user_c
    =$_GET['id'];

    $row=mysql_query(" SELECT * FROM t_utenti WHERE username='$user_c'");
    $esilio=mysql_fetch_array($row);

    $row=mysql_query(" SELECT * FROM t_utenti WHERE id_utente='$esilio[ban_autore]'");
    $moderatore=mysql_fetch_array($row);


    $data_fine=$esilio[ban_data]+$esilio[ban_fine];


    // echo"data dal db: $g,$m,$a,$o,$mi | data di oggi: $giorno,$mese,$anno,$ora,$minuti";

    echo"A seguito di una violazione del regolamento<br /> sei stato allontanato dalla community <br /><br />";
    echo
    "Il motivo di tale intervento è stato: <br /> <b>$esilio[ban_motivo]</b> <br /><br />";
    echo
    "moderatore: <b>$moderatore[username]</b> <br />";
    echo
    "<div style=\"font-size: 10px; margin: 5px;\">dal $esilio[ban_data] - al $data_fine</div>";

    if(
    $user_c=='prova') {
    // IL CODICE DEL TOPIC
    $sql = "SELECT DATE_ADD(ban_data, INTERVAL ban_fine MINUTE) AS fine_ban FROM t_utenti WHERE username='"."$user_c"."' ";
    echo
    $sql['fine_ban'];

    }



    $row="UPDATE t_utenti SET log='', data='' WHERE username='$user_c'";
    $modifica=mysql_query($row);


    $session = '' ;

    $_SESSION['use123'] = '';
    $userconnect = '';
    unset(
    $_SESSION['use123'] );
    session_destroy();


    ?>

  14. #14
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Non hai chiamato né mysql_query() né mysql_fetch_assoc(), è normale che la query non funzioni!

    Codice PHP:
    // Aggiungo la parte che calcola la data di fine ban alla query alla 5a riga del tuo script

    $row = mysql_query("SELECT *, DATE_ADD(ban_data, INTERVAL ban_fine MINUTE) AS fine_ban FROM t_utenti WHERE username='$user_c'");
    $esilio = mysql_fetch_array($row);
    A questo punto in $esilio['fine_ban'] avrai data e ora di termine del ban. La parte con il controllo "utente = prova" non serve.

    Saluti!
    Ultima modifica di programmazioned : 05-05-2011 alle ore 22.20.52

  15. #15
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    ..poi, un session_start() all'inizio di tutto non sarebbe male...

    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •