[Yii 1]Problema multi update - tabular input

Salve a tutti.

Ho un problema con un update di un attributo (campo) nel database.

E’ la prima volta che mi cimento con l’ update di vari records tramite tabular input.

Quindi non tiratemi troppo le orecchie se dico qualche cavolata!!! ;D

Allego un file che riguarda la vista sulla quale si presenta il problema.

Ho queste funzioni nel controller:





	public function getRecuperoRecords() {

        $items = array();

 


        if (isset($_POST['DatiUtente']) && is_array($_POST['DatiUtente'])) {

            foreach ($_POST['DatiUtente'] as $item) {

            

                if ( array_key_exists('id', $item) ){

                    $items[] = DatiUtente::model()->findByPk($item['id']);

                }

               

                else {

                    $items[] = new DatiUtente();

                }

            }

        }

        return $items;

    }


	public function actionAssegna()

	{

	$this->layout="//layouts/benvenuto";

	$assegna_codice=new CodiceFiscale();


    $items=$this->getRecuperoRecords();

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

    {

        $valid=true;

        foreach($items as $i=>$item)

        {

            if(isset($_POST['DatiUtente'][$i]))

                $item->attributes=$_POST['DatiUtente'][$i];

            $valid=$item->validate() && $valid;

        }

        if($valid) 


    {

		$update_utente = $model->id_utente;			  

                                $assegna_codice->attributes=$_POST['DatiUtente'];

								$assegna_codice = DatiUtente::model()->findByAttributes(array('id_codice'=>array($update_utente)));

								$assegna_codice->isNewRecord = false;

								

                                

								$assegna_codice->codice_fiscale = $model->codice_fiscale;

                                

                                if($assegna_codice->save(false))

                                {	

									

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

			}

		}

		}

	

    $this->render('frontend/assegna-codice-fiscale',array(

			'items'=>$items

			));

	}



Questa è la vista divisa in due file




<td class="table_data" width="auto" style="font-weight:bold;">Nome</td>

			<td class="table_data_r" width="auto" style="font-weight:bold;">Azioni</td>

            <!--<td class="table_data_r"><b>Data / Ora</b></td>-->


					</tr>

<?php $this->widget('zii.widgets.CListView', array(

	'dataProvider'=>$dataProvider,

	'itemView'=>'frontend/_assegnazione_codice_fiscale',

)); ?>


     <tr class="tabella_info_footer">

	     <td colspan=5 class="tabella_chiusura_form">

         <?php 

		echo CHtml::submitButton($data->isNewRecord ? 'Crea' : 'Assegna',array('class'=>'btn btn-primary btn-small', 'submit' => array('DatiUtente/assegna')));?>

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

              </td>



Secondo file vista dove ho l’ attributo (o campo) che dovrei aggiornare

Piu records…stesso attributo da aggiornare sui vari record della vista:




...................altro codice




<td style="border-right:3px solid #b11a01; padding:30px 0px 0px 0px;" width="30%">

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

    <?php 

	$items = DatiUtente::model()->findAllByAttributes(array('id_utente'=>$data->id_utente));

	foreach($items as $i=>$item){ ?>

    <?php echo CHtml::activeTextField($item, "[$i]codice_fiscale"); ?>


        <?php }?>

     </td>

................... altro codice



Il nocciolo della questione è proprio su questo campo da aggiornare.

Al click sul pulsante continua a darmi questo errore (non esgue il redirect, non aggiorna i dati) e non riesco a risolverlo.




Fatal error: Call to a member function getErrors() on a non-object in C:\xampp\htdocs\yii\framework\web\helpers\CHtml.php on line 2002



su pgina bianca.

Come posso risolvere? Grazie in anticipo !!! :)

In questo blocco di codice




...................altro codice




<td style="border-right:3px solid #b11a01; padding:30px 0px 0px 0px;" width="30%">

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

    <?php 

        $items = DatiUtente::model()->findAllByAttributes(array('id_utente'=>$data->id_utente));

        foreach($items as $i=>$item){ ?>

    <?php echo CHtml::activeTextField($item, "[$i]codice_fiscale"); ?>


        <?php }?>

     </td>

................... altro codice



chi è $items? dove viene valorizzato? Qui se all’interno della view della lista, quindi è visibile solo $data.

Ciao Fabrizio e come sempre grazie della risposta. È vero ciò che dici è in effetti ho provato con $data->id_utente nel foreach ma continuava a darmi errore. Quindi ho provato a dirgli che items è = a findAll…per vedere se ricavava gli id è capiva che doveva prendere tutti i campi codice fiscale che riempivo ma invece continua a dirmi no object e quindi ho capito che l oggetto è vuoto. Ho provato a usare items x tenermi il più vicino possibile all esempio del tabular che ho trovato.poi quando ne capivo il funzionamento avrei cambiato i nomi. Ma ancora non riesco. Farlo funzionare. Tu che faresti?

Non ho ben capito la descrizione delle tue prove ulteriori.

Puoi postare un pò di codice?

L ultimo codice provato è quello che ho postato Fabrizio. Ora non ho pc a portata di mano quindi lunedì farò altre prove e posterò altro codice se serve. Le uniche prove fatte state queste


 <php echo CHtml::activeTextField($data, "[$i]codice_fiscale"); ?>

e


<php foreach($data->codice_fiscale as $i=>$item){ ?>

    <?php echo CHtml::activeTextField($item, "[$i]codice_fiscale"); ?>



ma questa prova e me ne scuso…credo sia spazzatura data dalla confusione cerebrale che avevo in quel momento. Domenica sera o lunedì se ho tempo provo a riscrivere il form e le action. Se hai soluzioni alternative o vuoi fare correzioni di codice fai pure…ho ancora tanto da imparare :) . Comunque sia grazie :)