[Yii1]Validazione dei dati inseriti nel form

Salve,

ho un form

dove il cliente deve inserire cap, comune, provincia.

Vorrei far si che, se il cliente inserisce come cap 00123 (cap di ROMA) e come comune inserisce MILANO, il form NON passi validazione e che venga stampato a video un messaggio che gli dica che quel comune non è corretto.

Se invece cap e comune sono corretti ma il cliente dimentica di inserire la provincia, vorrei che questa venisse inserita automaticamente.

Come posso fare questo nelle rules del model?

Oppure se non posso farlo nelle rules del model in che modo posso implementare questa funzione per far si che se il comune inserito NON corrisponde a quel cap, il form NON passi la validazione?

Allego la tabella dei cap che ho nel database.

Grazie ::)

Questo è il form:




<div class="form">


<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(

	'id'=>'missiva-form',

	

	// Please note: When you enable ajax validation, make sure the corresponding

	// controller action is handling ajax validation correctly.

	// There is a call to performAjaxValidation() commented in generated controller code.

	// See class documentation of CActiveForm for details on this.

	'enableAjaxValidation'=>true,

	'clientOptions'=>array(

	 'validate OnSubmit'=>true,

))); ?>




	<?php echo $form->errorSummary($model); ?>

        <div class="table_box">

        <table class="table" style="width: 90%; margin: auto;">

		<tbody>

        <tr>

		<td colspan=2 class="table_info_header table_first_lr"><center>Destinatario</center></td>

		</tr>

       

        <tr>

        <td class="table_info_desc">

		<?php echo $form->labelEx($model,'cognome'); ?>

        </td>

        <td class="table_info_data">

		<?php echo $form->textField($model,'cliente_cognome',array('class'=>'span8','maxlength'=>100)); ?>

		<?php echo $form->error($model,'cliente_cognome'); ?>

        </td>

        </tr>

        

        <tr>

        <td class="table_info_desc">

		<?php echo $form->labelEx($model,'nome'); ?>

        </td>

        <td class="table_info_data">

		<?php echo $form->textField($model,'cliente_nome',array('class'=>'span8','maxlength'=>100)); ?>

		<?php echo $form->error($model,'cliente_nome'); ?>

        </td>

        </tr>

        

        <tr>

        <td class="table_info_desc table_info_desc_size_100 table_last_l" rowspan="3"><?php echo $form->labelEx($model,'Indirizzo'); ?></td>

        <td class="table_info_data">

		<?php echo $form->dropDownList($model,'cliente_tipovia', CHtml::listData(Ubicazioni::model()->findAll(), "nomeub","nomeub"), array('class'=>'span2'));?>

		<?php echo $form->error($model,'cliente_tipovia'); ?>

        

         <?php /* echo $form->labelEx($model,''); */?>

		<?php echo $form->textField($model,'cliente_indirizzo',array('class'=>'span5','maxlength'=>50)); ?>

         N°

        <?php echo $form->textField($model,'cliente_civico',array('class'=>'span1','maxlength'=>10)); ?>

        <?php echo $form->error($model,'cliente_indirizzo'); ?>

		<?php echo $form->error($model,'cliente_civico'); ?>

        </td>

        </tr>

        

        <tr>

        <td class="table_info_data">

         Cap<?php /*echo $form->labelEx($model,'cap'); */?>

		<?php echo $form->textField($model,'cliente_cap',array('class'=>'span1','maxlength'=>10)); ?>

        

        Comune<?php /*echo $form->labelEx($model,'comune'); */?>

        <?php echo $form->textField($model,'cliente_comune',array('class'=>'span4','maxlength'=>60)); ?>

        

        <?php /*echo $form->labelEx($model,'prov'); */?>

        Prov.<?php echo $form->textField($model,'cliente_provincia',array('class'=>'span1','maxlength'=>60)); ?>

        <?php echo $form->error($model,'cliente_cap'); ?>

        <?php echo $form->error($model,'cliente_comune'); ?>

		<?php echo $form->error($model,'cliente_provincia'); ?>

        </td>

        </tr>

        

        <tr>

        <td class="table_info_data table_last_r">

		<?php echo $form->labelEx($model,'Nazione'); ?>        

		<?php echo $form->dropDownList($model,'cliente_stato', CHtml::listData(Stati::model()->findAll(), "nome","nome"), array('class'=>'span5'));?>

		<?php echo $form->error($model,'cliente_stato'); ?>

        </td>

        </tr>

       <tr class="table_data_footer">

	   <td colspan=2 class="table_last_lr">

	   <center><?php echo CHtml::submitButton('Annulla', array('name'=>'annulla', 'class'=>'btn btn-danger')); ?>

       <?php echo CHtml::submitButton('Avanti' ,array('class'=>'btn btn-primary', 'Pstep2')); ?></center>

       

       <?php $this->endWidget(); ?>

       </td>

       </tr>

       </tbody>

       </table>



Ciao Giannix,

Ma se metti due select annidate non fai prima…

mi spiego meglio, crei 2 tabelle una con tutti i comuni e l’altra con i cap associati hai comuni

quando il cliente seleziona il comune da una dropDownList nella dropDownList dei cap li fai vedere solo i cap associati

a quei comuni…

Ciao scarface84, ho già fatto con i dropDown dipendenti da una tabella (senza crearne 2 ;) ) ma voglio lasciare libero il cliente di scrivere.

Questo perchè con i dorpDown (potendo spedire anche in stati esteri) dovrei fare un ceckbox dove il cliente selezione se spedisce in italia o all’ estero e in base alla scelta mostrerei il form.

Ma cosi non mi piace, preferisco un form dove il cliente scrive e il model valida ::)

Ma purtroppo non riesco a fargli fare questo controllo.

Crea un custom validator per i due campi cap e comune e rimuovi quelli predefiniti.

A questo punto puoi fare tutte le validazioni che vuoi incrociando i dati come vuoi tu.