Campo Date non riempito

alonzo

Well-known member
Ho una tabella in cui i campi vengono riempiti di volta in volta a seconda delle diverse figure professionali che vi accedono in modalità "Modifica".
Tuttavia, se non vengono riempiti anche i campi "Date" (non obbligatori) il sistema inserisce la data "0000-00-00" generando l'Alert: "hai inserito una o più date non valide", disorientando chi inserisce i dati.
Come posso fare?
cm




DaDaBIK version 8.0-Lerici enterprise, installed on 28.04.2017 (installation code: ), the latest version of DaDaBIK is 8.0-Lerici released on 24.04.2017
PHP Version: 5.5.38
mysql version: 5.0.92-enterprise-gpl-log
Web server: Apache
Client: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36
 

eugenio

Administrator
Staff member
Ciao,
l'errore e' in fase di inserimento o di modifica?
Mi sembra strano che avvenga in fase di inserimento: se non si compila un campo data il campo rimane vuoto, DaDaBIK non lo riempie con 0000-00-00; puo' essere invece che MySQL trasformi silenziosamente quel campo vuoto in 0000-00-00 quando inserisce il record ma questo non genera errori in fase di inserimento caso mai successivamente in fase di aggiornamento quando si riapre la form in modifica.

Detto questo, il modo piu' semplice per gestire campi data che potrebbero rimanere non compilati è il seguente:
- lato database, lasciare che i campi data possano assumere il valore NULL
- lato dadabik, settare $treat_blank_as_null = 1 in config.php
 

alonzo

Well-known member
Si, come detto era in fase di modifica.
Ho settato prima MySql e poi dadabik come hai suggerito e ora funziona tutto.

Ho notato però, che il settaggio $null_word = '/'; che ho appena inserito per non visualizzare campi vuoti, non viene visualizzato (in Result) nei campi formattati con "Custom formatting function", così come avviene per i campi data che, se formattati, appaiono (sempre in Result) in formato inglese.
Ciao e grazie
 

eugenio

Administrator
Staff member
Scusa in effetti avevi specificato MODIFICA, non ci avevo fatto caso.

Riguardo al secondo punto si tratta in effetti di un bug che si verifica quando un campo è NULL e contemporaneamente ha una formatting function attiva; grazie per aver riportato dettagliatamente le informazioni necessarie per il debug.

Ecco un veloce fix, il problema verra' risolto in dadabik 8.1:

- in business_logic.php dovresti avere questa linea di codice per tre volte:
$field_to_display = implode(' ', $field_values_ar[$x]);

sostituiscila con queste:

if ( is_null($field_values_ar[$x][0]) && count($field_values_ar[$x]) === 1 ){
$field_to_display = NULL;
}
else{
$field_to_display = implode(' ', $field_values_ar[$x]);
}

fammi sapere se risolve tutti i problemi.

Ciao
 

alonzo

Well-known member
Si funziona, con queste eccezioni:
select_multiple_checkbox e select_multiple_menu in fase di inserimento e non riempie i generic_file solo in fase di modifica (precedentemente vuoti).
La data, se formattata, è sempre in formato inglese.
Ciao
 

eugenio

Administrator
Staff member
Ciao,
non ho capito il tuo ultimo messaggio: la modifica al codice che ho proposto dovrebbe consentire di, in caso di custom function + valore NULL, mostrare comunque il valore settato in $null_word in due parti dell'applicazione:
- results grid (tabella dei risultati, es. dopo una ricerca)
- details page (pagina di dettaglio di un record)

inserimento e modifica non dovrebbero essere toccati da questa cosa, mi sbaglio?
 

alonzo

Well-known member
Diciamo che quello che hai suggerito funziona perfettamente.
Tuttavia, in visualizzazione RESULT GRID non è possibile vedere il valore settato in $null_word se sono presenti campi select_multiple_checkbox e select_multiple_menu, che rimarranno in bianco anche dopo aver salvato il record.

Vedi nell'img i campi Servizio (select_multiple_checkbox) e TdP incaricato (select_multiple_menu)
cm
Immagine3.jpg
 

eugenio

Administrator
Staff member
Ho verificato, hai ragione, il fix per select_multiple non e' cosi' immediato ma sara' fatto quanto prima.
Per quanto riguarda invece i campi "generic_file" mi risulta che, se sono NULL, viene mostrato correttamente $null_word, nella tua installazione non e' cosi'?
 

alonzo

Well-known member
Si infatti, nei campi "generic_file", se sono NULL, in fase di inserimento viene mostrato correttamente $null_word.
Il problema si evidenzia soltanto se il settaggio $null_word viene avviato quando esistono già dei record (il mio caso).
Mentre tutti gli altri campi in fase modifica si aggiornano mostrando quanto settato (nel mio caso $null_word = '/'), i file generic_file tendono a rimanere vuoti o "in bianco", mentre funziona bene (come gli alti tipi di campo, esclusi i multiple) in fase di primo inserimento.
cm
 

eugenio

Administrator
Staff member
Non riesco a replicare il problema, tu sei sicuro che il record abbia in effetti NULL nel database per quei campi?
Ho fatto questa prova:
- entro in modifica di un record avente un generic_file riempito con un file
- modifica del record cancellando il file (senza sostituire con altro file)
in results in corrispondenza del campo ora vedo /
 

alonzo

Well-known member
Relativamente ai soli campi generic_file:

ho inserito il settaggio $null_word = '/' quando esistevano già dei record con alcuni campi generic_file, i quali non riportano il settaggio se apro e salvo il record senza riempire campi.

Se inserisco un nuovo record funziona tutto bene in inserimento e modifica (appare NULL anche in phpmyadmin).

Sono i campi generic_file dei record esistenti prima di inserire il settaggio che non ne vogliono sapere di aggiornarsi con "/" (anche in phpmyadmin appaiono bianchi e vuoti).
 

eugenio

Administrator
Staff member
Ok, se in phpmyadmin non sono NULL e' normale che non vengano visualizzati come /

Il problema ora e' chiaro: DaDaBIK mette a NULL questi campi solo se cancelli il file relativo, ma se non hanno un file associato e in origine non avevi attiva l'opzione $treat_blank_as_null, rimarranno vuoi (e non nulli) se li modifichi.

Per riportare tutto alla "normalità" dovresti con una query aggiornare i campi valorizzati '' a NULL, es.
update miatabella set campo_file = NULL where campo_file = ''

Ciao
 
Top