Visualizzazione risultati 1 fino 2 di 2

Discussione: [MySQL] Confronto tra variabile varchar e variabile data.

  1. #1
    Guest

    Predefinito [MySQL] Confronto tra variabile varchar e variabile data.

    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:


    Codice 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)


    Codice 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.

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Se usi il tipo VARCHAR per date e orari hai sbagliato in partenza.
    MySQL offre tipi di dato appositi, come DATE, DATETIME e TIMESTAMP, che esistono apposta per evitare questi problemi.

    In questo caso specifico, probabilmente il problema è causato dalla mancanza di apici attorno al valore di $condizione.

    Dovresti mostrare un messaggio d'errore quando l'interrogazione fallisce:
    Codice PHP:
    if($result) {
    ...
    }
    else {
    die(
    mysql_error());
    }
    Altro aspetto: le funzioni mysql_* sono deprecate, andrebbero sostituite con mysqli o PDO.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •