• User

    Errore "Incorrect decimal value" inserendo valore NULL

    Ciao a tutti,

    non riesco a capire cosa devo fare, ho una tabella in MySQL definita così:

    CREATE TABLE `qm_optometria` (
      `ID_Cliente` int(10) NOT NULL,
      `ID_Occhiale` int(10) NOT NULL,
      `Data` date NOT NULL,
      `IntTabo` enum('INT','TABO') default 'TABO',
      `SferaLDx` decimal(4,2) default NULL,
      `SferaLSx` decimal(4,2) default NULL,
      `CilindroLDx` decimal(4,2) default NULL,
      `CilindroLSx` decimal(4,2) default NULL,
      `AsseLDx` int(3) default NULL,
      `AsseLSx` int(3) default NULL,
      `PrismaLDx` decimal(4,2) default NULL,
      `PrismaLSx` decimal(4,2) default NULL,
      `BaseLDx` decimal(4,2) default NULL,
      `BaseLSx` decimal(4,2) default NULL,
      `SferaVDx` decimal(4,2) default NULL,
      `SferaVSx` decimal(4,2) default NULL,
      `CilindroVDx` decimal(4,2) default NULL,
      `CilindroVSx` decimal(4,2) default NULL,
      `AsseVDx` int(3) default NULL,
      `AsseVSx` int(3) default NULL,
      `PrismaVDx` decimal(4,2) default NULL,
      `PrismaVSx` decimal(4,2) default NULL,
      `BaseVDx` decimal(4,2) default NULL,
      `BaseVSx` decimal(4,2) default NULL,
      `DPL` int(2) default NULL,
      `HPup` int(2) default NULL,
      `Diametro` int(2) default NULL,
      `NoteOcchiali` varchar(100) default NULL,
      PRIMARY KEY  (`ID_Occhiale`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    

    (prima i DECIMAL erano FLOAT ma gli errori erano uguali) e se cerco di fare un UPDATE o un INSERT con un valore NULL in un campo DECIMAL compare questo errore:

    UPDATE qm_optometria 		SET  		ID_Cliente='0', 		ID_Occhiale='6', 		Data='2009-01-14', 		IntTabo='TABO', 		SferaLDx='NULL', 		SferaLSx='0.25', 		CilindroLDx='-1.50', 		CilindroLSx='-2.75', 		AsseLDx='75', 		AsseLSx='80', 		SferaVDx='0.00', 		SferaVSx='0.00', 		CilindroVDx='0.00', 		CilindroVSx='0.00', 		AsseVDx='0', 		AsseVSx='0', 		DPL='75', 		HPup='0', 		NoteOcchiali='' 		 WHERE  		ID_Occhiale='6' - Incorrect decimal value: 'NULL' for column 'SferaLDx' at row 1
    

    Se al posto del NULL utilizzo lo 0 (zero) funziona, ovvio, ma per me 0 NON E' null, è zero appunto.

    Avete qualche consiglio al riguardo? Ho provato a cercare l'errore nel forum ma non ho trovato niente.

    Grazie! :ciauz:


  • Consiglio Direttivo

    Ciao Alcatraz,
    hai provato mettendo
    [php]SferaLDx=NULL, [/php]
    ? 🙂


  • User

    Caspita, così funziona! Ora però non so come fare a assare il NULL senza apici in PHP.

    Io ho questo campo nel form:

    [PHP]<td class="cellaCampoFormCent" bgcolor="#fab4e4"><input type="text" name="form[SferaLDx]" value="<?php print $form["SferaLDx"] ?>" maxlength="3" size="5" class="CampoForm"></td>[/PHP]

    e lo passo ad una funzione che fa un update

    [PHP]occhialiUpdate($ID_Cliente,

                .....................,
    
                $form["SferaLDx"],
    
                .....................,
    
                $form["NoteOcchiali"]);[/PHP]
    

    definita così:

    [PHP]function occhialiUpdate($ID_Cliente,......,$SferaLDx,.......,$NoteOcchiali)
    {
    global $link, $occhiali_table;
    $query = "UPDATE ".$occhiali_table."
    SET
    ID_Cliente='$ID_Cliente',
    ...............................,
    SferaLDx='$SferaLDx',
    ...............................,
    NoteOcchiali='$NoteOcchiali'
    ";

        $query=$query." WHERE ID_Occhiale='$ID_Occhiale'";
        $result = mysql_query ($query, $link);
        if (! $result )
            die ("errore di aggiornamento in ".$query." - ".mysql_error() );
    }[/PHP]
    

    Esiste un sistema per ciclare un controllo su ogni variabile, che se è valorizzata metta gli apici e se non lo è esegua l'update con un NULL senza apici?

    Grazie!


  • Consiglio Direttivo

    Beh dato che son numeri puoi togliere gli apici per questi campi numerici. 😉

    Il problema stas nel fatto che 'NULL' è una stringa invece** NULL** è proprio quello che a te serve. 😉


  • User

    Che sbadato, caspita! Non avevo pensato che essendo numeri potevo togliere gli apici, pur avendo compreso il motivo del NULL non funzionante!

    Stasera provo poi tornerò per un feedback, per ora grazie mille!!!


  • Consiglio Direttivo

    Attendiamo il responso con ansia. 😄


  • User

    Uff, niente, ancora errore.

    La query che passa php è

    [php]UPDATE qm_optometria SET ID_Cliente='0', ID_Occhiale='6', Data='2009-01-14', IntTabo='TABO', SferaLDx=, SferaLSx=0.25, CilindroLDx=-6.00, CilindroLSx=-2.75, AsseLDx=75, AsseLSx=80, SferaVDx=0.00, SferaVSx=0.00, CilindroVDx=0.00, CilindroVSx=0.00, AsseVDx=0, AsseVSx=0, DPL=75, HPup=0, NoteOcchiali='' WHERE ID_Occhiale='6'[/php]

    ma dà errore

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' SferaLSx=0.25, CilindroLDx=-6.00, CilindroLSx=-2.75, AsseLDx=75, ' at line 7Che cosa sbaglio ancora? :mmm:

    Grazie per l'aiuto enorme che mi stai dando!!!


  • Consiglio Direttivo

    Prova a togliere dalla query questo:

    SferaLDx=,
    

  • User

    Ma esiste un sistema per farlo in automatico secondo te, o devo proprio farlo a mano?

    Nel senso, nella funzione io gli passo i parametri, ma se il campo è vuoto gli passo NULL, che però in php non si può passare, ossia è vuoto.

    Così la funzione

    [php]function occhialiUpdate($ID_Cliente,$ID_Occhiale,$Data,$IntTabo,$SferaLDx,$SferaLSx,$CilindroLDx,$CilindroLSx,$AsseLDx,$AsseLSx,$PrismaLDx,$PrismaLSx,$BaseLDx,$BaseLSx,$SferaVDx,$SferaVSx,$CilindroVDx,$CilindroVSx,$AsseVDx,$AsseVSx,$PrismaVDx,$PrismaVSx,$BaseVDx,$BaseVSx,$DPL,$HPup,$Diametro,$NoteOcchiali)
    {
    global $link, $occhiali_table;
    $query = "UPDATE ".$occhiali_table."
    SET
    ID_Cliente='$ID_Cliente',
    ID_Occhiale='$ID_Occhiale',
    Data='$Data',
    IntTabo='$IntTabo',
    SferaLDx=$SferaLDx,
    SferaLSx=$SferaLSx,
    CilindroLDx=$CilindroLDx,
    CilindroLSx=$CilindroLSx,
    AsseLDx=$AsseLDx,
    AsseLSx=$AsseLSx,
    SferaVDx=$SferaVDx,
    SferaVSx=$SferaVSx,
    CilindroVDx=$CilindroVDx,
    CilindroVSx=$CilindroVSx,
    AsseVDx=$AsseVDx,
    AsseVSx=$AsseVSx,
    DPL=$DPL,
    HPup=$HPup,
    NoteOcchiali='$NoteOcchiali'
    ";

        $query=$query." WHERE 
        ID_Occhiale='$ID_Occhiale'";
        $result = mysql_query ($query, $link);
        if (! $result )
            die ("errore di aggiornamento in ".$query." - ".mysql_error() );
    }[/php]se $SferaLDx è vuoto, mette nella query **$SferaLDx=,** proprio perchè non c'è nulla nella variabile.
    

    Io dovrei per forza nella funzione esaminare per ogni campo, in qualche modo,

    [php]if ($SferaLDx == "")
    $SferaLDx = NULL;[/php]Come posso fare nella funzione a fare un controllo del genere?

    Dovrei fare una cosa tipo

    [PHP].........................
    IntTabo='$IntTabo',".
    if (SferaLDx=="") ."SferaLDx=NULL,".
    else."SferaLDx=$SferaLDx,[/PHP]

    per ogni campo?


  • Consiglio Direttivo

    Beh al recupero dati potresti fare

    [php]if ($_POST['sferadx']) { $sferadx=$_POST['sferadx']; } else { $sferadx=null;}[/php]


  • User

    Ma questo lo faccio, infatti ad inizio pagina vi è un controllo

    [php]
    if ($form["SferaLDx"] == "")
    $form["SferaLDx"] = NULL;
    if ($form["SferaLSx"] == "")
    $form["SferaLSx"] = NULL;
    if ($form["CilindroLDx"] == "")
    $form["CilindroLDx"] = NULL;
    if ($form["CilindroLSx"] == "")
    $form["CilindroLSx"] = NULL;
    .........................................
    [/php]quando io però poi chiamo la funzione con

    [php]
    if (isset($actionflag) && $actionflag=="Update") {
    if ( $message == "") {
    $result = occhialiUpdate($ID_Cliente,
    $ID_Occhiale,
    $form["Data"],
    $form["IntTabo"],
    $form["SferaLDx"],
    $form["SferaLSx"],
    $form["CilindroLDx"],
    $form["CilindroLSx"],
    ...........................
    $form["NoteOcchiali"]);
    $message = "Dati Aggiornati!";
    }
    }[/php]la funzione di cui sopra occhialiUpdate mette $SferaLDx=, e non $SferaLDx=NULL,.


  • User

    Forse ci sono, secondo me dovrei fare una cosa del tipo

    [PHP]
    $query = "UPDATE ".$occhiali_table."
    SET
    ID_Cliente='$ID_Cliente',
    ID_Occhiale='$ID_Occhiale',
    Data='$Data',
    IntTabo='$IntTabo',"

        if ($SferaLDx)
            {
                $query=$query."SferaLDx=$SferaLDx,";
            }
        $query=$query."
    
        SferaLSx=$SferaLSx,
        CilindroLDx=$CilindroLDx,
        CilindroLSx=$CilindroLSx,
        AsseLDx=$AsseLDx,
        AsseLSx=$AsseLSx,
        SferaVDx=$SferaVDx,
        SferaVSx=$SferaVSx,
        CilindroVDx=$CilindroVDx,
        CilindroVSx=$CilindroVSx,
        AsseVDx=$AsseVDx,
        AsseVSx=$AsseVSx,
        DPL=$DPL,
        HPup=$HPup,
        NoteOcchiali='$NoteOcchiali'
        ";
    
        $query=$query." WHERE 
        ID_Occhiale='$ID_Occhiale'";
        $result = mysql_query ($query, $link);
    

    [/PHP]

    con il controllo centrale (da fare per ogni variabile numerica)

    [PHP]
    if ($SferaLDx)
    {
    $query=$query."SferaLDx=$SferaLDx,";
    }
    [/PHP]

    che aggiunge alla query il campo se è valorizzato, se no passa oltre.

    Solo che così dà errore. Voi cosa ne pensate? Qualcuno di buona volontà è per caso in grado di correggere il mio codice?

    Grazie!


  • User

    Risolto, direi. Mancava un ;

    Il codice corretto dovrebbe essere (perdonatemi i tagli)

    [PHP]
    .....................

        IntTabo='$IntTabo',";
        if ($SferaLDx)
            {
                $query=$query."SferaLDx=$SferaLDx,";
            }
        else
            {
                $query=$query."SferaLDx=NULL,";
            }
        $query=$query."
        SferaLSx=$SferaLSx,
    
        .....................
    

    [/PHP]

    Se avete idee su come ottimizzare il tutto fatemi sapere, altrimenti direi che la mia richiesta si conclude qui!

    Grazie mille! :ciauz:


  • Consiglio Direttivo

    Eccomi, scusa per il ritardo, giornata pienotta. 🙂

    Beh, direi che va bene come soluzione, non incorri nei pericoli di campi null 😉