Back to top

Autore Topic: Validazione lato server in nuovo componente  (Letto 12513 volte)

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Validazione lato server in nuovo componente
« il: 21 Gen 2014, 16:27:17 »
Salve ho un problema per quanto riguarda la validazione di alcuni campi in un nuovo componente.


Dunque l'amministratore del sito inserisce ragione sociale e partita iva, però nel momento in cui inserisce una partita iva già presente nel db vorrei che mi restituisse un messaggio di errore e che naturalmente non mi inserisse il record nel db.


Ho creato il file xml per la creazione del form e nel campo "partita iva" ho inserito l'attributo "validate=piva" poi ho creato la cartella "rules" dove all'interno ho inserito il file piva.php con la relativa espressione regolare. E fin qui tutto apposto, controlla correttamente se è una partita iva secondo l'espressione regolare.


Come faccio però ad effettuare un controllo sul db per vedere se esiste quella determinata partita iva e ritornare in caso eventuale errore ?


Grazie a tutti
--
Riccardo

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #1 il: 21 Gen 2014, 17:05:12 »
override del metodo check() della classe table.

ciao

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #2 il: 21 Gen 2014, 17:38:10 »
in teoria lo puoi fare della rule che ti controlla la prtita iva, basta una semplice query facendo attenzione che la partita iva che stai controllando si stia riferendo ad un nuovo inserimento e non a una modifica.

Se guardi in libraries/joomla/form/rules è lo stesso principio della regola di validazione username
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #3 il: 21 Gen 2014, 17:54:56 »
quoto simone83  :)

mi piace di più la sua soluzione: segui il suo consiglio.

ciao

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #4 il: 21 Gen 2014, 20:03:52 »
Grazie ragazzi ci provo, spero di riuscirci..  :)
--
Riccardo

mau_develop

  • Visitatore
Re:Validazione lato server in nuovo componente
« Risposta #5 il: 21 Gen 2014, 21:42:42 »
io le farei (le faccio) entrambe :) ... solitamente tutte le volte che uso o tratto il dato/var, sono sempre in paranoia che non nascendo e morendo all'interno di una classe sia facile la distrazione di lasciarla "libera" da qualche parte.
Mi sembrava che anche Dexter la pensasse + o meno così tralasciando che lui ha qualche argomentazione tecnica migliore delle mie :):)

ueellaaa! ciao Simone benritrovato
« Ultima modifica: 21 Gen 2014, 21:44:17 da M_W_C »

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #6 il: 22 Gen 2014, 09:17:14 »
son tornato, non so per quanto  :P

Fai bene ad essere paranoico, lo sono anche io. comunque se crei un rule alla check non ci arrivi ti blocchi nel controller, poi sta al programmatore fare le cosine x bene xche puoi non validare la form, ma puoi anche non fare il check
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #7 il: 22 Gen 2014, 18:00:03 »
la cosa divertente è che il mio component builder scrive le rules per tutti i campi, ma me ne ero proprio dimenticato...

sarà mica la vecchiaia ?  ;D ;D
ciao
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #8 il: 23 Gen 2014, 11:25:47 »
in teoria lo puoi fare della rule che ti controlla la prtita iva, basta una semplice query facendo attenzione che la partita iva che stai controllando si stia riferendo ad un nuovo inserimento e non a una modifica.

Se guardi in libraries/joomla/form/rules è lo stesso principio della regola di validazione username


Ma io posso controllare la partita iva secondo espressione regolare e anche se è già presente all'interno del db?


Scusate .. il mio primo componente joomla :)



--
Riccardo

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #9 il: 23 Gen 2014, 15:56:07 »
si!
nel testo che hai citato ti dicevo di guardare il file username.php che fa la stessa cosa, invece che la partita iva ti controlla il nome utente
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #10 il: 23 Gen 2014, 17:16:19 »
Simone ecco il codice che ho inserito. Funzionante!


Considera che il campo nel db si chiama "codice_fiscale" e all'interno è possibile inserire sia codice_fiscale che la partita iva.



Codice: [Seleziona]
class JFormRuleCodicefiscale extends JFormRule
{
protected $regex = '^([0-9]{11})$|^([a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1})$|^([a-zA-Z]{2}[0-9]{11})$';


public function test(&$element, $value, $group = null, &$input = null, &$form = null)
{
// Test the value against the regular expression.
if (!parent::test($element, $value, $group, $input, $form))
{
return false;
}

// Get the database object and a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);


// Build the query.
$query->select('COUNT(*)');
$query->from('#__acc_partecipanti');
$query->where('codice_fiscale = ' . $db->quote($value));


// Set and query the database.
$db->setQuery($query);
$duplicate = (bool) $db->loadResult();


// Check for a database error.
if ($db->getErrorNum())
{
JError::raiseWarning(500, $db->getErrorMsg());
}


if ($duplicate)
{
return false;
}


return true;
}
}
Un'ultima cosa che vorrei chiedervi:
Quando da errore, sia per l'espressione regolare che non corrisponde, sia perchè già presente un codice fiscale o partita iva nel db, il messaggio è sempre lo stesso preso dall'attributo message="Messaggio di errore" nel file xml del form.


Posso restituire un messaggio di errore diverso in funzione dell'errore ?


Grazie
--
Riccardo

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #11 il: 23 Gen 2014, 17:47:32 »
Il codice va bene solo che se faccio una modifica la form mi dara sempre errore in quato il mio codice fiscale c'e quindi come vedi sempre dal file username devi prendere l'id e verificare che sia diverso.

per fare la cosa che dici tu di cambiare il messaggio prova a mettere nel tuo file rule questa riga


Codice: [Seleziona]
$form->setFieldAttribute((string)$element['name'], 'message', 'Messaggio alternativo');
Il messaggio alternativo lu puoi scrivere come ho fatto io oppure leggere un eventuale altro attributo del field tipo

Codice: [Seleziona]
$form->setFieldAttribute((string)$element['name'], 'message', (string)$element['message2']);



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

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #12 il: 23 Gen 2014, 19:06:00 »
Grazie ancora Simone,


Ho inserito la stringa che dici tu e il messaggio alternativo funziona alla grande:


Codice: [Seleziona]


class JFormRuleCodicefiscale extends JFormRule
{
/*Controlla se il codice fiscale o la partita iva sono stati inseriti nel formato corretto*/
protected $regex = '^([0-9]{11})$|^([a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1})$|^([a-zA-Z]{2}[0-9]{11})$';


/*Controlla che già non esista un record con la stessa partita iva o codice fiscale*/
public function test(&$element, $value, $group = null, &$input = null, &$form = null)
{
// Test the value against the regular expression.
if (!parent::test($element, $value, $group, $input, $form))
{
return false;
}

// Get the database object and a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);


// Build the query.
$query->select('COUNT(*)');
$query->from('#__acc_partecipanti');
$query->where('codice_fiscale = ' . $db->quote($value));

// Get the extra field check attribute.
$userId = ($form instanceof JForm) ? $form->getValue('id') : '';
$query->where($db->quoteName('id') . ' <> ' . (int) $userId);


// Set and query the database.
$db->setQuery($query);
$duplicate = (bool) $db->loadResult();


// Check for a database error.
if ($db->getErrorNum())
{
JError::raiseWarning(500, $db->getErrorMsg());
}


if ($duplicate)
{
$form->setFieldAttribute((string)$element['name'], 'message', (string)$element['message2']);
return false;
}


return true;
}
}
come vedi ho anche inserito


Codice: [Seleziona]

// Get the extra field check attribute.
$userId = ($form instanceof JForm) ? $form->getValue('id') : '';
$query->where($db->quoteName('id') . ' <> ' . (int) $userId);


perchè in effetti non mi permette di fare nessuna modifica in quanto vede che esiste un'altra partita iva uguale nel db, però nonostante abbia inserito questo codice continua ancora a darmi errore in fase di modifica.


ti posto anche il file xml del form, anche se non so se può aiutare:


Codice: [Seleziona]

<?xml version="1.0" encoding="UTF-8"?>
<form addrulepath="/administrator/components/com_accontratti/models/rules">
<fieldset>
<field
name="id"
type="hidden" />
<field
name="ragione_sociale"
type="text"
label="COM_ACCONTRATTI_RAGIONE_SOCIALE"
class="inputbox"
required="true" />
<field
name="codice_fiscale"
size="16"
type="text"
label="COM_ACCONTRATTI_CODICE_FISCALE"
class="inputbox"
validate="codicefiscale"
message="COM_ACCONTRATTI_CODICE_FISCALE_ERRORE"
message2="COM_ACCONTRATTI_CODICE_FISCALE_ESISTE_ERRORE"
required="true" />
<field
name="azienda_madre"
type="aziendamadre"
label="COM_ACCONTRATTI_AZIENDA_MADRE"
class="inputbox" />
<field
name="id_fiscale_estero"
type="text"
label="COM_ACCONTRATTI_ID_FISCALE_ESTERO"
class="inputbox" />
<field
name="ruolo"
type="text"
label="COM_ACCONTRATTI_RUOLO"
class="inputbox" />
<field
                        name="id"
type="text"
default="0"
readonly="true"
class="readonly"
label="JGLOBAL_FIELD_ID_LABEL"
description ="JGLOBAL_FIELD_ID_DESC" />
</fieldset>
</form>


So che è presente due volte il campo id, ma provando a togliere il primo in alto "hidden" il risulatato è sempre lo stesso..




Grazie ancora
--
Riccardo

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #13 il: 23 Gen 2014, 20:10:40 »
Il problema è che non recupera il valore del campo 'id' attraverso $form->getValue('id'), ma non capisco perchè.


Grazie a tutti
--
Riccardo

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #14 il: 23 Gen 2014, 20:51:57 »
ti popola correttamente il campo id hidden nell momento che visualizzi la form?

controlla con firebug oppure guarda l'html.
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #15 il: 23 Gen 2014, 22:09:45 »
Ho eliminato il campo con nome "id" dal file xml


Codice: [Seleziona]

<field
name="id"
type="hidden" />


perchè come puoi vedere dal file xml l'ho inserito erroneamente due volte. Comunque di seguito puoi vedere l'html del campo id che mi riporta correttamente un valore "1" che corrisponde effettivamente all'id del record. Quindi la cosa si infittisce... non so dove andare a parare


E' possibile che ho dimenticato di importare qualche libreria o qualcosa e quindi non riesce a recuperare il valore? E' possibile che il metodo getValue() oltre al nome del campo abbia bisogno di qualche altro parametro obbligatorio?








Codice: [Seleziona]
<li>
    <label id="jform_id-lbl" for="jform_id" class="hasTip" title="" aria-invalid="false">ID</label>
    <input type="text" name="jform[id]" id="jform_id" value="1" class="readonly" readonly="readonly" aria-invalid="false">
</li>
--
Riccardo

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #16 il: 24 Gen 2014, 10:10:18 »
Probabilmente hai un problema nel bind della form al momento della validazione, ma per questo problema diventa come cercare un ago nel pagliaio. Utilizzi le funzioni ereditate dalle classi del controller e del model oppure le hai riscritte tu?
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

mau_develop

  • Visitatore
Re:Validazione lato server in nuovo componente
« Risposta #17 il: 24 Gen 2014, 11:59:36 »
 E' possibile che il metodo getValue() oltre al nome del campo abbia bisogno di qualche altro parametro obbligatorio?
---------------------------------

... è possibile che non si chiami id o che sia annidato in altro

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #18 il: 24 Gen 2014, 12:25:52 »
Attento che l'espressione regolare che hai inserito non funziona sempre. Giustappunto sto facendo una cosa simile in un progetto mastodontico è ho a disposizione oltre 10000 codici fiscali da analizzare per fare una sincronizzazione e per alcuni mi dice che sono sbagliati ma ho controllato sul sito dell'agenzia delle entrate e invece sono giusti.

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

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #19 il: 24 Gen 2014, 12:32:29 »
non sono un esperto di espressioni regolari, ma il problema lo hai qua

[0-9]{3}

cioe ci si aspetta che i caratteri dal 13 al 15 siano numeri ma invece il penultimo puo anche essere una lettera

non so se è il problema delle omocodie dei codici fiscali
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #20 il: 24 Gen 2014, 12:37:43 »
[0-9]{2}[0-9a-zA-Z]{1}


mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #21 il: 24 Gen 2014, 12:40:44 »
perfetto
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #22 il: 24 Gen 2014, 12:44:44 »
forse ancora non è perfetta, bisognerebbe trovare un manuale del codice fiscale

anche il terznultimo puo non essere un numero
quindi diventerebbe

[0-9]{1}[0-9a-zA-Z]{2}

ora mi sorge il dubbio che anche il quartultimo possa non essere un numero  :)
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #23 il: 24 Gen 2014, 17:17:06 »
Probabilmente hai un problema nel bind della form al momento della validazione, ma per questo problema diventa come cercare un ago nel pagliaio. Utilizzi le funzioni ereditate dalle classi del controller e del model oppure le hai riscritte tu?


Io non ho riscritto nessuna funzione, eredito quelle del controller e del model di default di joomla. Non ho toccato la funzione bind..

Come faccio a controllare se ho un problema nel bind della form?


Non riesco proprio a capire :(  Non riesco a modificare nessun record...
« Ultima modifica: 24 Gen 2014, 18:29:04 da ricctram »
--
Riccardo

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #24 il: 24 Gen 2014, 17:33:45 »

... è possibile che non si chiami id o che sia annidato in altro


Se vedi l'html puoi vedere tu stesso che il campo si chiama id. Che intendi per essere annidato in altro?


Grazie
--
Riccardo

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #25 il: 24 Gen 2014, 18:27:51 »
Ragazzi sto impazzendo, non funziona il metodo getValue() della classe JForm.


Codice: [Seleziona]

// Get the extra field check attribute.
$partId = ($form instanceof JForm) ? $form->getValue('id') : '';
$query->where($db->quoteName('id') . ' <> ' . (int) $partId);


Ho provato a sostituire a $form->getValue('id') un valore numerico di un id di un record già pesente nel db e mi fa correttamente modificare quel record, il che significa che $form è un istanza della classe JForm e che la condizione è soddisfatta, ma allora perchè non funziona il metodo getValue() della classe JForm???


Qualcuno può aiutarmi??
--
Riccardo

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #26 il: 24 Gen 2014, 18:47:04 »
@simone83
in realtà tutte le cifre possono diventare lettere: in caso di cf già esistente nei registri del ministero si sostituiscono le cifre con lettere partendo da destra, quindi alla fine il cf potrebbe essere anche di 16 lettere.

pare che al momento non ci sia una grande letteratura sulla incidenza delle collisioni, ma non ci siano neanche troppe collisioni  ::)

tenente presente che la regex non valida niente! è solo il matching con un pattern, se volete fare una verifica valida del cf dovete controllarne almeno la validità formale, ovvero il valore dell'ultima lettera che è il checksum della stringa.

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #27 il: 24 Gen 2014, 18:59:50 »
@ricctram
se non hai un debugger inserisci un

print_r($form);die();

dopo l'assegnazione e vedi i valori contenuti. già che ci sei stampati anche la query.

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #28 il: 24 Gen 2014, 19:06:30 »
eheheh io non uso l'espressione regolare ma una funzione che fa quello che dici tu.

Qui è difficile aiutarti noi non vediamo tutto e non possiamo fare test direttamente
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #29 il: 24 Gen 2014, 19:14:03 »
@ricctram
se non hai un debugger inserisci un

print_r($form);die();

dopo l'assegnazione e vedi i valori contenuti. già che ci sei stampati anche la query.

ciao,
marco


grazie Marco


ho provato a fare quello che dici e il risultato è questo:
Codice: [Seleziona]
JForm Object ( [data:protected] => JRegistry Object ( [data:protected] => stdClass Object ( ) ) [errors:protected] => Array ( ) [name:protected] => com_accontratti.partecipante [options:protected] => Array ( [control] => jform ) [xml:protected] => JXMLElement Object ( [@attributes] => Array ( [addrulepath] => /administrator/components/com_accontratti/models/rules ) [fieldset] => JXMLElement Object ( [field] => Array ( [0] => JXMLElement Object ( [@attributes] => Array ( [name] => ragione_sociale [type] => text [label] => COM_ACCONTRATTI_RAGIONE_SOCIALE [class] => inputbox [required] => true ) ) [1] => JXMLElement Object ( [@attributes] => Array ( [name] => codice_fiscale [size] => 16 [type] => text [label] => COM_ACCONTRATTI_CODICE_FISCALE [class] => inputbox [validate] => codicefiscale [message] => COM_ACCONTRATTI_CODICE_FISCALE_ERRORE [message2] => COM_ACCONTRATTI_CODICE_FISCALE_ERRORE [required] => true ) ) [2] => JXMLElement Object ( [@attributes] => Array ( [name] => azienda_madre [type] => aziendamadre [label] => COM_ACCONTRATTI_AZIENDA_MADRE [class] => inputbox ) ) [3] => JXMLElement Object ( [@attributes] => Array ( [name] => id_fiscale_estero [type] => text [label] => COM_ACCONTRATTI_ID_FISCALE_ESTERO [class] => inputbox ) ) [4] => JXMLElement Object ( [@attributes] => Array ( [name] => ruolo [type] => text [label] => COM_ACCONTRATTI_RUOLO [class] => inputbox ) ) [5] => JXMLElement Object ( [@attributes] => Array ( [name] => id [type] => text [default] => 0 [readonly] => true [class] => readonly [label] => JGLOBAL_FIELD_ID_LABEL [description] => JGLOBAL_FIELD_ID_DESC ) ) ) ) ) )
--
Riccardo

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #30 il: 24 Gen 2014, 19:35:57 »

dopo l'assegnazione e vedi i valori contenuti. già che ci sei stampati anche la query.

stampando la query questo è il risultato:


SELECT COUNT(*) FROM #__acc_partecipanti WHERE codice_fiscale = '12345678904' AND `id` <> 0
--
Riccardo

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #31 il: 25 Gen 2014, 03:19:05 »
penso di aver capito il problema,


Praticamente di base joomla non fa un bind della form con i dati in input ma si limita soltanto a validare campo per campo con i dati che gli passi, se guardi il model del com_users profile vedi che lui fa un loadData dove carica i dati dell'utente

Codice: [Seleziona]
$userId = $this->getState('user.id');

            // Initialise the table with JUser.
$this->data    = new JUser($userId);

e ci fa un bind della form,

se estendi jControlleForm invece gli dice di suo non caricare nessun dato nella form al momento del salvataggio e se usi jmodelAdmin ha la sua funzione getItem per costruire la form che viusalizzi ma non viene richiamato al salvataggio.

per frala breve penso che risolvi semplicemente aggiungendo alla funzione del model

getForm($data = array(), $loadData = true)


dopo il controllo

if (empty($form))
{
            return false;
}

questo codice

Codice: [Seleziona]
if(isset($data['id']) && (int)$data['id'] > 0)
$form->setValue('id',null,(int)$data['id']);

ti carica nella form l'id visibile dopo nella rule che hai fatto.

lascio a te capire se questa ggiunta puo generare problemi di qualsiasi tipo




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

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #32 il: 25 Gen 2014, 09:00:36 »
in effetti non vi era nessun valore nell'oggetto: forse a  questo punto conviene spostare il controllo nel metodo check() della table, voi che dite?

ciao,
marco
« Ultima modifica: 25 Gen 2014, 09:30:18 da mmleoni »
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline ricctram

  • Nuovo arrivato
  • *
  • Post: 30
  • Sesso: Maschio
    • Mostra profilo
Re:Validazione lato server in nuovo componente
« Risposta #33 il: 25 Gen 2014, 19:57:38 »
Io non so come ringraziarti, ho inserito il codice che mi hai inviato in questo modo è funziona tutto alla grande anche se non ho capito la motivazione:


Codice: [Seleziona]

if (!$form) {
return false;
} else {
if(isset($data['id']) && (int)$data['id'] > 0)
$form->setValue('id',null,(int)$data['id']);
return $form;
}

Grazie mille ;)
--
Riccardo

 



Web Design Bolzano Kreatif