Back to top

Autore Topic: Valore NULL in un campo Decimal  (Letto 6381 volte)

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Valore NULL in un campo Decimal
« il: 12 Ott 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.

Codice: [Seleziona]
<?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

Codice: [Seleziona]
     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

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:Valore NULL in un campo Decimal
« Risposta #1 il: 12 Ott 2012, 15:43:10 »
Dimenticavo

Joomla è la versione 2,5
Il db MySql è un InnoDB e la codifica è utf8_general_ci



mau_develop

  • Visitatore
Re:Valore NULL in un campo Decimal
« Risposta #2 il: 12 Ott 2012, 16:29:38 »
un campo numerico può contenere un null? ...ovvero, un numero può essere "niente"?

imposta il campo come not null default 0

M.

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:Valore NULL in un campo Decimal
« Risposta #3 il: 12 Ott 2012, 16:59:22 »
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

mau_develop

  • Visitatore
Re:Valore NULL in un campo Decimal
« Risposta #4 il: 12 Ott 2012, 17:21:52 »
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.

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Valore NULL in un campo Decimal
« Risposta #5 il: 12 Ott 2012, 18:46:28 »
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
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:Valore NULL in un campo Decimal
« Risposta #6 il: 15 Ott 2012, 11:07:09 »
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 :(

mau_develop

  • Visitatore
Re:Valore NULL in un campo Decimal
« Risposta #7 il: 15 Ott 2012, 12:20:15 »
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.

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Valore NULL in un campo Decimal
« Risposta #8 il: 15 Ott 2012, 12:31:55 »
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.


BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:Valore NULL in un campo Decimal
« Risposta #9 il: 15 Ott 2012, 12:32:56 »
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  ???

Offline federcla

  • Esploratore
  • **
  • Post: 139
  • Sesso: Maschio
    • Mostra profilo
Re:Valore NULL in un campo Decimal
« Risposta #10 il: 15 Ott 2012, 12:43:08 »
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???

mau_develop

  • Visitatore
Re:Valore NULL in un campo Decimal
« Risposta #11 il: 15 Ott 2012, 13:06:45 »
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.

 



Web Design Bolzano Kreatif