Back to top

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

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