• Bannato Super User

    Ciao samy

    il mio problema è che ho 15.000 record salvati cosi nel database e non so come sistemarli.

    tutti i dati dovranno essere analizzati per cancellare le inattivita.

    esiste un modo per convertire i dati del mysql e dopo usarli nel php in modo da evitare di modificre il mysql direttamente?

    Puoi farmi un esempio, non sono molto pratico purtroppo.

    grazie per l'aiuto

    P.S. Apprezzo il tuo consiglio ma la data è imposta in questo modo da programmatore dello script non da me e per me capirci qualcosa in questo script è un lavoraccio


  • Bannato Super User

    Ho modificato il codice ma non va lo stesso

    <b>Clean Old Messages/Newsletter</b>
    <br><br>

    <?
    if ($_POST){

    $tabla5 = mysql_query("SELECT * FROM tb_messenger ORDER BY id ASC"); // selecciono todos los registros de la tabla usuarios, ordenado por nombre
    while ($registro5 = mysql_fetch_array($tabla5)) { // comienza un bucle que leera todos los registros y ejecutara las ordenes que siguen

    $date=$_POST["date"];
    $now = time();

    //Todo parece correcto procedemos con la inserccion
    $queryz9 = "DELETE FROM table tb_messenger WHERE ($now - $date) >60)";
    mysql_query($queryz9) or die(mysql_error());
    }

    echo "<b>Done.</b><br><br>";

    }
    ?>
    This Button Will Clean Old Visits.
    <br><br>
    <form method="post" action="index.php?op=38">
    <input type="hidden" name="clean" value="clean">
    <input type="submit" Value="Clean" class="button">
    </form>

    </table>

    Clean Old Messages/Newsletter

    Errore di sintassi nella query SQL vicino a 'table tb_messenger WHERE 1222714662 - >60)' linea 1

    Il mysql è in formato timestamp ma non mi fa la differenza lo stesso

    se qualcuno puo aiutatrmi ve ne saro grato


  • Consiglio Direttivo

    Tranquillo a tutto c'è soluzione 😄

    [php]<b>Clean Old Messages/Newsletter</b>
    <br><br>

    <?
    if ($_POST)
    {
    $tabla5 = mysql_query("SELECT * FROM tb_messenger ORDER BY id ASC"); // selecciono todos los registros de la tabla usuarios, ordenado por nombre

    $olddate=time() - 300000; // abbiamo così il timestamp della data limite, prima di questa cancelliamo tutti gli utenti
    
    //adesso dobbiamo trasformarla in data equivalente al Db
    $olddate= date ("Y-m-d H:i:s", $olddate);
    
    
    $queryz9 = "DELETE FROM tb_messenger WHERE last_login<'$olddate'"; //ammettendo che il campo si chiami last_login
    mysql_query($queryz9) or die(mysql_error());
    
    echo "<b>Done.</b><br><br>";
    

    }

    ?>
    This Button Will Clean Old Messages/Newsletter.
    <br><br>
    <form method="post" action="index.php?op=38">
    <input type="hidden" name="clean" value="clean">
    <input type="submit" Value="Clean" class="button">
    </form>[/php]
    Vedi se funziona 😉

    P.S. Anche se in questo caso non ti serve, se devi trasformare la data del Db in timestamp dovrai procedere così:

    2008-09-29 20:34:00
    ```per usare mktime() ti serve separare la data a pezzi: giorno, mese, anno, ore, minuti, secondi.
    io procedo così:
    sostituisco lo spazio ed i : con il -
    [php]$date=str_replace(" ", "-", $date);
    $date=str_replace(":", "-", $date);[/php]in questo modo $data conterrà la nostra data in questo modo
    

    2008-09-29-20-34-00

    [php]list($Y, $m, $d, $H, $i, $s) = explode ("-", $date);[/php]a questo punto avrai:
    $Y=2008 (anno)
    $m=9(mese)
    $d=29(giorno)
    $H=20(ora)
    $i=34(minuti)
    $s=0(secondi)
    adesso puoi utilizzare la funzione mktime() per ottenere il timestamp relativo a questa data
    la sintassi di mktime() è
    

    int mktime ( int $hour, int $minute, int $second, int $month, int $day, int $year [, int $is_dst] )

    [php]$date=mktime($H, $i, $s, $m, $d, $Y);[/php]a questo punto puoi tranquillamente effettuare la tua sottrazione
    

    time() - $date

    
    riepilogo:
    
    [php]$date=str_replace(" ", "-", $date);
    $date=str_replace(":", "-", $date);
    list($Y, $m, $d, $H, $i, $s) = explode ("-", $date);
    $date=mktime($H, $i, $s, $m, $d, $Y);[/php]

  • Bannato Super User

    Ciao samy

    ho provato la tua pagina ma c'è qualcosa che non va, non cancella correttamente i messaggi.

    penso che errore sia in TIME() - 300 (o altro valore)

    Ho corretto col nome della colonna che contiene la data varchar

    codice pagina

    <b>Clean Old Messages/Newsletter</b>
    <br><br>

    <?
    if ($_POST)
    {
    $tabla5 = mysql_query("SELECT * FROM tb_messenger ORDER BY id ASC"); // selecciono todos los registros de la tabla usuarios, ordenado por nombre

    $olddate = time() - 300; // abbiamo così il timestamp della data limite, prima di questa cancelliamo tutti gli utenti
    
    //adesso dobbiamo trasformarla in data equivalente al Db
    $olddate = date ("d-m-Y H:i:s", $olddate);
    
    
    $queryz9 = "DELETE FROM tb_messenger WHERE date<'$olddate'"; //ammettendo che il campo si chiami date
    mysql_query($queryz9) or die(mysql_error());
    
    echo "<b>Done.</b><br><br>";
    

    }

    ?>
    This Button Will Clean Old Messages/Newsletter.
    <br><br>
    <form method="post" action="index.php?op=38">
    <input type="hidden" name="clean" value="clean">
    <input type="submit" Value="Clean" class="button">
    </form>

    Nel database il formato della data è
    varchar giorno-mese-anno ora: minuti

    29-09-08 23:36

    E' davvero complicata questa funzione, mannaggia

    in ogni caso grazie lo stesso per il lungo lavoro.
    provo anche le altre parti dello script sperando di riuscirci.

    Se hai altri suggerimenti dimmi pure, mi sa che vengo da te direttamento tanto abito vicino 🙂


  • Consiglio Direttivo

    Varchar :mmm:

    Beh..andrebbe impostato a DATETIME veramente :mmm:
    altra cosa, le date, per confrontarle, vanno messe obbligatoriamente nel formato inglese
    anno-mese-giorno ore:minuti:secondi

    la cosa è trubbola, come si dice dalle mie parti :eheh:

    Sicuro che non è possibile trasformare quella data in Timestamp o almeno in formato inglese? magari modificando lo script...
    così la vedo lunga da fare ed in ogni caso scomoda 😞


  • Bannato Super User

    Sono riuscito a trasformare la data cosi:

    1222727525

    é cosi memorizzata nel database cosi adesso (non ho cambiato niente nel database è sempre varchar ma la memorizza in questo formato)

    Con la data cosi si puo fare qualcosa?

    IO non capisco neppure come calcolare i giorni in questo formato.

    Grazie mille per l'aiuto.


  • Consiglio Direttivo

    cambiala in INT invece di VARCHAR e nello script di prima togli questo pezzo

    [php]//adesso dobbiamo trasformarla in data equivalente al Db
    $olddate = date ("d-m-Y H:i:s", $olddate);[/php]

    ora dovrebbe andare 😉


  • Bannato Super User

    Ciao samy

    Per evitare di manipolare troppo lo script faccio cosi

    1. aggiungo una nuova colonna al mysql (tipo INT)
    2. programmo la query basandomi su questa colonna nuova

    Per inserire i dati nella nuova colonna va bene time() ?

    Spero di riuscire, grazie per l'aiuto


  • Consiglio Direttivo

    time ti da il timestamp attuale, quindi si 😄


  • Bannato Super User

    Ciao samy

    ti confermo che avendo creato un campo timestamp con tipo INT ora la query funziona e cancella i vecchi messaggi, ti ringrazio davvero.

    ciao e ancora grazie


  • Consiglio Direttivo

    Di nulla, alla prossima 😉