Yii Framework Forum: Probema Utilizzo Checkbox In Una Form Search - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Probema Utilizzo Checkbox In Una Form Search Rate Topic: -----

#1 User is offline   abaoaqu 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 12-March 13

Posted 13 March 2013 - 09:58 AM

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
0

#2 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 345
  • Joined: 10-April 12

Posted 13 March 2013 - 07:47 PM

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)
0

#3 User is offline   abaoaqu 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 12-March 13

Posted 14 March 2013 - 04:27 AM

View Postst4nny, on 13 March 2013 - 07:47 PM, said:

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
0

#4 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 345
  • Joined: 10-April 12

Posted 14 March 2013 - 07:18 AM

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.
0

#5 User is offline   abaoaqu 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 12-March 13

Posted 14 March 2013 - 08:16 AM

View Postst4nny, on 14 March 2013 - 07:18 AM, said:

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
0

#6 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 345
  • Joined: 10-April 12

Posted 14 March 2013 - 06:37 PM

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.
0

#7 User is offline   abaoaqu 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 12-March 13

Posted 15 March 2013 - 03:14 AM

View Postst4nny, on 14 March 2013 - 06:37 PM, said:

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.
0

#8 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 15 March 2013 - 04:29 AM

scusa, l'id_destinazione è un array?
0

#9 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 345
  • Joined: 10-April 12

Posted 15 March 2013 - 05:45 AM

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

#10 User is offline   abaoaqu 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 12-March 13

Posted 15 March 2013 - 10:24 AM

View Postst4nny, on 15 March 2013 - 05:45 AM, said:

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.
0

#11 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 345
  • Joined: 10-April 12

Posted 15 March 2013 - 12:10 PM

mai sperimentato, mi spiace.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users