- Home
- Categorie
- Coding e Sistemistica
- PHP
- Errore "Incorrect decimal value" inserendo valore NULL
-
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!
-
Ciao Alcatraz,
hai provato mettendo
[php]SferaLDx=NULL, [/php]
?
-
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!
-
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.
-
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!!!
-
Attendiamo il responso con ansia.
-
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?
Grazie per l'aiuto enorme che mi stai dando!!!
-
Prova a togliere dalla query questo:
SferaLDx=,
-
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?
-
Beh al recupero dati potresti fare
[php]if ($_POST['sferadx']) { $sferadx=$_POST['sferadx']; } else { $sferadx=null;}[/php]
-
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,.
-
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!
-
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!
-
Eccomi, scusa per il ritardo, giornata pienotta.
Beh, direi che va bene come soluzione, non incorri nei pericoli di campi null