[PHP] Ricerca con data timestamp

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio
Scusa, errore mio.
Il primo caso che deve essere verificato è quello in cui vengono compilati entrambi i campi
Prova 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'];}?>"/>
  <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']) AND !empty($_POST['matricola'])) {
  $query = "SELECT * FROM ".$nome_tabella." WHERE str_data BETWEEN ".$timestamp1." AND ".$timestamp2." AND tipouscita='".$_POST['tipouscita']."' AND matricola='".$_POST['matricola']."'";
  }
  elseif (!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']."'";
  }
  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>
 
Scusa ancora ma guardando la tabella mi è venuto in mente di mettere dei nomi alle colonne più significativi per esempio la colonna str_data la chiamerei Data ecc. È possibile una cosa del genere ? Ciao e grazie per la pazienza
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");
  $field_view = array("Data");
  $field_timestamp = 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_view as $thisfield) {
    echo "<th>".$thisfield."</th>";
  }
  echo "</tr>";
  if (!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']."'";
  }
  elseif (!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']."'";
  }
  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 (in_array($thisfield, $field_timestamp)) {
    echo "<td>".date("d/m/Y",intval($resultarray[$thisfield]))."</td>";
  }
  else {
  echo "<td>".$resultarray[$thisfield]."</td>";
  }
  }
  echo "</tr>";
  }
  echo "</table>";
  }
  $DB->close();
  ?>
  </body>
</html>
Nell'array $field inserisci i nomi dei campi come sul database (es. "str_data").
Nell'array $field_view, nello stesso ordine, inserisci i nomi che vuoi visualizzare (es. "Data").
Ho poi aggiunto l'array $field_timestamp, nel caso avrai la necessità di trasformare altri campi timestamp in data (devi inserire il nome come sul database (es. "str_data").
 
ciao
scusate se mi intrometto, ma vorrei dire alcune cose
quando si lavora con le date è sempre bene verificarle
PHP:
<?php
//....
  $data1 = $_POST['data1'];
  $data1 = explode("-", $data1);
  if(!checkdate ( (int)$data1[1] , (int)$data1[0] , (int)$data1[2] ){
      echo "data errata";//e un ritorno automatico al form
  }
   //analogo per data2
?>
comunque verificherei anche i valori proveniento dagli altri post e, ultimo, semplificherei tutti quegli if..else
PHP:
<?php
//....
$wh="";
if(!empty($_POST['tipouscita']) $wk.=" AND tipouscita='".$_POST['tipouscita'];
if(!empty($_POST['matricola'])) $wk.=" AND matricola='".$_POST['matricola'];
$query = "SELECT * FROM $nome_tabella WHERE str_data BETWEEN $timestamp1 AND $timestamp2 $wh";//se il campo str_data e tipo intero, se stringa ci vogliono gli apici
//...
?>
 
Salve Borgo Italia grazie per l'interessamento, ho provato ma mi da errore
$data1 = $_POST['data1'];
$data1 = explode("-", $data1);
if(!checkdate ( (int)$data1[1] , (int)$data1[0] , (int)$data1[2] ){
echo "data errata";//e un ritorno automatico al form
}
$timestamp1 = mktime(0,0,0,$data1[1],$data1[2],$data1[0]);
$data2 = $_POST['data2'];
$data2 = explode("-", $data2);
if(!checkdate ( (int)$data2[1] , (int)$data2[0] , (int)$data2[2] ){
echo "data errata";//e un ritorno automatico al form
}

Parse error: syntax error, unexpected '{' in C:\xampp\htdocs\prenotazioneauto\views\Ricerca.php on line 64
su questa riga
if(!checkdate ( (int)$data1[1] , (int)$data1[0] , (int)$data1[2] ){

Grazie
Max61
 
Manca una parentesi alla fine dell'if
PHP:
if(!checkdate ( (int)$data1[1] , (int)$data1[0] , (int)$data1[2] )){
 
Questo risolto...adesso altro errore
Parse error: syntax error, unexpected '$wk' (T_VARIABLE) in C:\xampp\htdocs\prenotazioneauto\views\Ricerca.php on line 83

$wh="";
if(!empty($_POST['tipouscita']) $wk.=" AND tipouscita='".$_POST['tipouscita'];
if(!empty($_POST['matricola'])) $wk.=" AND matricola='".$_POST['matricola'];
$query = "SELECT * FROM $nome_tabella WHERE str_data BETWEEN $timestamp1 AND $timestamp2 $wh";//se il campo str_data e tipo intero, se stringa ci vogliono gli apici
//...
}
 
Secondo me c'è tutto...comunque ti allego il codice intero, magari un occhio più esperto vede gli errori

PHP:
if (isset($_POST['form-ricerca'])) {
  $nome_tabella = "tblprenotazioneauto";
  $field = array("str_data","nominativo","matricola","orauscita_piedi","oraentrata_piedi","motivo","tipouscita","modificato_da","datamodifica");
  $field_view = array("Data", "Nominativo", "Matricola", "Ora uscita", "Ora entrata", "Motivo", "Tipo uscita", "Modificato da", "Data ora modifica");
  $field_timestamp = array("str_data");
  if ($_POST['data2']<1) {
  $_POST['data2'] = $_POST['data1'];
  }
  $data1 = $_POST['data1'];
  $data1 = explode("-", $data1);
  if(!checkdate ( (int)$data1[1] , (int)$data1[0] , (int)$data1[2] )){
      echo "data errata";//e un ritorno automatico al form
  }
  $timestamp1  = mktime(0,0,0,$data1[1],$data1[2],$data1[0]);
  $data2 = $_POST['data2'];
  $data2 = explode("-", $data2);
  if(!checkdate ( (int)$data2[1] , (int)$data2[0] , (int)$data2[2] )){
      echo "data errata";//e un ritorno automatico al form
  }
  $timestamp2 = mktime(23,59,59,$data2[1],$data2[2],$data2[0]);
  echo "<table>";
  echo "<tr>";
  foreach ($field_view as $thisfield) {
    echo "<th>".$thisfield."</th>";
  }
  echo "</tr>";
  $wh="";
if(!empty($_POST['tipouscita']) $wk.=" AND tipouscita='".$_POST['tipouscita'];
if(!empty($_POST['matricola'])) $wk.=" AND matricola='".$_POST['matricola'];
$query = "SELECT * FROM $nome_tabella WHERE str_data BETWEEN $timestamp1 AND $timestamp2 $wh";//se il campo str_data e tipo intero, se stringa ci vogliono gli apici
//...
  }
  $result = $DB->query($query);
  while ($resultarray=$result->fetch_assoc()) {
  echo "<tr>";
  foreach ($field as $thisfield) {
  if (in_array($thisfield, $field_timestamp)) {
    echo "<td>".date("d/m/Y",intval($resultarray[$thisfield]))."</td>";
  }
  else {
  echo "<td>".$resultarray[$thisfield]."</td>";
  }
  }
  echo "</tr>";
  }
  echo "</table>";
  }
  $DB->close();
  ?>
 
L'avevo già notato e corretto, ma da lo stesso errore
<?php
if (isset($_POST['form-ricerca'])) {
$nome_tabella = "tblprenotazioneauto";
$field = array("str_data","nominativo","matricola","orauscita_piedi","oraentrata_piedi","motivo","tipouscita","modificato_da","datamodifica");
$field_view = array("Data", "Nominativo", "Matricola", "Ora uscita", "Ora entrata", "Motivo", "Tipo uscita", "Modificato da", "Data ora modifica");
$field_timestamp = array("str_data");
if ($_POST['data2']<1) {
$_POST['data2'] = $_POST['data1'];
}
$data1 = $_POST['data1'];
$data1 = explode("-", $data1);
if(!checkdate ( (int)$data1[1] , (int)$data1[0] , (int)$data1[2] )){
echo "data errata";//e un ritorno automatico al form
}
$timestamp1 = mktime(0,0,0,$data1[1],$data1[2],$data1[0]);
$data2 = $_POST['data2'];
$data2 = explode("-", $data2);
if(!checkdate ( (int)$data2[1] , (int)$data2[0] , (int)$data2[2] )){
echo "data errata";//e un ritorno automatico al form
}
$timestamp2 = mktime(23,59,59,$data2[1],$data2[2],$data2[0]);
echo "<table>";
echo "<tr>";
foreach ($field_view as $thisfield) {
echo "<th>".$thisfield."</th>";
}
echo "</tr>";
$wh="";
if(!empty($_POST['tipouscita']) $wh.=" AND tipouscita='".$_POST['tipouscita'];
if(!empty($_POST['matricola'])) $wh.=" AND matricola='".$_POST['matricola'];
$query = "SELECT * FROM $nome_tabella WHERE str_data BETWEEN $timestamp1 AND $timestamp2 $wh";//se il campo str_data e tipo intero, se stringa ci vogliono gli apici
//...
}
$result = $DB->query($query);
while ($resultarray=$result->fetch_assoc()) {
echo "<tr>";
foreach ($field as $thisfield) {
if (in_array($thisfield, $field_timestamp)) {
echo "<td>".date("d/m/Y",intval($resultarray[$thisfield]))."</td>";
}
else {
echo "<td>".$resultarray[$thisfield]."</td>";
}
}
echo "</tr>";
}
echo "</table>";
}
$DB->close();
?>
 
mancava una partentesi per chiudere l'if
PHP:
if(!empty($_POST['tipouscita'])) $wh.=" AND tipouscita='".$_POST['tipouscita'];
 
Ancora errore
data erratadata errata
Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp\htdocs\prenotazioneauto\views\Ricerca.php on line 89
qua
while ($resultarray=$result->fetch_assoc()) {
 
c'è un problema con la query.
prova a sostituire
PHP:
if(!empty($_POST['tipouscita'])) $wh.=" AND tipouscita='".$_POST['tipouscita'];
if(!empty($_POST['matricola'])) $wh.=" AND matricola='".$_POST['matricola'];
con
PHP:
if(!empty($_POST['tipouscita'])) $wh.=" AND tipouscita='".$_POST['tipouscita']."'";
if(!empty($_POST['matricola'])) $wh.=" AND matricola='".$_POST['matricola']."'";
 
Ultima modifica:
Ancora errore sulla stessa riga
Parse error: syntax error, unexpected '$wh' (T_VARIABLE) in C:\xampp\htdocs\prenotazioneauto\views\Ricerca.php on line 83

if(!empty($_POST['tipouscita']) $wh.=" AND tipouscita='".$_POST['tipouscita']."'";
 
scusa, avevo dimenticato la chiusura dell'if
PHP:
if(!empty($_POST['tipouscita'])) $wh.=" AND tipouscita='".$_POST['tipouscita']."'";
 
Adesso la ricerca la fa, ma appena apro la pagina mi da questi errori
Notice: Undefined variable: query in C:\xampp\htdocs\prenotazioneauto\views\RicercaNEW.php on line 88

Warning: mysqli::query(): Empty query in C:\xampp\htdocs\prenotazioneauto\views\RicercaNEW.php on line 88

Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp\htdocs\prenotazioneauto\views\RicercaNEW.php on line 89
 

Discussioni simili