Error Sql Yii - Formulario Con Checkboxes

Saludos a Todos…

1) Tengo una TABLA llamada AdminUsuario que tiene tres campos ( username, contrasena y edad ),

en la VISTA tengo un formulario, que despliega un listado con varios checkbox con un foreach…se trata de ir seleccionando de la lista los registros a Eliminar…

con el siguiente CODIGO:

<?php echo CHtml::beginForm(CHtml::normalizeUrl(array(‘adminUsuario/editar’)), ‘post’, array(‘id’ => ‘formListado’)); ?>

<?php echo CHtml::hiddenField(‘UsuarioForm[elemento]’, ‘’, array()); ?>

<table style=‘border: 1px solid #FF0000;’>

&lt;tr style='background-color: pink; text-align: center; font-weight: bold;'&gt;


	&lt;td&gt;Marcas&lt;/td&gt;


	&lt;td&gt;Username&lt;/td&gt;


	&lt;td&gt;Edad&lt;/td&gt;


&lt;/tr&gt;


&lt;?php &#036;i = 0; ?&gt;


&lt;?php foreach(&#036;usuarios as &#036;usuario): ?&gt;


&lt;tr&gt;


	&lt;td style='text-align: center;'&gt;&lt;?= CHtml::checkBox(&quot;UsuarioForm[marca][{&#036;i}]&quot;, false, array('value' =&gt; &#036;usuario['username'])); ?&gt;&lt;/td&gt;


	&lt;td&gt;&lt;?= &#036;usuario['username']; ?&gt;&lt;/td&gt;


	&lt;td style='text-align: center;'&gt;&lt;?= &#036;usuario['edad']; ?&gt;&lt;/td&gt;


&lt;/tr&gt;


&lt;?php &#036;i++; ?&gt;


&lt;?php endforeach; ?&gt;

</table>

<br />

<?= CHtml::submitButton(‘Remover’, array(

	'onClick' =&gt; &quot;document.getElementById('formListado').action = '&quot; . CHtml::normalizeUrl(array('adminUsuario/remover')) . &quot;'&quot;

)); ?>

<?php echo CHtml::endForm(); ?>

2) EN EL CONTROLADOR LA SIGUIENTE FUNCION CON EL SIGUIENTE CODIGO:

[b]public function actionRemover()


{[/b]


	if(&#33;isset(&#036;_POST['UsuarioForm']))


	{


		Yii::app() -&gt; request -&gt; redirect(CHtml::normalizeUrl(array('AdminUsuario/index')));			


		exit;


	}





	&#036;usuarios = array_values(&#036;_POST['UsuarioForm']['marca']);


	


	&#036;total = 0;


	&#036;borrados = 0;





	foreach(&#036;usuarios as &#036;username)


	{


		&#036;usuario = new AdminUsuario();


		&#036;usuario -&gt; username = &#036;username;


		if(&#036;usuario -&gt; remover())


			&#036;borrados ++;


		&#036;total ++;


	}


	Yii::app() -&gt; user -&gt; setFlash('mensajeEstado', &quot;Se removieron {&#036;borrados} de {&#036;total} registros.&quot;);


	Yii::app() -&gt; request -&gt; redirect(CHtml::normalizeUrl(array('AdminUsuario/index')));			


	exit;


[b]}[/b]

3) Y EN EL MODELO LA FUNCION remover con el CODIGO Siguiente:

[b]public function remover()

{[/b]


     &#036;sql = &quot;DELETE FROM AdminUsuario WHERE username=:username&quot;;


 &#036;comando = Yii::app()-&gt;db-&gt;createCommand(&#036;sql);


 &#036;comando-&gt;bindParam(':username',&#036;this-&gt;username, PDO::PARAM_STR, 16);


 &#036;control=&#036;comando-&gt;execute();


 return (&#036;control &gt; 0);

}

Pero arroja el siguiente error… Indirect modification of overloaded property AdminUsuario::$username has no effect

Estoy tratando de solucionar este error que arroja Yii, si alguien por favor puede ayudar con este tema…

No se que parte del código está mal o si es un bug de Yii o PHP…

Adjunto un archivo de imagen…

Gracias por su ayuda!..

Si nadie te sugiere algo mejor, yo te invitaría que cambiaras el nombre de username en algún sitio. Actualmente con ese nombre existe el campo y la columna de la tabla, que a la vez es una propiedad del modelo.

Puede que PHP no se líe, pero a mi me cuesta seguirlo. Solo es una sugerencia, que directamente no aporta nada, pero que te obligara a revisar el código, ya que el error lo esta dando por sobregrabar un comportamiento de $username

Saludos…

Bueno al comienzo pensé que era un error de sintaxis en

$comando->bindParam(’:username’,$this->username, PDO::PARAM_STR, 16); pero no!, el código estaba bien!..La solución resulto ser sencilla y solamente faltaba declarar la variable username como público en el modelo, es decir public $username;

Un saludo…

Estoy probando un FORMULARIO con las siguientes caracteristicas…

Tiene un campo tipo TextField, que será donde se ingresa por ejem. una fecha…

seguido de una lista con multiples checkboxes…

y al final un boton guardar…

La lista de checkboxes se cargan de una tablaA(ID, NUM)

y todos los checkboxes seleccionados se guardan en una tablaB(COD_auto, ID, fecha), cuando presiono el boton guardar…

TABLAA

check NUM

( 0 , 1 )

( 1 , 2 )

( 0 , 3 )

( 1 , 4 )

( 0 , 5 )

TABLAB

COD_auto ID fecha

( 1 , 2 )

( 2 , 4 )

Hasta aqui todo ok…

el problema radica cuando intento ingresar y añadir el campo fecha en la TABLAB, sale el siguiente error:

CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens. The SQL statement executed was: INSERT INTO tablaB( COD_auto , ID, fecha) VALUES (:COD_auto , :ID, ‘16/04/2013’)

Voy a compartirles el código a ver si alguien por favor me podria ayudar…

/ESTO ES EN LA VISTA********/

<?php echo CHtml::beginForm(CHtml::normalizeUrl(array(‘detalleA/index’)), ‘post’, array(‘id’ => ‘formListado’)); ?>

<?php echo CHtml::hiddenField(‘UsuarioForm[elemento]’, ‘’, array()); ?>

<table width="200" border="1">

<tr>

&lt;td&gt;Fecha&lt;/td&gt;


&lt;td&gt;


&lt;input name=&quot;fecha&quot; type=&quot;text&quot; /&gt;


&lt;/td&gt;


&lt;td&gt;&amp;nbsp;&lt;/td&gt;


&lt;td&gt;&amp;nbsp;&lt;/td&gt;

</tr>

</table>

<table style=‘border: 1px solid #FF0000;’>

&lt;tr style='background-color: #666666; text-align: center; font-weight: bold; color:#7CD0DC;'&gt;


	&lt;td&gt;CHECK&lt;/td&gt;


	&lt;td&gt;NUM&lt;/td&gt;


    &lt;td&gt;&amp;nbsp;&lt;/td&gt;


    &lt;td&gt;&amp;nbsp;&lt;/td&gt;


&lt;/tr&gt;


&lt;?php &#036;i = 0; ?&gt;


&lt;?php foreach(&#036;asistencia as &#036;asiste): ?&gt;


&lt;tr&gt;


	&lt;td style='text-align: center;'&gt;&lt;?= CHtml::checkBox(&quot;UsuarioForm[marca][{&#036;i}]&quot;, false, array('value' =&gt; &#036;asiste['ID'])); ?&gt;&lt;/td&gt;





    &lt;td&gt;&lt;?= &#036;asiste['ID']; ?&gt;&lt;/td&gt;


    &lt;td&gt;&amp;nbsp;&lt;/td&gt;


    &lt;td&gt;&amp;nbsp;&lt;/td&gt;


&lt;/tr&gt;


&lt;?php &#036;i++; ?&gt;


&lt;?php endforeach; ?&gt;

</table>

<?= CHtml::submitButton(‘Guardar’, array(

	'onClick' =&gt; &quot;document.getElementById('formListado').action = '&quot; . CHtml::normalizeUrl(array('DetalleAsistencia/guardar')) . &quot;'&quot;

)); ?>

<?php echo CHtml::endForm(); ?>

/ESTO ES EN EL CONTROLLER********/

public function actionGuardar()

{


	if(&#33;isset(&#036;_POST['UsuarioForm']))


	{


		Yii::app() -&gt; request -&gt; redirect(CHtml::normalizeUrl(array('DetalleA/index')));			


		exit;


	}





	&#036;asistencia = array_values(&#036;_POST['UsuarioForm']['marca']);


	


	&#036;total = 0;


	&#036;guardados = 0;


		


	foreach(&#036;asistencia as &#036;cod_nivel)


	{


		&#036;asist = new TablaB();


		&#036;asist -&gt; cod_nivel = &#036;cod_nivel;


		


		if(&#036;asist -&gt; guardar())


			&#036;guardados ++;


		


		&#036;total ++;


	}


	Yii::app() -&gt; user -&gt; setFlash('mensajeEstado', &quot;Se removieron {&#036;guardados} de {&#036;total} registros.&quot;);


	Yii::app() -&gt; request -&gt; redirect(CHtml::normalizeUrl(array('DetalleA/index')));			


	exit;


}

/EN EL MODELO****************/

public function guardar()


{	


	


	&#036;fecha = &#036;_POST[&quot;fecha&quot;];


	&#036;sql = &quot;INSERT INTO TablaB( COD_auto , ID, fecha) &quot;


	.


	       &quot;VALUES (:COD_auto, :ID, '&#036;fecha')&quot;;


		   


	&#036;comando = Yii::app() -&gt; db -&gt; createCommand(&#036;sql);


	


	 &#036;comando -&gt; bindParam(&quot;:COD_auto&quot;, &#036;this -&gt; COD_auto, PDO::PARAM_INT);


	 &#036;comando -&gt; bindParam(&quot;:ID&quot;, &#036;this -&gt; ID, PDO::PARAM_INT);


	 &#036;comando -&gt; bindParam(&quot;:fecha&quot;, &#036;fecha , PDO::PARAM_STR);


	 &#036;control = &#036;comando -&gt; execute();


	


	return (&#036;control &gt; 0);


}

Por el error que me sale CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens.

Me late que es porque no se permite insertar varios registros, debido a que tengo multiples checkboxes…

o tal vez porque la variable fecha no tiene nada… no se si sea tambien por no utilizar los formularios

<?php echo CHtml::activeTextField($model, ‘$id’); ?>, no le hallo la falla en el codigo…

Pero esto no se como solucionarlo, si alguien puede por favor ayudarme con este problema…

Gracias!..