Probema Utilizzo Checkbox In Una Form Search

Salve a tutti, mi sono appena iscritto e sto cercando di capire il funzionamento di Yii. Ci sono molte cose che ho difficoltà a comprendere sopratutto legate all’architettura MVC alla quale non sono abituato, ho sempre programmato in PHP “tradizionale”.

Nello specifico sto cercando, con delle piccole modifiche, di capire il comportamento della form di ricerca avanzata che viene generata automaticamente tramite Gii. Ho creato già delle tabelle e relativi metodi e CRUD, esse sono relazionate ovviamente e riesco a visualizzare nella gridview i valori legati agli ID incorciando le tabelle. nella ricerca avanzata sono riuscito e inserire una dropdownlist per filtrare la gridview e fino a qui tutto bene, la ricerca funziona correttamente. Modificando la dorpdownlist in checkbox quando effettuo la ricerca mi genera un errore “expets parameter to be a string” e non c’è modo di farlgi capire che il parametro che passo è un intero e così deve essere…

Mi date qualche indizio per capire?

Grazie

devi controllare che nel model interessato,

al metodo search()

ci sia:

$criteria->compare(‘campo’,$this->campo,true); (per i varchar)

$criteria->compare(‘campo’,$this->campo); (per int)

Nel model, al metodo search(), in corrispondenza di quel campo c’è già


$criteria->compare('campo',$this->campo);

Quindi va bene perchè l’id che passo è un integer, in effetti quando faccio la ricerca utilizzando una dropdownlist va tutto bene, è quando la tramuto in una checklist che mi da errore e non trovo l’inghippo. Io sto utilizzando la ricerca avanzata.

Grazie

checkbox, dropdown, textfield… è uguale.

l’importante è sapere costa stai passando, vuol dire che nel codice che genera il checkbox c’è qlcs che non va, sicuramente non invii un intero ma qualcosaltro. tieni conto che di default un checbox checked invia ‘on’.

cmq basta guardare la chiamata ajax generata dal submit per capire cosa sta succedendo.

Questo è l’html generato, il valore che passa è un id numerico che trovi in corrispondenza del “value”.


	

<div class="row">

  <div class="row">

    <label for="Annunci_destinazione">Destinazione</label> <br /> 

    <input id="ytAnnunci_id_destinazione" type="hidden" value="" name="Annunci[id_destinazione]" />

    <span id="Annunci_id_destinazione"><div><label for="Annunci_id_destinazione_0">AFFITTO</label>&nbsp;

    <input id="Annunci_id_destinazione_0" value="1" type="checkbox" name="Annunci[id_destinazione][]" />

  </div>

  <br/>

  <div>

    <label for="Annunci_id_destinazione_1">VENDITA</label>&nbsp;

    <input id="Annunci_id_destinazione_1" value="2" type="checkbox" name="Annunci[id_destinazione][]" />

  </div>

  </span> 

  </div>

</div>



L’errore è legato al fatto che lui vorrebbe una stringa…

htmlspecialchars expects parameter 1 to be string…

Forse si riferisce al campo hidden (che non so come mai ci sia…a cosa serve?) che è vuoto?

Come posso vedere la chiamata ajax generata dal submit?

Grazie

posta il codice della view non l’html

e poi per vedere quello che succede dietro.

se usi chrome/ium - tasto destro sulla pagina e poi fai Ispeziona elemento - Network, dovrebbe essere vuoto,

se non lo è puliscilo con il “divieto di sosta” :)

poi fai il submit e ti vedi comparire l’azione, a quel punto ci clicchi sopra

e in Header vedi cosa invia nel post/get in preview invece quello che ritorna.

OK…i parametri che passa sono questi (ne indico solo alcuni)…quello che genera l’errore è id_destinazione che passa il checkbox…

Annunci[id_ann]:

Annunci[titolo]:

Annunci[descrizione]:

Annunci[id_destinazione][]:1

Annunci[id_zona]:

L’errore in response è il seguente




<h1>PHP Error [2]</h1>

<p>htmlspecialchars() expects parameter 1 to be string, array given (/var/www/htdocs/yii-pilu/framework/web/helpers/CHtml.php:98)</p>

<pre>#0 unknown(0): CWebApplication->handleError()

#1 /var/www/htdocs/yii-pilu/framework/web/helpers/CHtml.php(98): htmlspecialchars()

#2 /var/www/htdocs/yii-pilu/framework/web/helpers/CHtml.php(2336): encode()

#3 /var/www/htdocs/yii-pilu/framework/web/helpers/CHtml.php(153): renderAttributes()

#4 /var/www/htdocs/yii-pilu/framework/web/helpers/CHtml.php(1983): tag()

#5 /var/www/htdocs/yii-pilu/framework/web/helpers/CHtml.php(1257): activeInputField()

#6 /var/www/htdocs/yii-pilu/maffei/protected/views/annunci/admin.php(53): activeTextField()

#7 /var/www/htdocs/yii-pilu/framework/web/CBaseController.php(126): require()

#8 /var/www/htdocs/yii-pilu/framework/web/CBaseController.php(95): AnnunciController->renderInternal()

#9 /var/www/htdocs/yii-pilu/framework/web/CController.php(869): AnnunciController->renderFile()

#10 /var/www/htdocs/yii-pilu/framework/web/CController.php(782): AnnunciController->renderPartial()

#11 /var/www/htdocs/yii-pilu/maffei/protected/controllers/AnnunciController.php(143): AnnunciController->render()

#12 /var/www/htdocs/yii-pilu/framework/web/actions/CInlineAction.php(49): AnnunciController->actionAdmin()

#13 /var/www/htdocs/yii-pilu/framework/web/CController.php(308): CInlineAction->runWithParams()

#14 /var/www/htdocs/yii-pilu/framework/web/filters/CFilterChain.php(133): AnnunciController->runAction()

#15 /var/www/htdocs/yii-pilu/framework/web/filters/CFilter.php(40): CFilterChain->run()

#16 /var/www/htdocs/yii-pilu/framework/web/CController.php(1145): CAccessControlFilter->filter()

#17 /var/www/htdocs/yii-pilu/framework/web/filters/CInlineFilter.php(58): AnnunciController->filterAccessControl()

#18 /var/www/htdocs/yii-pilu/framework/web/filters/CFilterChain.php(130): CInlineFilter->filter()

#19 /var/www/htdocs/yii-pilu/framework/web/CController.php(291): CFilterChain->run()

#20 /var/www/htdocs/yii-pilu/framework/web/CController.php(265): AnnunciController->runActionWithFilters()

#21 /var/www/htdocs/yii-pilu/framework/web/CWebApplication.php(282): AnnunciController->run()

#22 /var/www/htdocs/yii-pilu/framework/web/CWebApplication.php(141): CWebApplication->runController()

#23 /var/www/htdocs/yii-pilu/framework/base/CApplication.php(169): CWebApplication->processRequest()

#24 /var/www/htdocs/yii-pilu/maffei/index.php(13): CWebApplication->run()

</pre>



Questo è il codice della view (form.php)




<?php

/* @var $this AnnunciController */

/* @var $model Annunci */

/* @var $form CActiveForm */

?>


<div class="wide form">


<?php $form=$this->beginWidget('CActiveForm', array(

	'action'=>Yii::app()->createUrl($this->route),

	'method'=>'get',

)); ?>


	<div class="row">

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

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

	</div>


	<div class="row">

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

		<?php echo $form->textField($model,'titolo',array('size'=>60,'maxlength'=>200)); ?>

	</div>


	<div class="row">

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

		<?php echo $form->textArea($model,'descrizione',array('rows'=>6, 'cols'=>50)); ?>

	</div>


	<div class="row">

		<?php $data = CHtml::listData(Destinazioni::model()->findAll(),'id_destinazione','destinazione'); ?>

        <div class="row">

			<?php echo $form->label($model,'destinazione'); ?> <br /> 

			<?php echo $form->checkBoxList($model,'id_destinazione', $data, array('template'=>'<div>{label}&nbsp;{input}</div>')); ?> 

        </div>

	</div>


	<div class="row">

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

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

	</div>

...


	<div class="row buttons">

		<?php echo CHtml::submitButton('Search'); ?>

	</div>


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


</div><!-- search-form -->



Grazie

R.

scusa, l’id_destinazione è un array?

eh si… è una checkboxlist, ovviamente quello che arriva è un array non un int.

Si sono i valori contenuti in un array, i valori corrispondenti alle caselle selezionate. Quindi questo significa che la search non è in grado di gestire un array come filtro di ricerca ma solo il passaggio di una variabile fissa…

R.

mai sperimentato, mi spiace.