[MySQL] Confronto tra variabile varchar e variabile data.

Michele9423

Nuovo Utente
5 Gen 2018
1
0
1
Salve a tutti, sono nuovo sul forum e spero di aver azzeccato la sezione giusta per la mia problematica.
Ho creato su un webserver un database che possiede 12 campi tra cui anche un campo per la data e uno per l'ora (entrambi varchar). Tutti i campi vengono popolati correttamente attraverso una INSERT INTO presente su una pagina php. Per la data e l'ora ho utilizzato nella query INSERT INTO le seguenti istruzioni:

date('d/m/Y') per la data.
date('H:i:s') per l'orario.

Arriviamo al problema:

Attraverso il seguente codice inserisco una data che servirà nel file g.php per un confronto con il campo data del db:

HTML:
<html>
<head>
   <meta charset="utf-8">
</head>
<body>
<form action= "g.php"  method="post">
   <label>Inserisci la data della quale si vuole visualizzare il grafico  </label>
     <input type="date" name="data">
   <input type="reset"  value="Resetta il form">
   <input type="submit" value="Invia">
</form>
</body>
</html>


Questo è il file g.php che riceve la data inserita ed effettua il confronto con la data del db con una query.
(il seguente codice ha come fine quello di creare un grafico popolato da temperatura sull'asse delle y e orario sull'asse delle x in base alla query)

PHP:
?php
include("connect.php");
include("phpgraphlib.php");
$condizione=$_POST["data"];
$link=Connection();
$graph=new PHPGraphLib(750,550);
$dataArray=array();

$queryb="SELECT AVG (Temperatura) AS 'Temperatura',Ora FROM Rilevazioni WHERE Data='.$condizione.' GROUP BY Ora";

$result=mysql_query($queryb,$link) ;
if($result) {
     while($row = mysql_fetch_array($result)) {
            $temperatura=$row["Temperatura"];
            $ora=$row["Ora"];

//associo ad ogni elemento dell'array individuato dallo specifico Id, il proprio valore di temperatura
            $dataArray[$ora]=$temperatura;
       }
}
//inserisco i dati nel grafico e lo costruisco

$graph->addData($dataArray);
$graph->setTitle('Temperatura');
$graph->setGradient('red', 'maroon');
$graph->setDataValues(true);
$graph->setDataValueColor('red');
$graph->createGraph();
?>

Il problema che riscontro è che il grafico non viene popolato quando è presente il WHERE nella query, e da qui deduco che il problema sia proprio nel confronto tra il valore del campo data del db (varchar) e il valore della variabile data che passo alla query. Togliendo il WHERE, il grafico viene visualizzato correttamente.

Spero sia stato chiaro e che abbiate capito la mia problematica.
In attesa di una vostra risposta, vi ringrazio anticipatamente.
 
nel database ti conviene conservare le date nel formato 'Y-m-d', con questo formato puoi gestire tutte le operazioni di ordinamento nella query, di selezione per minore e/o maggiore e quant'altro necessario

poi guardati questo codice,
PHP:
echo "data nel database = ".date('Y-m-d')."<br />";

$_POST["data"]= "5/1/2018";

echo "data inserita nel form = ".$_POST["data"]."<br />";

$dt = DateTime::createFromFormat('d/m/Y', $_POST["data"]);  // data recuperata in formato "locale"

$condizione= $dt->format('Y-m-d');

echo "data condizione = ".$condizione."<br />";
che produce questo risultato
upload_2018-1-5_22-23-54.png

con le date devi anche considerare il formato "locale" e la "timezone" ma forse non ti interessano

da ultimo controlla le date nel db, che abbiano il formato atteso
 

Discussioni simili