Campo riempito automaticamente

alonzo

Well-known member
Ciao,
qual'è il sistema migliore per far si che riempiendo tutti i campi di un record, abbia un ultimo campo (non visibile in CREATE) riempito automaticamente dal prodotto delle voci di 3 campi del record stesso.

Ad esempio nel record ho un campo COMUNI in cui ho inserito Roma, un campo RAZZA in cui ho inserito Oche, e il campo NUM in cui viene generato il numero progressivo.
Una volta riempiti tutti i campi, l'ultimo dovrebbe apparire con i 3 campi specificati: Roma-Oche-23.
E' possibile?


You are using DaDaBIK version 8.1-Lerici enterprise, installed on 02.10.2017
You are not running the last release of DaDaBIK, the release you are running might have bugs and security holes, see the official change log for further information. You can upgrade DaDaBIK here.
PHP Version: 7.1.12
mysql version: 5.0.92-enterprise-gpl-log
Web server: Apache
Client: Mozilla/5.0 (Wind
ows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36
 

eugenio

Administrator
Staff member
Ciao,
devi utilizzare una calculated field function che ti concateni il valore dei due campi e generi il numero sequenziale, concatenandolo anch'esso.
Dal form configurator, parametro "Calculated field function" puoi vedere i dettagli su come impostare queste funzioni.

Ciao,
 

alonzo

Well-known member
Ma, quello che mi dovrebbe comparire nell'ultimo campo non deve essere una somma matematica di numeri ma semplicemente l'elenco testuale di 3 campi riempiti nelle stesso record es: campoA-campoB-campoC
 

eugenio

Administrator
Staff member
La funzione calculated field non deve necessariamente eseguire una somma, può eseguire qualsiasi operazione, è una normale funzione PHP in cui puoi scrivere ciò che vuoi, compreso il codice che semplicemente concateni tre stringhe.
 

alonzo

Well-known member
Ho inserito questo in custom_functions.php e l'ho richiamato nel form:

function dadabik_calculate_codice($parameters_ar){

if ( $parameters_ar['Animali_allevati'] !== '' && !is_null($parameters_ar['Animali_allevati']) && $parameters_ar['Comuni'] !== '' && !is_null($parameters_ar['Comuni'])){
return ($parameters_ar['Animali_allevati'] + $parameters_ar['Comuni']);
}
else{
return NULL;
}

}



sperando di ottenere nel campo "codice" il risultato dei due campi citati...ma ottengo un campo vuoto.
 

alonzo

Well-known member
Mi correggo, ottengo questo:

[08] Error: during query execution. INSERT INTO `Codice_allevamenti` (`Allevamento`, `Animali_allevati`, `Indirizzo_produttivo`, `Tipologia_allevamento`, `Comune`, `Capacita`, `Cognome`, `Nome`, `Cod_Fisc`, `Indirizzo`, `ID-User`, `Telefono`, `Email`, `Note`, `CODICE`, `Data_inserimento`, `Data_aggiornamento`) VALUES ('~Avicunicoli~', '~Anatre~', '~Uova~', '~Gabbia~', '3-Cineto Romano', 'N. 555', 'asdf', 'asdfasdf', 'asdf', 'asdf', 'webmaster', '5234234', '', '', NULL, '2018-02-23 13:30:34', '2018-02-23 13:30:34')
The DBMS server said: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'CODICE' cannot be null
 

eugenio

Administrator
Staff member
Il secondo errore è dovuto al fatto che il campo codice non può essere nullo, per concatenare due stringhe in PHP l'operatore e' il punto

return ($parameters_ar['Animali_allevati'] .' '. $parameters_ar['Comuni']);

Ciao,
 

alonzo

Well-known member
Niente da fare....

function dadabik_calculate_codice($parameters_ar){

if ( $parameters_ar['Animali_allevati'] !== '' && !is_null($parameters_ar['Animali_allevati']) && $parameters_ar['Comuni'] !== '' && !is_null($parameters_ar['Comuni'])){
return ($parameters_ar['Animali_allevati'] .' '. $parameters_ar['Comuni']);
}
else{
return NULL;
}

}

[08] Error: during query execution. INSERT INTO `Codice_allevamenti` (`Allevamento`, `Animali_allevati`, `Indirizzo_produttivo`, `Tipologia_allevamento`, `Comune`, `Capacita`, `Cognome`, `Nome`, `Cod_Fisc`, `Indirizzo`, `ID-User`, `Telefono`, `Email`, `Note`, `CODICE`, `Data_inserimento`, `Data_aggiornamento`) VALUES ('~Avicoli~', '~Anatre~', '~Uova~', '~Gabbia~', '4-Cervara Di Roma', 'N. 34', 'FASDFAS', 'ERQWER', 'DFASDF', 'QEWR', 'webmaster', '234', '', '', NULL, '2018-02-24 16:22:51', '2018-02-24 16:22:51')
The DBMS server said: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'CODICE' cannot be null


Non so se è importante ma non ho i parametri $null impostati in config...
 

alonzo

Well-known member
Ok, ti ringrazio...avevo pure controllato!
Adesso credo venga il difficile, ossia generare il numero sequenziale e concatenarlo al valore generato...
Un aiutino...
 

eugenio

Administrator
Staff member
Ciao,
non è una cosa che si puo' risolvere in una riga di codice, io esplorerei la generazione attraverso una sequenza del DB (più sicura) oppure scriverei su DB (soluzione meno sicura, a meno di non usare transazioni) o su di un file di testo (non molto sicura, in caso di accesso concorrenziale potresti generare due numeri identici) l'ultimo numero generato.

Saluti,
 
Top