Visualizzazione risultati 1 fino 7 di 7

Discussione: Problema mysql

  1. #1
    Guest

    Predefinito Problema mysql

    Salve ho un problema tra php e db mysql. Praticamente ho una pagina php che con il database 5.1 sempre di altervista non dava problemi, ma dopo aver fatto l'aggiornamento al 5.6 mi compare : Incorrect integer value: '' for column 'id' at row 1.
    come posso risolvere?
    il codice è il seguente
    Codice PHP:
    <?php
    // refresh php
    header("Refresh: 1; url=" . $_SERVER["PHP_SELF"]);

    // dichiaro le variabili che ricevo da arduino
    //settype ( $sec, "integer" );
    $id = $_GET['id'];
    $temperatura = $_GET['t'];
    $umidita = $_GET['h'];
    $luminosita = $_GET['pluce'];
    $pioggia = $_GET['pioggia'];
    $uv = $_GET['uv'];
    $pressione = $_GET['pres'];
    $altitudine = $_GET['alt'];
    //$tmsp = strtotime("now");
    //$data = date('d m Y',$tmsp);
    //setlocale(LC_TIME,"it_IT");
    $data = date("d m Y H:i:s");
    sleep(1);

    $tempo = $_GET['sec'];

    // effettuo la connessione al mysql

    $host = "www.MIOSITO.altervista.org";
    $database = "MIODB";
    $password = "MIAPASS";
    $link = mysql_connect($host, $database, $password);

    if (!
    $link)
    {
    die(
    'non connesso : ' . mysql_error());
    }
    // effettuo la connessione al database mysql
    $db_selected = mysql_select_db("MIO DB", $link);
    if (!
    $db_selected)
    {
    die (
    'Non è grave; possibile connettersi al database : ' . mysql_error());
    }
    // seleziono la tabella nella quale memorizzare i dati
    $query = mysql_query("SELECT * FROM meteo");
    $fetch = mysql_fetch_array($query);
    // inserisco i valori
    if (mysql_query("INSERT INTO meteo(id,tempo,temperatura,umidita,luminosita,pioggia,uv,pressione,altitudine,data) VALUES('$id','$tempo','$temperatura','$umidita','$luminosita','$pioggia','$uv','$pressione','$altitudine','$data') ")or die(mysql_error()))
    {
    // se tutto è andato a buon fine...
    echo "OK";
    echo
    date ("d m Y H:i:s");
    echo
    " tempo: ";
    echo
    $tempo;
    // if ($tempo>=3600)
    //{
    $query = mysql_query("TRUNCATE TABLE meteo");
    $fetch = mysql_fetch_array($query);
    //}
    }
    else
    {
    echo
    "ERROR";
    }
    ?>
    Ultima modifica di peppejfc : 08-05-2017 alle ore 21.53.53

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

    Predefinito

    Dovresti ispezionare il valore di $_GET['id'] che stai usando nella costruzione della query.
    Basta anche un var_dump($id) prima dell'interrogazione per capire cosa stai cercando di passargli.

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Dovresti ispezionare il valore di $_GET['id'] che stai usando nella costruzione della query.
    Basta anche un var_dump($id) prima dell'interrogazione per capire cosa stai cercando di passargli.
    Rimane sempre NULL.
    Ultima modifica di peppejfc : 10-05-2017 alle ore 12.38.12

  4. #4
    Guest

    Predefinito

    Nessuno ha una soluzione?

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

    Predefinito

    Questo spiega il comportamento osservato. Nel momento in cui costruisci la query così:
    Codice PHP:
    "INSERT INTO meteo(id,tempo,temperatura,umidita,luminosita,pioggia,uv,pressione,altitudine,data) VALUES('$id','$tempo','$temperatura','$umidita','$luminosita','$pioggia','$uv','$pressione','$altitudine','$data') "
    stai anche interpolando "$id", ottenendo una stringa vuota. Ma il campo id della tua tabella è (verosimilmente) di tipo numerico, non stringa!

    La soluzione è utilizzare $id senza virgolette nella query, oppure non specificare affatto il campo id (quest'ultima opzione ha senso solo se il campo id ha l'opzione AUTO_INCREMENT, come accade solitamente):
    Codice PHP:
    "INSERT INTO meteo(tempo,temperatura,umidita,luminosita,pioggia,uv,pressione,altitudine,data) VALUES('$tempo','$temperatura','$umidita','$luminosita','$pioggia','$uv','$pressione','$altitudine','$data') "

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Questo spiega il comportamento osservato. Nel momento in cui costruisci la query così:
    Codice PHP:
    "INSERT INTO meteo(id,tempo,temperatura,umidita,luminosita,pioggia,uv,pressione,altitudine,data) VALUES('$id','$tempo','$temperatura','$umidita','$luminosita','$pioggia','$uv','$pressione','$altitudine','$data') "
    stai anche interpolando "$id", ottenendo una stringa vuota. Ma il campo id della tua tabella è (verosimilmente) di tipo numerico, non stringa!

    La soluzione è utilizzare $id senza virgolette nella query, oppure non specificare affatto il campo id (quest'ultima opzione ha senso solo se il campo id ha l'opzione AUTO_INCREMENT, come accade solitamente):
    Codice PHP:
    "INSERT INTO meteo(tempo,temperatura,umidita,luminosita,pioggia,uv,pressione,altitudine,data) VALUES('$tempo','$temperatura','$umidita','$luminosita','$pioggia','$uv','$pressione','$altitudine','$data') "
    id è AUTO_INCREMENT. L'ho tolto ma adesso mi da l'errore : Incorrect integer value: '' for column 'tempo' at row 1

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

    Predefinito

    Discorso analogo: se tempo è un campo numerico non dovresti usare le virgolette trattandolo come stringa.

Regole di scrittura

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