Yii Framework Forum: Error Sql Yii - Formulario Con Checkboxes - Yii Framework Forum

Jump to content

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

Error Sql Yii - Formulario Con Checkboxes Error SQL Yii - Formulario con checkboxes Rate Topic: -----

#1 User is offline   cesarg24 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-November 12

Posted 30 March 2013 - 05:52 PM

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;'>
<tr style='background-color: pink; text-align: center; font-weight: bold;'>
<td>Marcas</td>
<td>Username</td>
<td>Edad</td>
</tr>
<?php $i = 0; ?>
<?php foreach($usuarios as $usuario): ?>
<tr>
<td style='text-align: center;'><?= CHtml::checkBox("UsuarioForm[marca][{$i}]", false, array('value' => $usuario['username'])); ?></td>
<td><?= $usuario['username']; ?></td>
<td style='text-align: center;'><?= $usuario['edad']; ?></td>
</tr>
<?php $i++; ?>
<?php endforeach; ?>
</table>
<br />
<?= CHtml::submitButton('Remover', array(
'onClick' => "document.getElementById('formListado').action = '" . CHtml::normalizeUrl(array('adminUsuario/remover')) . "'"
)); ?>
<?php echo CHtml::endForm(); ?>

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

public function actionRemover()
{

if(!isset($_POST['UsuarioForm']))
{
Yii::app() -> request -> redirect(CHtml::normalizeUrl(array('AdminUsuario/index')));
exit;
}

$usuarios = array_values($_POST['UsuarioForm']['marca']);

$total = 0;
$borrados = 0;

foreach($usuarios as $username)
{
$usuario = new AdminUsuario();
$usuario -> username = $username;
if($usuario -> remover())
$borrados ++;
$total ++;
}
Yii::app() -> user -> setFlash('mensajeEstado', "Se removieron {$borrados} de {$total} registros.");
Yii::app() -> request -> redirect(CHtml::normalizeUrl(array('AdminUsuario/index')));
exit;
}
3) Y EN EL MODELO LA FUNCION remover con el CODIGO Siguiente:

public function remover()
{

$sql = "DELETE FROM AdminUsuario WHERE username=:username";
$comando = Yii::app()->db->createCommand($sql);
$comando->bindParam(':username',$this->username, PDO::PARAM_STR, 16);
$control=$comando->execute();
return ($control > 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!...

Attached File(s)

  • Attached File  ERROR.jpg (174.04K)
    Number of downloads: 12

0

#2 User is offline   Miguel Garcia 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 06-November 12

Posted 31 March 2013 - 04:18 AM

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
0

#3 User is offline   cesarg24 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-November 12

Posted 31 March 2013 - 09:30 AM

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

#4 User is offline   cesarg24 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-November 12

Posted 01 April 2013 - 05:49 PM

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>
<td>Fecha</td>
<td>
<input name="fecha" type="text" />
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>

<table style='border: 1px solid #FF0000;'>
<tr style='background-color: #666666; text-align: center; font-weight: bold; color:#7CD0DC;'>
<td>CHECK</td>
<td>NUM</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<?php $i = 0; ?>
<?php foreach($asistencia as $asiste): ?>
<tr>
<td style='text-align: center;'><?= CHtml::checkBox("UsuarioForm[marca][{$i}]", false, array('value' => $asiste['ID'])); ?></td>

<td><?= $asiste['ID']; ?></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<?php $i++; ?>
<?php endforeach; ?>
</table>
<?= CHtml::submitButton('Guardar', array(
'onClick' => "document.getElementById('formListado').action = '" . CHtml::normalizeUrl(array('DetalleAsistencia/guardar')) . "'"
)); ?>
<?php echo CHtml::endForm(); ?>


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

public function actionGuardar()
{
if(!isset($_POST['UsuarioForm']))
{
Yii::app() -> request -> redirect(CHtml::normalizeUrl(array('DetalleA/index')));
exit;
}

$asistencia = array_values($_POST['UsuarioForm']['marca']);

$total = 0;
$guardados = 0;

foreach($asistencia as $cod_nivel)
{
$asist = new TablaB();
$asist -> cod_nivel = $cod_nivel;

if($asist -> guardar())
$guardados ++;

$total ++;
}
Yii::app() -> user -> setFlash('mensajeEstado', "Se removieron {$guardados} de {$total} registros.");
Yii::app() -> request -> redirect(CHtml::normalizeUrl(array('DetalleA/index')));
exit;
}


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

public function guardar()
{

$fecha = $_POST["fecha"];
$sql = "INSERT INTO TablaB( COD_auto , ID, fecha) "
.
"VALUES (:COD_auto, :ID, '$fecha')";

$comando = Yii::app() -> db -> createCommand($sql);

$comando -> bindParam(":COD_auto", $this -> COD_auto, PDO::PARAM_INT);
$comando -> bindParam(":ID", $this -> ID, PDO::PARAM_INT);
$comando -> bindParam(":fecha", $fecha , PDO::PARAM_STR);
$control = $comando -> execute();

return ($control > 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!...
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