[PHP] Ricerca con data timestamp

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Salve sono di nuovo a chiedere lumi a chi ne sa più di me, ho la necessità di creare una form di ricerca su un campo con data timestamp, però l'utente nella ricerca digita la data formato nel formato 01-01-2016.
Qualcuno mi sa aiutare?
Grazie
Max61
 
Puoi utilizzare la funzione strtotime.
Codice:
$timestamp1 = strtotime("25.08.2016");  //25/08/2016 - ore 0:00
$timestamp2 = $timestamp1+86399;  //25/08/2016 - ore 23:59:59

Poi, se devi ricercare in una tabella sql, dovrai utilizzare una query tipo questa:
Codice:
$query = "SELECT * FROM NomeTabella WHERE NomeColonnaTimestamp BETWEEN ".$timestamp1." AND ".$timestamp2;
 
Ciao e grazie per la risposta, ti spiego meglio
io ho un unico campo dove fare le ricerche, si chiama $str_data, come posso fare?
 
Non sono sicuro di avere capito cosa hai già e cosa devi fare.
Tu hai un form con un campo di tipo testo, quando il form viene inviato la variabile $str_data assume il valore del campo di testo.
Giusto?
 
Scusa, provo
ho il campo $str_data, è tipo varchar dove salvo la data in questo formato 1471989600, in questo campo voglio fare le ricerche per data, ma l'utente nella ricerca digita la data nel formato 01-01-2016.
Con la speranza di essermi spiegato...
Ciao
 
str_data quindi è il campo di una tabella sql, giusto?
Mi aveva confuso il segno $
 
Non hai specificato cosa vuoi fare dei risultati.
Questo semplice script che ho fatto li inserisce in una tabella html.
PHP:
<?php
$DB_SERVER = "";
$DB_USERNAME = "";
$DB_PASSWORD = "";
$DB_DATABASE = "";
$DB = mysqli_connect($DB_SERVER,$DB_USERNAME,$DB_PASSWORD,$DB_DATABASE);
?>
<html>
    <head>
        <title>Ricerca</title>
        <style>
            table, td, th, tr {
                border: 1px solid #000000;
            }
            tr, th, td {
                padding-left: 7px;
                padding-right: 7px;
                text-align: center;
            }
            table {
                border-top: 15px;
            }
        </style>
    </head>
    <body>
        <h1>Ricerca</h1>
        <form action="" method="post">
            <input name="data" type="date" value="<?php if (isset($_POST['form-ricerca'])) {echo $_POST['data'];}?>"/>
            <button name="form-ricerca" type="submit">Cerca</button>
        </form>
        <?php
        if (isset($_POST['form-ricerca'])) {
            $nome_tabella = "tblprenotazioneauto";
            $data = $_POST['data'];
            $data = explode("-", $data);
            $timestamp1  = mktime(0,0,0,$data[1],$data[2],$data[0]);
            $timestamp2 = mktime(23,59,59,$data[1],$data[2],$data[0]);
            $field = array();
            $query = "DESCRIBE ".$nome_tabella;
            $result = $DB->query($query);
            while ($resultarray=$result->fetch_assoc()) {
                $field[] = $resultarray['Field'];
            }
            echo "<table>";
            echo "<tr>";
            foreach ($field as $thisfield) {
                echo "<th>".$thisfield."</th>";
            }
            echo "</tr>";
            $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2;
            $result = $DB->query($query);
            while ($resultarray=$result->fetch_assoc()) {
                echo "<tr>";
                foreach ($field as $thisfield) {
                    echo "<td>".$resultarray[$thisfield]."</td>";
                }
                echo "</tr>";
            }
            echo "</table>";
        }
        $DB->close();
        ?>
    </body>
</html>
 
Voglio poter fare una ricerca per data e visualizzare il risultato a video.
Grazie
Ciao
 
Se con risultato intendi una semplice tabella come quella di sql con le righe interessate, lo script che ho scritto sopra dovrebbe fare al caso tuo.
 
Sì e se necessario la potrei anche stampare.
Adesso non posso provarlo domani ti faccio sapere.
Grazie ancora
Max61
 
E' perfetto, ma se io volessi fare la mia ricerca in un intervallo di date?
Es.: tra il 01/07/2016 e il 31/07/2016, è possibile?
E' inoltre possibile incrociare la ricerca con un un altro parametro cioè con il valore del campo 'tipouscita'?
Un ultima cosa, il valore del campo 'str_data' nella tabella a video lo vedo sotto questa forma '1471989600', è possibile convertirlo almeno in visualizzazione in data umana (25/08/2016)?
Grazie
Max61
 
Ultima modifica:
Per ricercare in un intervallo di date ti basta mettere un altro input di tipo data nel form, e nel codice php metti che $timestamp1 è uguale alla prima data alle ore 0:00 mentre $timestampe2 è uguale alla seconda data alle ore 23:59.
Per tipouscita puoi mettere un input di testo o select, e nella query di ricerca del database aggiungi "AND tipouscita=...".
Per visualizzare il timestamp come data puoi usare la funzione data.
Quindi il codice diventerebbe così:
PHP:
<?php
$DB_SERVER = "";
$DB_USERNAME = "";
$DB_PASSWORD = "";
$DB_DATABASE = "";
$DB = mysqli_connect($DB_SERVER,$DB_USERNAME,$DB_PASSWORD,$DB_DATABASE);
?>
<html>
    <head>
        <title>Ricerca</title>
        <style>
            table, td, th, tr {
                border: 1px solid #000000;
            }
            tr, th, td {
                padding-left: 7px;
                padding-right: 7px;
                text-align: center;
            }
            table {
                border-top: 15px;
            }
        </style>
    </head>
    <body>
        <h1>Ricerca</h1>
        <form action="" method="post">
            Da: <input name="data1" type="date" value="<?php if (isset($_POST['data1'])) {echo $_POST['data1'];}?>" required/>
            a: <input name="data2" type="date" value="<?php if (isset($_POST['data2'])) {echo $_POST['data2'];}?>"/>
            <input name="tipouscita" type="text" placeholder="Tipo uscita" value="<?php if (isset($_POST['tipouscita'])) {echo $_POST['tipouscita'];}?>"/>
            <button name="form-ricerca" type="submit">Cerca</button>
        </form>
        <?php
        if (isset($_POST['form-ricerca'])) {
            $nome_tabella = "tblprenotazioneauto";
            if ($_POST['data2']<1) {
                $_POST['data2'] = $_POST['data1'];
            }
            $data1 = $_POST['data1'];
            $data1 = explode("-", $data1);
            $timestamp1  = mktime(0,0,0,$data1[1],$data1[2],$data1[0]);
            $data2 = $_POST['data2'];
            $data2 = explode("-", $data2);
            $timestamp2 = mktime(23,59,59,$data2[1],$data2[2],$data2[0]);
            $field = array();
            $query = "DESCRIBE ".$nome_tabella;
            $result = $DB->query($query);
            while ($resultarray=$result->fetch_assoc()) {
                $field[] = $resultarray['Field'];
            }
            echo "<table>";
            echo "<tr>";
            foreach ($field as $thisfield) {
                echo "<th>".$thisfield."</th>";
            }
            echo "</tr>";
            if ($_POST['tipouscita']!=null AND $_POST['tipouscita']!="") {
                $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2." AND tipouscita='".$_POST['tipouscita']."'";
            }
            else {
                $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2;
            }
            $result = $DB->query($query);
            while ($resultarray=$result->fetch_assoc()) {
                echo "<tr>";
                foreach ($field as $thisfield) {
                    if ($thisfield=="str_data") {
                        echo "<td>".date("d/m/Y",intval($resultarray[$thisfield]))."</td>";
                    }
                    else {
                        echo "<td>".$resultarray[$thisfield]."</td>";   
                    }
                   
                }
                echo "</tr>";
            }
            echo "</table>";
        }
        $DB->close();
        ?>
    </body>
</html>
 
GRAZIEEEEE!!!
E' perfetto, un ultima cosa, posso scegliere i campi da visualizzare?
Nella query che hai fatto me li estrae tutti, se provo a digitare i campi di mio interesse al pèsto di asterisco mi da errore sui campi non estratti della tabella, non è possibile fare una estrazione soltanto di alcuni?
Qui mi da l'errore echo "<td>".$resultarray[$thisfield]."</td>";
Allego query
$query = "SELECT id, nominativo, ecc. FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2." AND tipouscita='".$_POST['tipouscita']."'";
Ciao e INFINITAMENTE GRAZIE
Max61
 
Sostituisci tutto con questo:
PHP:
<?php
$DB_SERVER = "";
$DB_USERNAME = "";
$DB_PASSWORD = "";
$DB_DATABASE = "";
$DB = mysqli_connect($DB_SERVER,$DB_USERNAME,$DB_PASSWORD,$DB_DATABASE);
?>
<html>
    <head>
        <title>Ricerca</title>
        <style>
            table, td, th, tr {
                border: 1px solid #000000;
            }
            tr, th, td {
                padding-left: 7px;
                padding-right: 7px;
                text-align: center;
            }
            table {
                border-top: 15px;
            }
        </style>
    </head>
    <body>
        <h1>Ricerca</h1>
        <form action="" method="post">
            Da: <input name="data1" type="date" value="<?php if (isset($_POST['data1'])) {echo $_POST['data1'];}?>" required/>
            a: <input name="data2" type="date" value="<?php if (isset($_POST['data2'])) {echo $_POST['data2'];}?>"/>
            <input name="tipouscita" type="text" placeholder="Tipo uscita" value="<?php if (isset($_POST['tipouscita'])) {echo $_POST['tipouscita'];}?>"/>
            <button name="form-ricerca" type="submit">Cerca</button>
        </form>
        <?php
        if (isset($_POST['form-ricerca'])) {
            $nome_tabella = "tblprenotazioneauto";
            $field = array("str_data");
            if ($_POST['data2']<1) {
                $_POST['data2'] = $_POST['data1'];
            }
            $data1 = $_POST['data1'];
            $data1 = explode("-", $data1);
            $timestamp1  = mktime(0,0,0,$data1[1],$data1[2],$data1[0]);
            $data2 = $_POST['data2'];
            $data2 = explode("-", $data2);
            $timestamp2 = mktime(23,59,59,$data2[1],$data2[2],$data2[0]);
            echo "<table>";
            echo "<tr>";
            foreach ($field as $thisfield) {
                echo "<th>".$thisfield."</th>";
            }
            echo "</tr>";
            if ($_POST['tipouscita']!=null AND $_POST['tipouscita']!="") {
                $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2." AND tipouscita='".$_POST['tipouscita']."'";
            }
            else {
                $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2;
            }
            $result = $DB->query($query);
            while ($resultarray=$result->fetch_assoc()) {
                echo "<tr>";
                foreach ($field as $thisfield) {
                    if ($thisfield=="str_data") {
                        echo "<td>".date("d/m/Y",intval($resultarray[$thisfield]))."</td>";
                    }
                    else {
                        echo "<td>".$resultarray[$thisfield]."</td>";  
                    }
                   
                }
                echo "</tr>";
            }
            echo "</table>";
        }
        $DB->close();
        ?>
    </body>
</html>
e metti nell'array $field i campi da visualizzare
 
  • Like
Reactions: Max61
Scusami ancora una cosa se non disturbo troppo
se io volessi analizzare 2 campi insieme cioè il campo tipouscita e il campo matricola
come potrei fare?
Ho provato ma non ci sono riuscito, la ricerca me la fa soltanto su uno valorizzato.
Grazie
Max61
 
PHP:
<?php
$DB_SERVER = "";
$DB_USERNAME = "";
$DB_PASSWORD = "";
$DB_DATABASE = "";
$DB = mysqli_connect($DB_SERVER,$DB_USERNAME,$DB_PASSWORD,$DB_DATABASE);
?>
<html>
    <head>
        <title>Ricerca</title>
        <style>
            table, td, th, tr {
                border: 1px solid #000000;
            }
            tr, th, td {
                padding-left: 7px;
                padding-right: 7px;
                text-align: center;
            }
            table {
                border-top: 15px;
            }
        </style>
    </head>
    <body>
        <h1>Ricerca</h1>
        <form action="" method="post">
            Da: <input name="data1" type="date" value="<?php if (isset($_POST['data1'])) {echo $_POST['data1'];}?>" required/>
            a: <input name="data2" type="date" value="<?php if (isset($_POST['data2'])) {echo $_POST['data2'];}?>"/>
            <input name="tipouscita" type="text" placeholder="Tipo uscita" value="<?php if (isset($_POST['tipouscita'])) {echo $_POST['tipouscita'];}?>"/>
            <input name="matricola" type="text" placeholder="Matricola" value="<?php if (isset($_POST['matricola'])) {echo $_POST['matricola'];}?>"/>
            <button name="form-ricerca" type="submit">Cerca</button>
        </form>
        <?php
        if (isset($_POST['form-ricerca'])) {
            $nome_tabella = "tblprenotazioneauto";
            $field = array("str_data");
            if ($_POST['data2']<1) {
                $_POST['data2'] = $_POST['data1'];
            }
            $data1 = $_POST['data1'];
            $data1 = explode("-", $data1);
            $timestamp1  = mktime(0,0,0,$data1[1],$data1[2],$data1[0]);
            $data2 = $_POST['data2'];
            $data2 = explode("-", $data2);
            $timestamp2 = mktime(23,59,59,$data2[1],$data2[2],$data2[0]);
            echo "<table>";
            echo "<tr>";
            foreach ($field as $thisfield) {
                echo "<th>".$thisfield."</th>";
            }
            echo "</tr>";
            if (!empty($_POST['tipouscita'])) {
                $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2." AND tipouscita='".$_POST['tipouscita']."'";
            }
            elseif (!empty($_POST['matricola'])) {
                $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2." AND matricola='".$_POST['matricola']."'";
            }
            elseif (!empty($_POST['tipouscita']) AND !empty($_POST['matricola'])) {
                $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2." AND tipouscita='".$_POST['tipouscita']."' AND matricola='".$_POST['matricola']."'";
            }
            else {
                $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2;
            }
            $result = $DB->query($query);
            while ($resultarray=$result->fetch_assoc()) {
                echo "<tr>";
                foreach ($field as $thisfield) {
                    if ($thisfield=="str_data") {
                        echo "<td>".date("d/m/Y",intval($resultarray[$thisfield]))."</td>";
                    }
                    else {
                        echo "<td>".$resultarray[$thisfield]."</td>"; 
                    }
                  
                }
                echo "</tr>";
            }
            echo "</table>";
        }
        $DB->close();
        ?>
    </body>
</html>
 
Ciao e grazie per la pazienza ma con elseif l'avevo provato anche io, ma verifica il campo tipouscita o il campo matricola l'uno esclude l'altro.
 

Discussioni simili