Joomla.it Forum
Non solo Joomla... => Database => : federcla 12 Oct 2012, 15:40:12
-
Ciao a tutti,
ho un problema con il valore inserito in un campo decimal del db, sto effettuando l'inserimento in una tabella tramite un form realizzato con ChronoForms.
Il mio problema è che ho alcuni campi numerici da inserire nelle rispettive righe della tabella che possono essere vuoti, NULL, quando faccio la INSERT, sia manualmente che con l'actions di ChronoForms, invece di mettermi NULL come valore mi setta il campo con 0.00, che ovviamente non è la stessa cosa.
<?php
$user =& JFactory::getUser();
$user_id = $user->id;
$ip_addr = $_SERVER['REMOTE_ADDR'];
$an = $form->data['anno'];
$ms = $form->data['mese'];
$a_t = $form->data['assistenza'];
$rz = $form->data['riparazioni'];
$c_f = $form->data['software'];
$hw = $form->data['hardware'];
if ($a_t == ''){ $a_t = 'NULL';}
if ($rz == ''){ $rz = 'NULL';}
if ($c_f == ''){ $c_f = 'NULL';}
if ($hw == ''){ $hw = 'NULL';}
$db =& JFactory::getDBO();
$ins = "INSERT INTO sks_app_form_ic VALUES (null,now(),'0000-00-00 00:00:00','$ip_addr','$user_id','$an','$ms','$a_t','$rz','$c_f','$hw')";
$db->setQuery($ins);
$db->query();
?>
Ho provato anche a settare in questo modo le variabili
if ($a_t == ''){ $a_t = NULL;}
if ($rz == ''){ $rz = NULL;}
if ($c_f == ''){ $c_f = NULL;}
if ($hw == ''){ $hw = NULL;}
Ma non funziona.
Avete qualche consiglio da darmi?
ciao e grazie
-
Dimenticavo
Joomla è la versione 2,5
Il db MySql è un InnoDB e la codifica è utf8_general_ci
-
un campo numerico può contenere un null? ...ovvero, un numero può essere "niente"?
imposta il campo come not null default 0
M.
-
un campo numerico può contenere un null? ...ovvero, un numero può essere "niente"?
imposta il campo come not null default 0
M.
Che io sappia si, il null semplicemente indica che è vuota, che non ci sono valori, infatti se gli passo da codice una insert e ai campi metto valore NULL, nel db mi scrive NULL, fa la stessa cosa se seleziono il campo direttamente in phpmyadmin, apre una finestrella con una checkbox che mi chiede se voglio riempire il campo con valore NULL
Il Problema è che non mi serve un valore = 0 mi serve NULL
-
e allora è none e non null
comunque è buona logica che un numero sia sempre un numero, il fatto che a te serve ...niente è probabilmente perchè non riesci a gestire il problema dopo.
M.
-
ciao, lo puoi fare, il campo che contiene il decimale deve avere null impostato a si, e quando vai a fare l'insert devi specificare le voci che vai a inserire specificando anche il SET nella query, se tu gli passi null per il mysql equivale a 0.00 se non gli passi nulla invece mette null. Ho fatto una prova nel db a mano quindi non ti garantisco che funzioni.
Ciao
-
ciao, lo puoi fare, il campo che contiene il decimale deve avere null impostato a si, e quando vai a fare l'insert devi specificare le voci che vai a inserire specificando anche il SET nella query, se tu gli passi null per il mysql equivale a 0.00 se non gli passi nulla invece mette null. Ho fatto una prova nel db a mano quindi non ti garantisco che funzioni.
Ciao
Avevo fatto anche io delle prove da DB, ma quando gli passo la query da php non funziona, non riconoscce le variabili, se lascio la stringa vuota o la setto a NULL cmq mi mette sempre 0,00
L'unico modo è inserire NULL nella query stessa, ma non posso sapere il valore della variabile :(
-
devi vedere se lo schema tables permette il null per quella colonna, solitamente no, oppure puoi provare a farlo al di fuori di joomla perchè potrebbero essere gli statement di joomla a renderlo non nullabile
M.
-
io
Avevo fatto anche io delle prove da DB, ma quando gli passo la query da php non funziona, non riconoscce le variabili, se lascio la stringa vuota o la setto a NULL cmq mi mette sempre 0,00
L'unico modo è inserire NULL nella query stessa, ma non posso sapere il valore della variabile :(
ma infatti io ti ho detto un'altra cosa, devi mettere nella colonna che contiene il decimale la possibilita di inserire valori nulli, come dice mau_develop in genere questo compo e impostato a no cioe non prende valori nulli. poi tu imposti nella insert tutti i campi passandogli nulla al decimale che in automatico ti converte in 0.00, prova a impostare la query con insert into bla set ('a','b',c' ecc) values (a1,b1,c1) ecc e se il campo deve essere nullo no lo passi, oppure altra soluzione puoi aggiungere un ulteriore colonna alla tabella chiamandola isnull e la setti a 1 se devi interpretare il 0.00 come null. non mi sembra una questione cosi impossibile.
-
devi vedere se lo schema tables permette il null per quella colonna, solitamente no
Nello schema del db ho settato il NULL a SI ed ho messo NULL come valore predefinito
oppure puoi provare a farlo al di fuori di joomla perchè potrebbero essere gli statement di joomla a renderlo non nullabile
Qui mi sono un po' perso, non ho capito cosa intendi ???
-
io ma infatti io ti ho detto un'altra cosa, devi mettere nella colonna che contiene il decimale la possibilita di inserire valori nulli, come dice mau_develop in genere questo compo e impostato a no cioe non prende valori nulli. poi tu imposti nella insert tutti i campi passandogli nulla al decimale che in automatico ti converte in 0.00, prova a impostare la query con insert into bla set ('a','b',c' ecc) values (a1,b1,c1) ecc e se il campo deve essere nullo no lo passi
Ho già fatto tutte queste prove prima di aprire il post, ma non funziona, nel db mi ritrovo sempre 0.00
oppure altra soluzione puoi aggiungere un ulteriore colonna alla tabella chiamandola isnull e la setti a 1 se devi interpretare il 0.00 come null. non mi sembra una questione cosi impossibile.
L'idea di aggiungere una colonna isnull nel db non mi è di molto aiuto.
Il problema è nato perchè avevo fatto delle prove con una tabella più piccola, e quando gestivo da query lo 0.00 mi modificava anche i valori che avevano 0.00 finale, ex 1000.00 me lo trasformava in 100, sicuramente avevo sbagliato qualcosa nel codice, ora sto facendo altre prove.
Solo che non capisco perchè il db non setta il valore a NULL???? Boh???
-
JTable .... metodo store... parametro public function store($updateNulls = false)
{
... quindi dovrai mettere true nella tua estensione sovrascrivendo il metodo nel caso fosse store() o non ci sia usando il CRUD
M.