• User Attivo

    Ok. Ho capito il problema.
    Sai cosè il timestamp?
    Senza guardare guide o altro. Non siamo qui per fare bella figura ma per imparare.
    Sincero! 🙂


  • User Attivo

    Credo di aver capito che timestamp al momento della scrittura del record "fissa" il momento (data e ora) che in unix parte dal 1970 e viene / veniva? scritta come un insieme di numeri (secondi? a partire dal 1970?) sto facendo dei test in ambiente win con xampp quindi:
    Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 phpmyadmin 3.2.4
    la data mi viene restituita da phpmyadmin già formattata in formato:

    yyyy-mm-dd hh:mm:ss

    ci sono vicino? :mmm:


  • User Attivo

    Abbastanza.
    Timestamp è il valore in secondi del tempo trascorso dal primo gennaio 1970.
    Quindi se timestamp ti formatta in automatico un timestamp non è quello che serve a te (non se vuoi lavorare con il timestamp).
    Se puoi cambiare il database ti consiglio di cambiare il campo data da timestamp a varchar (15).
    Se non puoi ti tocca usare la funzione strtotime().
    Quindi ti diventerebbe così:
    [PHP]<?php
    $query=mysql_query("SELECT * FROM tabella ORDER BY data DESC");

    echo '<table width="70%" border="1">';
    while ($row_test = mysql_fetch_assoc($query)){
    $time=strtotime($row_test['data']);?>
    <tr>
    <th scope="col"><?php echo $row_test['id']; ?></th>
    <th scope="col"><?php echo $row_test['cognome']; ?></th>
    <th scope="col"><?php echo $row_test['stato']; ?></th>
    <th scope="col"><?php echo date("d-m-Y",$time); ?></th>
    <th scope="col"><?php echo date("H:i:m",$time); ?></th>
    <th scope="col"><?php echo $row_test['ip']; ?></th>
    </tr>
    <?php } ?>
    </table>[/PHP]
    Così dovrebbe andare.


  • User Attivo

    Ok,
    ma a quel punto mi tocca inviare data e ora come variabile e non prendermi il valore di timestamp di default, allora come sfruttare questa comodità?
    Di solito invio da form o da variabile presa al volo da php, mi piaceva sfruttare il timestamp, semplicemente perchè esiste! Se mi puoi spiegare meglio...
    il tuo codice prevede quindi il cambiamento del campo in varchar, 15, è esattamente quello che facevo prima... (due campi, 1 data varchar 10, 1 time varchar 😎 non si smette mai di imparare...:D


  • User Attivo

    Dentro il varchar 15 (esagero sempre nei valori, non si sa mai) dovrai inserire dalla query INSERT il valore time() che è il timestamp di quel momento.
    Niente NOW() o CURRENT_DATE, solo time().
    Dopodiché avrai una stringa di numeri che elabori come più ti aggrada (in questo thread ti ho fatto vedere semplici esempi di come però si usa maggiormente il timestamp.
    Fai questi cambiamenti e vedrai nella tabella in mysql, nel campo data, un numero tipo 1165425682. Quello è il timestamp.


  • User Attivo

    OKKK!!!
    In effetti così funziona, ossia mi restituisce tutti i record giusti, lasciando il campo come timestamp, quindi il campo è formattato da phpmyadmin in lettura ma come base dati dovrebbe essere in secondi, mi sa che devo studiare ancora molto :D.
    Ma, per il discorso della select? come visualizzo solo i due record dove la data è uguale a oggi?

    SELECT * FROM tabella WHERE data = ? ORDER BY data DESC

    Ogni consiglio è benevenuto. 🙂


  • User Attivo

    Prova così:
    [PHP]("SELECT * FROM tabella WHERE 'date(d,'data')'='date(d,time())' ") or die ("Errore nella query");[/PHP]

    Non garantisco, me la sono inventata ora, però prova.


  • User Attivo

    No,
    'date(d,'data')'='date(d,time())', ritorna 'error in your syntax near ...'
    se ho capito fai un check del tipo:
    dove il giorno? (d) è contenuto in campo data ed è uguale al giorno del time?

    Mi sa che così non può funzionare perchè se hai per assurdo due time uguali ti bypassa la data? (ipotesi?).
    Oppure un semplice check dove data è uguale a oggi?
    'date(Y,m,d,'data')'='date(now())'.


  • User Attivo

    Esatto, il controllo era quello.
    Allora agisci direttamente sui risultati.
    Nel ciclo while metti
    [PHP]if(date("dmY",$row_test['data'])==date("dmY",time())){
    //visualizzi il codice
    }
    //non ti serve l'else poiché non ti interessa vedere gli altri valori.[/PHP]
    Così analizzi tutti i record uno per uno e se la data è uguale al giornomeseanno(non è importante la formattazione poiché ti serve fare un confronto tra due valori, non visualizzarli) di oggi allora te li visualizza.


  • User Attivo

    Mmm... mi sa che non va,
    non vedo più nulla neanche l'errore

    [PHP]echo '<table width="70%" border="1">';
    do {
    $time=strtotime($row_test['data']);
    if(date("dmY",$row_test['data'])==date("dmY",time())){
    ?>
    <tr>
    <th scope="col"><?php echo $row_test['id']; ?></th>
    <th scope="col"><?php echo $row_test['cognome']; ?></th>
    <th scope="col"><?php echo $row_test['stato']; ?></th>
    <th scope="col"><?php echo date("d-m-Y",$time); ?></th>
    <th scope="col"><?php echo date("H:i:m",$time); ?></th>
    <th scope="col"><?php echo $row_test['ip']; ?></th>
    </tr>
    <?php
    }
    } while ($row_test = mysql_fetch_assoc($test));
    ?>
    </table> [/PHP]

    Se invece commento l'if e la graffa finale vedo tutto perfettamente, ergo l'ho posizionato male.

    Any ideas? :mmm:


  • User Attivo

    Non è che non ti stampa nulla perché non hai record con la data di oggi?!?!?!?!
    Se ce li hai, a scanso di equivoci:
    [PHP]
    <?php echo '<table width="70%" border="1">';
    do {

    $time=strtotime($row_test['data']);
    echo "Timestamp estratto:".$time."<br>";
    $datime=date("d-m-Y",$row_test['data']);
    echo "Tempo da timestamp:".$datime."<br>";
    $timeora=date("d-m-Y",time());
    echo "Tempo ora:".$timeora."<br><br>";

    if($datime==$timeora){
    ?>
    <tr>
    <th scope="col"><?php echo $row_test['id']; ?></th>
    <th scope="col"><?php echo $row_test['cognome']; ?></th>
    <th scope="col"><?php echo $row_test['stato']; ?></th>
    <th scope="col"><?php echo date("d-m-Y",$time); ?></th>
    <th scope="col"><?php echo date("H:i:m",$time); ?></th>
    <th scope="col"><?php echo $row_test['ip']; ?></th>
    </tr>
    <?php
    }
    } while ($row_test = mysql_fetch_assoc($test));
    ?>
    </table>[/PHP]


  • User Attivo


    Id 9 e 10 sono date di oggi, comunque orami stampa il tuo test ma non la tabella.

    [html]Timestamp estratto:1267971977
    Tempo da timestamp:01-01-1970
    Tempo ora:07-03-2010

    Timestamp estratto:1267971952
    Tempo da timestamp:01-01-1970
    Tempo ora:07-03-2010

    Timestamp estratto:1267874197
    Tempo da timestamp:01-01-1970
    Tempo ora:07-03-2010

    Timestamp estratto:1267874170
    Tempo da timestamp:01-01-1970
    Tempo ora:07-03-2010

    Timestamp estratto:1267787747
    Tempo da timestamp:01-01-1970
    Tempo ora:07-03-2010[/html]

    Ne deduco che non funziona il do/while se metti un IF? Come vedi i timestamp sono diversi ma le date sono tutte oggi, dove è l'inghippo?


  • User Attivo

    scusa, errore mio.
    Sto studiando jQuery e ogni tanto vado in pallone!

    La if doveva essere così:
    [PHP]if(date("dmY",strtotime($row_test['data']))==date("dmY",time())){
    //visualizzi il codice
    } [/PHP]

    Mi ero dimenticato di convertire la data nuovamente in timestamp! 😄

    Oggi sono veramente :microsoft:


  • User Attivo

    OK!!!
    Funziona!

    Bella jquery... la uso ma devo ancora studiarla, vedo che fa delle cose...
    Comunque nel risultato escono due record giusti. Ora ho capito un pò di più, in realtà conviene tirare fuori il dato così com'è e lavorarlo in php.

    Grazie della disponibilità!


  • User Attivo

    Figurati.
    I dati evito di convertirli nella query. Mi trovo meglio ad avere tutti i dati (tipo $time=time(); per avere sempre il timestamp di quel momento) sempre disponibili.

    jQuery invece è una brutta bestia, tanto bella quanto infernale. Se ti dimentichi una virgola mica te lo dice!!! 😛

    Comunque mooolto affascinante.

    Ciao e a buon rendere! :ciauz:


  • User Attivo

    Ciao scusa se riapro e scoccio,
    ma ho un problema di fondo... MYSQL e php on line è il 4, e infatti non visualizzo nulla mentre in locale (MYSQL e php 5) vedo il tutto e perfettamente, puoi aiutarmi ancora? :arrabbiato:
    [PHP]do {
    $time=strtotime($row_test['data']);
    if(date("dmY",strtotime($row_test['data']))==date("dmY",time())){
    ?>
    <tr>
    <td><?php echo $row_test['cognome']; ?></td>
    <td><?php echo date("d-m-Y",$time); ?></td>
    <td><?php echo date("H:i:m",$time); ?></td>
    <?php if ($row_test['data1'] == "")
    {
    echo "<td>- - - - - -</td>";
    }
    else
    {
    echo "<td>".$row_test['data1']."</td>";
    }
    ?></td>
    <td><?php echo $row_test['ip']; ?></td>
    <td><?php echo $row_test['host']; ?></td>
    </tr>
    <?php
    }
    } while ($row_test = mysql_fetch_assoc($test));
    ?>
    </table> [/PHP]
    Grazie ancora


  • User Attivo

    Non ho capito la domanda ma prova così:
    [PHP]<?php while ($row_test = mysql_fetch_assoc($test)) {
    $time=strtotime($row_test['data']);
    //se abbiamo le variabili settate, usiamole! 😉
    if(date("dmY",$time)==date("dmY",time())){
    ?>
    <tr>
    <td><?php echo $row_test['cognome']; ?></td>
    <td><?php echo date("d-m-Y",$time); ?></td>
    <td><?php echo date("H:i:m",$time); ?></td>
    <?php if ($row_test['data1'] == "")
    {
    echo "<td>- - - - - -</td>";
    }
    else
    {
    echo "<td>".$row_test['data1']."</td>";
    }
    ?></td>
    <td><?php echo $row_test['ip']; ?></td>
    <td><?php echo $row_test['host']; ?></td>
    </tr>
    <?php
    }
    }?>
    </table>[/PHP]


  • User Attivo

    Ciao sorry,
    il vizio di scrivere in fretta...

    In ambiente di test locale (a casa) ho PHP 5 e MYSQL 5,
    in produzione ho (server remoto) PHP v4 e MYSQL v4,
    la parte di script che ho allegato funziona perfettamente in locale, ma non ne vuole sapere di funzionare in remoto su piattaforma PHP v4 e MYSQL v4, ovviamente non essendo un esperto ho pensato ad un problema di compatiblità versioni, la domanda è:
    Mi puoi aiutare e/o spiegare come risolvere il problema di compatibilità?

    Ho provato a cercare in rete ma ho risolto solo per un'altra query (portandola da mysql v5 a v4) ma non per la visualizzazione della tabella che, semplicemente, non appare e non dà errore d'altronde la query è la più semplice del mondo:
    SELECT * FROM orario ORDER BY data DESC.

    Grazie


  • User Attivo

    Quando ci sono problemi di compatibilità, devi sempre controllare ogni singola funzione sul sito di php.net, come per esempio lo strtotime, che è compatibile con php4:
    it.php.net/manual/en/function.strtotime.php

    Fai così con tutte le funzioni e vedi cosa ti da problemi, anche se sembra non ci siano incompatibilità.

    :ciaosai:


  • User Attivo

    Ciao
    Non mi pare di aver trovato nulla di strano a parte questo:
    se commento questa stringa,
    [php]
    //if(date("Y-m-d",$time)==date("Y-m-d",time())){
    [/php]
    (quella scritta da te),
    mi ritorna i risultati ma senza le date (data default 1970), ma a me pare sia tutto giusto...

    Idee?

    Grazie