Joomla.it Forum
Componenti per Joomla! => Gestione Form => : jurassic 13 Nov 2015, 13:35:46
-
Salve a tutti.
Ho un form che inserisce/salva i record in una tabella e funziona benissimo.
Ora ho la necessità di inserire gli stessi record dallo stesso form contemporaneamente in due tabelle diverse.
Ho provato ad inserire in Setup un doppio DB read e DB Save che punti in una tabella secondaria da quella principale ma continua ad inserire i record solo in quella principale.
Tra le varie prove e setup non sono riuscito ancora a salvare i record nella seconda tabella.
Qualcuno può aiutarmi a risolvere il problema?
Questo è il Setup attuale:
On Load ho inserito un DBRead e in On Submit un DBSave. In tutti e due in Table name ho selezionato la tabella di MySql dove registra i record.
Vi ringrazio anticipatamente.
-
Se il form è solo di inserimento senza prelievo di dati da altre tabelle non serve DBread.
In On submit occorrono due Dbsave che puntano ciascuno a due tabelle diverse ma con gli stessi campi.
Nella seconda attiverei il model per distinguerla dalla prima altrimenti si annodano i flussi di dati.
Fra la prima è la seconda Dbsave occorre un'action Custom code per preparare i dati della seconda tabella con un codice php tipo questo:
<?php
$form->data['model2']['campo1']=$form->data['campo1'];
// uguale per gli altri campi
?>
-
Salve Vales.
Di nuovo grazie per l'aiuto. Ho fatto quello che hai detto e ora funziona benissimo.
Ti chiedo un altro aiuto:
Dal form per le modifiche, se voglio fare la modifica dei record contemporaneamente alle due tabelle quale procedura devo seguire?
Ho visto il tuo Albo pretorio, ottimo lavoro, complimenti.
-
Le due tabelle devono avere esattamente gli stessi records, altrimenti la procedura dovrebbe essere diversa.
La stessa procedura di prima con la variante che avrai una DB read in On load che legge i dati dalla prima tabella.
Metterei un campo hidden di nome id in designer che prende il valore id della prima tabella.
In On submit la stessa sequenza di prima con una variante nel codice.
Dovrai aggiungere il campo id della seconda che prende il valore id del campo nascosto passato dal form.
-
Buongiorno Vales.
Sto lavorando con i link che mi collegano ai form inserisci e modifica.
Le modifiche sono collegate alla connessione che mi da la lista dei record inseriti nella tabella.
Da qui seleziono i record da modificare ed entro nel form di modifica. Effettuo le modifiche e do invio.
In merito al form che serve a fare le modifiche in due tabelle:
In designer un campo Hidden con [id]
In On load un DB read che legge dalla prima tabella, in On Submit un
DB Save che aggiorna e salva i record nella seconda tabella.
Il tutto ha funzionato, il form modificava sia la prima che la seconda tabella, questo mi sta bene.
Però dopo aver cambiato il link al form dal menù di joomla quando entro nel form e do invio per salvare le
modifiche mi da il seguente errore:
Si è verificato un errore.
Non è possibile trovare la pagina richiesta.
#404 Categoria non trovata
Ora devo trovare una soluzione a questo problema che dovrebbe dipendere dal form. Ci riaggiorniamo.
Grazie di nuovo.
-
Salve Vales.
Il form per le modifiche che prima funzionava e poi dava errore l’ho dovuto eliminare e ricostruire.
Ho provato con il nuovo form ma fa le modifiche solo alla prima tabella.
L’idea è di far prelevare i record dalla prima tabella e fargli fare le modifiche alla seconda tabella oppure a tutte e due le tabelle.
Le due tabelle hanno gli stessi identici record.
Questo è quello che ho fatto seguendo il tuo ultimo consiglio:
In Setup -> On load -> un Db Read che legge i dati dalla prima tabelle e con Model Id.
In On submit -> 2 Db Save con in mezzo un custom code.
Il primo Db Save con Action label senza id dell’hidden in Designer -> Table name: prima tabella-> senza Model id.
Custom code con il codice che mi hai consigliato all’inizio del topic e che ha funzionato bene per inserire i dati in doppia tabella.
Secondo Db Save-> Action label con [id]-> Table name: seconda tabella e con Model Id-> in Update conditions: <?php return array('chiudischema.id'=>$form->data['gcb']); ?>
Il tutto continua a modificare i dati solo nella prima tabella.
Posso permettermi di chiederti un altro aiuto?
Grazie.
-
credo che in On submit non tu abbia più disponibile $form->data['gcb']. In Designer assegna al campo nascosto di nome id il valore di gcb e poi usa quello in update condition che dovrebbe venire così:
<?php return array('chiudischema.id'=>$form->data['id']); ?>
Inserire un'action debugger prima della seconda dbsave può aiutarti a capire i valori che hai disponibili in quel punto.
-
Buongiorno. Grazie per la risposta.
Ho effettuato le prove che mi hai consigliato ma aggiorna solo i dati della prima tabella e non quelli della seconda.
In Designer nel campo nascosto ho inserito in Field Name: id e non chiudischema[id], provando con quest’ultimo duplica i record della prima tabella. In Field Value {gcb}
Nel Setup ho:
in On load un Db Read che punta alla prima tabella-> Action label: chiudischema-> Model id: chiudischema
In On submit:
un DB save che punta sempre alla prima tabella-> Action label: chiudischema[id]-> Model Id: Data-> Update conditions: $form->data['gcb'].
Ho provato anche con: <?php return array('chiudischema.id'=>$form->data['id']); ?> ma non va bene.
Custom code con: $form->data['chiudischema2']['id']=$form->data['id'];
$form->data['chiudischema2']['operatore']=$form->data['operatore'];?> ecc….
Ho provato a togliere anche il custom code e ha lo stesso effetto.
Subito dopo un Debbuger con Enable: yes
Segue un DB Save che punta alla seconda tabella:
Action label: chiudischema-> Model ID: chiudischema-> Update conditions: <?php return array('chiudischema.id'=>$form->data['id']); ?>
Il tutto modifica solo i dati della prima tabella.
Dove può essere l’errore?
Grazie di nuovo
-
Le mie indicazioni erano per la prima tabella usata senza model id, come nel primo caso se usi il model id chiudischema per la prima e chiudischema2 per la seconda va tutto adattato alla nuova situazione. Non ho capito cos'è operatore.
Riepilogando
in On load un Db Read che punta alla prima tabella-> Action label: chiudischema-> Model id: chiudischema
in conditions dovresti avere
<?php return array('chiudischema.id' => $form->data['gcb']); ?>
in designer campo hidden <input tipe="hidden" nome="id" value="{gcb}">
In On submit:
un DB save che punta sempre alla prima tabella-> Action label: chiudischema[id]-> Model Id: chiudischema-> Update conditions: <?php return array('chiudischema.id' => $form->data['id']); ?>
Segue un DB Save che punta alla seconda tabella:
Action label: chiudischema-> Model ID: chiudischema2-> Update conditions: <?php return array('chiudischema2.id'=>$form->data['id']); ?>
-
Salve Vales. Grazie per la risposta e per la pazienza.
Ho seguito le tue indicazioni ma non va, continua a modificare solo i record della prima tabella.
$form->data['operatore'] è un record della tabella.
In Designer-> Elemento Hidden->Field name: id -> Field value: {gcb}->Extra params: <input tipe="hidden" nome="id" value="{gcb}">
Ho provato anche con alcune modifiche ad esempio togliendo e rimettendo in Setup -> Custom code e Debugger. Ma non funziona, non modifica i record della seconda tabella.
Specifico che in Designer il pulsante Submit è collegato ad un checkbox che attiva il pulsante con in General->Extra params: vuoto-> in Events-> uncheck e check disabile ed enable collegato all’id del pulsante, ma penso che, Extra params: vuoto, non dovrebbe influire sul fatto che non modifica la seconda tabella
Da cosa può dipendere?
-
Per l'elemento Hidden non è necessario Extra params con quei valori che hai mostrato.
Metti un'action debugger prima dell'action dbsave 2 e controlla il valori dei vari elementi in quel punto.
-
Se il form è solo di inserimento senza prelievo di dati da altre tabelle non serve DBread.
In On submit occorrono due Dbsave che puntano ciascuno a due tabelle diverse ma con gli stessi campi.
Nella seconda attiverei il model per distinguerla dalla prima altrimenti si annodano i flussi di dati.
Fra la prima è la seconda Dbsave occorre un'action Custom code per preparare i dati della seconda tabella con un codice php tipo questo:
<?php
$form->data['model2']['campo1']=$form->data['campo1'];
// uguale per gli altri campi
?>
come jurassic ho un form perfettamente funzionante, però vorrei aggiungere un second dbsave che salvi solo alcuni campi in una seconda tabella (diversa nei campi). cosa dovrei mettere nel dbsave ?
-
Salve.
Scusate se mi intrometto in questa discussione che era stata aperta un pò di tempo fa.
Volevo solo aggiungere a titolo informativo che:
Se si ha la necessità di eliminare i record inseriti nella doppia tabella occorre creare due connessioni separate per l'eliminazione, ognuna per ogni singola tabella interessata, altrimenti si perde la linearità degli ID. Eliminando una linea da una sola tabella quando si inseriscono i dati da un nuovo form gli ID risultano diversi, quindi occorrerebbe allinearli direttamente da MySql.
Non so se c'è una modalità diversa, io ho risolto con la doppia eliminazione.
Un saluto a tutti voi.