Guide e tutorial pratici per joomla e le sue estensioni
Guide e tutorial pratici per joomla e le sue estensioni

Qualche giorno fà, creando un nuovo form per un cliente mi sono imbattuto nella problematica del controllo dei duplicati, ovvero se nella tabella del nostro database dove sto inserendo il mio dato, questo fosse già presente perchè inserito da un altro operatore oppure semplicemente perchè non lo ricordassi.

Quindi mi occorre qualche meccanismo affinchè all'inserimento di un dato potessi ricevere un messaggio errore in caso quel dato fosse già presente.

Questa problematica, impedire valori duplicati in un campo, serve tutte le volte che abbiamo bisogno di impedire la registrazione di un secondo record identico a quello già presente nella tabella; l'esempio tipico è il controllo del codice fiscale che è univoco, oppure il codice seriale di qualunque cosa.

Prova il form di questa guida: impedire valori duplicati in un campo

Inserisci una tipologia urbanistica tipo: via, viale, vicolo o piazza....poi premi il pulsante.

Nel mio caso, in un form un pò complesso, mi era stato chiesto di poter scegliere la tipologia urbanistica di un indirizzo, tipologie che non conosco e che mi hanno detto in continua "evoluzione", così mi sono creato la mia maschera di inserimento con chronoform ed ho fatto in maniera che un nome duplicato non potesse essere inserito.

Il form su cui ci stiamo concentrando ha una sola textbox ed un pulsante per la sua memorizzazione, se viene inserito un dato già presente nella nostra tabella un messaggio ci avviserà che il nome è già presente.

Come sempre per la realizzazione di questo form utilizzerò chronoforms V5, ma prima della sua realizzazione mi sono creato nel mio database una tabella chiamata TipologiaUrbanistica, dove dentro ho 2 campi: idTipologiaUrbanistica e tipologiaUrbanistica, facendo come sempre attenzione al naming dei campi (vedi maiuscole e minuscole).

Partiamo con inserire nella zona design un elemento textbox ed un elemento submit button (il pulsante) che trascineremo dalla zona basic verso la zona "azzurra", poi inseriamo un elemento custom che trascineremo dalla zona advanced. Nell'elemento custom impostiamo "PURE CODE" inseriremo un pezzettino di codice che riprodurrà un pulsante che ci servirà per tornare indietro, questo il codice:

<a class="btn btn-primary" href="/component/chronoforms5/?amp;view=form&amp;Itemid=115" role="button">torna indietro</a>

Il codice è un link che nel mio caso ci riporta ad una voce di menù, voi potrete cambiare link e farlo puntare dove volete. Da notare anche la classe bootstrap "btn btn-primary" che serve ad avere questo pulsante identico nella forma al pulsante di inserimento.

Configurerò la mia textbox in maniera che nel box "Field Name" inserirò "tipologiaUrbanistica[tipologiaUrbanistica]", mentre nel box "Field ID" inserirò: "tipologiaUrbanistica".

Nel "Field Name" la stringa "tipologiaUrbanistica[tipologiaUrbanistica] va letta nel seguente modo: "MODEL_DEL_DB_SAVE[NOME_CAMPO]".


chronoforms campo duplicato scheda design

Passiamo adesso alla scheda SETUP inserendo gli elementi necessari al funzionamento di questo form:

nella zona On load inseriamo;

  • Un elemento HTML (Render Form) che ricordo indispensabile se vogliamo visualizzare il form

nella zona on submit inseriremo invece;

  • un elemento DB Read che a sua volta conterrà in On found un custom code ed un Event Loop, mentre in On not_found inseriremo un DB Save ed un Display message

Nell'immagine sottostante potrete farvi meglio un idea di come disporre gli elementi

chronoforms controllo campo duplicato scheda setup

Configuriamo adesso il DB Read inserendo:

    • in Action Label un nome qualsiasi per identificare l'elemento
    • Enabled: YES
    • Table Name: TipologiaUrbanistica che è il nome della mia tabella nel mio database
    • Multi Read: NO
    • Enable Model ID: YES
    • Model ID: verifica
    • Fields: tipologiaUrbanistica
    • Condition: inserirò il codice seguente
 <?php return array('verifica.tipologiaUrbanistica' => $form->data['tipologiaUrbanistica']['tipologiaUrbanistica']); ?>

Configuriamo il custom code dentro On found:

  • inseriamo come label dell'elemento un etichetta a piacere, io ho scelto "messaggio di errore"
  • inseriamo nel content il codice seguente:
<?php $form->errors[] = 'Nella tabella esiste già il nome inserito'; ?>

 Il codice appena inserito sarà il messaggio che vedremo se risulterà presente il contenuto di un record identico

 Configuriamo l'elemento DB Save dentro On not_found:

 

  • Action Label un nome qualsiasi per identificare l'elemento
  • Enabled: YES
  • Table Name: TipologiaUrbanistica che è il nome della mia tabella nel mio database
  • Save Under Model ID: YES
  • Multi Save: NO
  • Model ID: tipologiaUrbanistica
  • Force Save: NO
  • Update Conditions:lasciare vuoto

Configuriamo Display message:

  • inseriamo come label dell'elemento un etichetta a piacere, io ho scelto "pulsante nuovo record"
  • inseriamo nel message content il codice seguente:
<h3> Record inserito con successo</h3>
<p><a class="btn btn-primary btn-lg" href="/qui inserisci il tuo link per tornare alla maschera d'inserimento" role="button">inserisci un nuovo record</a></p>

nessuna configurazione andrà fatta per l'elemento Event Loop

Questo tutorial finisce qui, se avete qualche dubbio postate nei commenti, cercherò di rispondervi.

Se la guida vi è piaciuta e sopratutto vi è stata di utilità, potete ringraziarmi offrendomi un caffè o semplicemente cliccando su qualche banner.

offrimi un caffè

Commenti   

0 # Ester 2016-05-26 19:44
Ciao, ho impostato chronoforms come questo manuale per il controllo di email duplicate. Pero' mettendo come nome campo email nome_modo_database[nome campo], non funziona l'invio automatico delle email mettendo in dinamic to il nome del campo email. Come posso fare? Grazie mille
0 # giusebos 2016-05-26 21:14
Non ho capito molto dalla tua spiegazione, quindi ti potrei rispondere fischi per fiaschi.
Inizia a controllare se nella tabella viene salvato il campo email.
Poi ricorda che il namig è importante, magari ti è sfuggito qualcosa.

Da quello che scrivi mi pare di capire che i dati poi vengono spediti per email.....questa funzione è implementabile tranquillamente, ma il tutorial parla solo di salvare una dato su una tabella facendo un controllo di quel campo, se il valore esiste.

la cosa migliore sarebbe quella di scaricare il backup del form e reinstallarlo nel tuo sito, poi modificherai la tabella dove preleva i dati e quella dove li salva.
0 # Ester 2016-05-26 22:17
Ciao,
grazie risposta. Ho installato il tuo form sul mio sito e creato le variabili nel database, come da istruzioni, il check sul campo email duplicato funziona, però con queste impostazioni mi ha creato il problema che quando deve mandare una mail di conferma a chi si registra, la mail non viene inviata e appare questo errore
Mailer Error: You must provide at least one recipient email address.
Warning: explode() expects parameter 2 to be string, array given in /web/htdocs/.......components/com_chronoforms5/chr onoforms/actions/email/email.php on line 138.Posso mandarti via email il mio form per un tuo check?
0 # giusebos 2016-05-26 23:33
Se intendi fare un form di registrazione a joomla, questa guida non va bene
0 # Ester 2016-05-26 23:49
Posso mandarti il mio form via email per un rapido check? Va quasi bene....funziona tutto...tranne questa cosa. Il tuo form funziona bene per me a parte questo. Posso mandartelo? Mi manderesti la tua email? Grazie
0 # giusebos 2016-05-27 10:50
Citazione Ester:
Posso mandarti il mio form via email per un rapido check? Va quasi bene....funziona tutto...tranne questa cosa. Il tuo form funziona bene per me a parte questo. Posso mandartelo? Mi manderesti la tua email? Grazie


invialo alla mail di questo sito, che non scrivo in chiaro per lo spam, quindi coreggi i caratteri errati: 1cag3nda[at]1cag3nda.1t
0 # christian 2017-11-02 13:53
Buongiorno, intanto grazie per questo e gli altri manuali di cui mi sto nutrendo.
Sto realizzando un form per prenotazioni di slot di carico e scarico mezzi.
Lo slot temporare è composto da un campo DataCarico (fotmato d/m/Y) e da un campo FasciaCarico (A - B - C).
Avrei la necessita di verificare prima di procedere alla compilazioen della prenotazione che non vi sia un numero superiore a X di mezzi prenotati nel giorno dd/mm/yyyy e nella facia Y.
La mia intenzione era di annidare delle verifiche (quindi dei dbread con interrogazione del db ) ma già al controllo della DataCarico non mi riconosce se questa è già presente o meno. Ho fatto lo stesso col campo FasciaCarico e questa funziona correttamente pertanto escluderei problemi di connesioni o naming.
C'è qulche accortezza riguardante la data che non mi permette di fare il controllo?

In attesa di riscontro ringrazio ancora per i manuali forniti.
0 # vito 2018-07-24 16:21
sarebbe possibile ottenere lo stesso per un elemento di fabrik?
0 # giusebos 2018-07-24 18:27
Citazione vito:
sarebbe possibile ottenere lo stesso per un elemento di fabrik?


certo, se guardi tra i plug-in c'è ne uno dedito proprio al controllo di un valore.

Per pubblicare un commento devi registrarti