[Yii 1] Verificare Se Il Campo Inserito Nel Label È Corretto

Salve,

ho una tabella nel database chiamata cap.

All’ interno della stessa ci sono i campi

id - cap - citta - provincia

Ho un form dove con un menu a tendina seleziono il cap. Quando un utente inserisce (nel label "citta")la città, vorrei verificare che quella stessa città appartenga veramente al cap selezionato.

Questo per evitare che si selezioni il cap 00146 (Roma) e si inserisca come citta Napoli.

In questo caso il form deve restituire un’ errore tramite alert. Vorrei anche (se è possibile) che in automatico venga inserita anche la provincia nel database in base al cap scelto e alla citta inserita. Questo perchè l’ utente potrebbe non essere a conoscenza della provincia alla quale appartiene quel comune o città.

E’ possibile farlo? In che modo posso verificare questi dati (prima di validare il form) con Yii?

La tecnica è di usare la client validation o la ajax validation.

Posso sapere se ti risultano nuovi questi concetti?

Se lo chiedi per prendermi in giro…non importa… ti dico si. :)

Comunque se ho chiesto info vuol dire che…non sò farlo giusto?

Ecco ti ho detto tutto ;D

non ti stavo prendendo in giro, ti chiedevo se io stavo parlando di cose nuove per te o no, non posso sapere a memo… , scusami se mi sono espresso male :(

se mi dici che sai come si fa la validazione ajax, alla prima domanda ho già risposto.

non mischiare gli argomenti, apri un nuovo topic per il problema del js… che per risolverlo, direi che devi guardare gli errori della console js del browser. firebug anche in questo caso ti aiuta molto.

ahuahuahauha realtebo togli sta faccina triste. ;D non ero polemico :) era solo un prendermi in giro da solo ;D . Comunque alla prima domanda ti ho risposto quando dico "Comunque se ho chiesto info vuol dire che…non sò farlo giusto?

Ecco ti ho detto tutto." ;D ti sto dicendo che sono cose nuove :) . Scusa se ho miscelato gli argomenti :smiley: ora modifico il post precedente e lo posto come nuovo topic.

Però dammi una dritta perfavore sulla validazione di questi benedetti campi. Non importa se devo studiarmelo…se proprio non riesco…non li valido i campi ;D

Non sò se ora ti dico una stronzata ;D ma tanto una più , una meno non mi cambia la reputazione ;D. Io nel controller con il validation dopo mille letture sono riuscito a implementare questo codice nella mia actionCreate. Ora ciò che ti ho chiesto prima dovrei implementarlo in questo codice per le verifiche dei campi.

Da dove parto? Sto cercando sul web autocomplete etc ma non è ciò che mi serve (credo), vista la tua precedente risposta. O sbaglio?




public function actionCreate()

	{

		$model=new Telegramma;

		if (isset($_POST['cancel'])) 

		{

  $this->redirect(array('index'));

} elseif (isset($_POST['step2'])) 

{

  $this->setPageState('step1',$_POST['Telegramma']); 

  $model=new Telegramma('step1');

  $model->attributes =$_POST['Telegramma'];

  if ($model->validate())

    $this->render('form2',array('model'=>$model));


  else {

    $this->render('form1',array('model'=>$model));

 

   }

}

elseif(isset($_POST['finish'])) 

{

  $model=new Telegramma('finish');

  $model->attributes = $this->getPageState('step1',array()); 

  $model->attributes = $_POST['Telegramma']; 

  //Inserisco data e ora

			$model->time=new CDbExpression('NOW()');

			$model->date=new CDbExpression('NOW()');

			//Genero tracking univoco

			$id = $model->id; 

            $codiceABarre = sprintf('%010d', 9006543200 + $id); 

			//fine generatore tracking univoco

  if ($model->save())

    $this->redirect(array('index'));

	else 

	{

    $this->render('form2',array('model'=>$model));

} }else { 

  $model=new Telegramma('new');

  $this->render('form1',array('model'=>$model));

		}

	}



A riecomi realtebo. Pensavo a una cosa. Come saprai bene credo…in italia il sistema di cap è uno schifo. Infatti piu paesi della stessa provincia hanno lo stesso cap.

Esempio banale la provincia dove vivo io…Viterbo.

Cap 01010 ce l’ hanno Blera, V.S.G. in Tuscia, Barbarano Romano etc.

Ora ho pensato una cosa (dopo aver letto mille forum e dicerie sul web).

Ho pensato di dividere i cap in 4 tabelle.

Ora come ora ho una singola tabella chiamata cap con questi campi:

id - cap - comune - citta - provincia.

Vorrei dividerla cosi

Prima tabella chiamata Cap:

id_cap - cap

Seconda tabella chiamata Comuni:

id_comuni - comune - id_cap

Terza tabella chiamata provincie:

id_provincie - provincia - id_comuni.

Quarta tabella registro:

id_registro - id_cap - id_comuni - id_provincie

Ovviamente ci saranno le relazioni come puoi notare dalle chiavi delle tabelle.

Quindi nel form potrò creare i dropdown in questo modo:




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

<?php $form->dropDownList($model, 'id_cap')

CHtml::listData(Cap::model()->findAll(), 'id_cap', 'cap'),

array(

'ajax'=>array(

'type'=>POST

'ulr'=>CController::createUrl('Registro/SelezionaComune'),

'update'=>'#'.CHtml::actived('$model', 'id_comuni') ;?>

<?php echo "<font color='#000000'><b>" .$form->error($model,'id_cap')."</b></font>"; ?>



Creo la mia funzione nel controller in questo modo:




public function actionSelezionaComune

{

id_uno = $_POST['Registro']['id_cap'] //ricevo il parametro tramite POST dal form

$lista = Comuni::model()->finAll('id_cap = $id_uno', array('id_uno'=>$id_uno)); //Ricevuto il parametro lo lo passò al modello e preparo la lista dei campi che si trovano in "Comuni"

$lista = CHtml::listData($lista, 'id_cap', 'comune'); //visualizzo il campo in base a un suo attributo in questo caso il nome del comune e saranno visibili solo i campi in base alla scelta falta dal "dropdown 1 - (cap)"


foeeach($lista as $scelta => $comune){ 

echo CHtml::tag('option', array('value'=>$scelta),CHtml::encode($comune), true);

}



Ovviamente il primo dropdown viene visualizzato in automatico quindi non creo nessuna funziona.

Fatto questo ripeto i passi per il dropdown "Provincie" e la sua action nel controller (che non scrivo sennò mi dilungo troppo).

Ora ti prego…non dirmi che sto sparando caxxate…dimmi che stò andando nella giusta direzione. Mentimi pure ;D ma non dirmi che sto sbagliando ;D ghghghhghh. Scherzo ovviamente…dimmi la verità bella o brutta che sia :)

Ho fatto una prova con 4 campi creati velocemente e i menu funzionano. Però certo è che mi farebbe piacere ricevere un’ opinione da parte di qualcuno più esperto di me prima di fare questa operazione e stravolgere l’ app.

Se hai (o avete) una soluziona più rapida e indolore (che non stravolga il lavoro svolto fino ad adesso) sarei felice di valutarla :)

Come sempre grazie…e scusate lo smartellamento di @@ che a volte faccio ;D