Query mysql nel Controller

Salve,

avrei bisogno di inserire questa query nel controller in maniera tale che mi possa generare un’ azione che possa essere richiamata dentro un textField nel form, perchè poi tramite java devo fare dei calcoli.

questa è la query:




<?php      

						   

							mysql_connect("localhost","USERNAME","PASWORD");

                              mysql_select_db("privato");

							  $divisione = Yii::app()->user->id;

                                $query = "SELECT sessione_id, SUM(totale) FROM sessione WHERE operatore_id=$divisione"; 

	                            $result = mysql_query($query) or die(mysql_error());

                                 // Print out result 

                                while($totale = mysql_fetch_array($result)){

                                	echo  $totale['SUM(totale)'];

                                 }

                             ?>"



Attualmente ho inserito un "normale" form html dentro la vista in maniera tale da riuscire a generare ciò di cui ho bisogno per usare il java…visto che ancora non riesco con Yii come dovrebbe invece essere.

Form attuale dentro la vista:




 <form id="ConfermaSessione" name="ConfermaSessione" action="ConfermaSessione">

                <input size="3"  class="totale" id="totale" readonly="readonly" name="totale" 

                value="<?php                

						   

							mysql_connect("localhost","USERNAME","PASSWORD");

                              mysql_select_db("privato");

							  $divisione = Yii::app()->user->id;

                                $query = "SELECT sessione_id, SUM(totale) FROM sessione WHERE operatore_id=$divisione"; 

	                            $result = mysql_query($query) or die(mysql_error());

                                 // Print out result 

                                while($totale = mysql_fetch_array($result)){

                                	echo  $totale['SUM(totale)'];

                                 }

                             ?>"> €

                             

                         </td>

        

                       </tr>

        

         <tr class="table_data_header">

        <td class="table_data_l" colspan="3">Importo Ricevuto

        </td>      

         

         <td class="table_data">

         <input  size="3" class="importoricevuto" id="importoricevuto" value="0.00" name="importoricevuto"/> €

         </td>

         

         <tr class="table_data_header">

        <td class="table_data_l" colspan="3">Resto

        </td>

         <td class="table_data">

         <input value="<?php echo $resto ;?>"  id="resto" class="resto" size="3" readonly="readonly" name="resto"/> €

         

             

         </td>

        </tr>

		<tr class="table_data_footer">

			<td colspan=3 class="table_last_lr">

            <center><?php echo CHtml::submitButton('Il Cliente ha Pagato', array('class'=>'btn btn-primary', 'submit' => array('ConfermaSessione'))); ?>

        </form> </center>



Ho provato nel controller a creare una action per la query ma non funziona.

Prova query nel controller




public function actionImporticassautente()

		{

			$divisione=Yii::app()->user->id;

			$connessione=Yii::app()->db->createCommand('SELECT sessione_id, SUM(totale) FROM sessione WHERE operatore_id=$divisione')->query->All();

			$result = mysql_query($connessione) or die(mysql_error());

                                 // Print out result 

                                while($totale = mysql_fetch_array($result)){

                                	echo  $totale['SUM(totale)'];

			}

		}



e nella vista ho inserito questo




 <?php $form=$this->beginWidget('CActiveForm');?>

                <?php echo $form->textField($model, 'totale', $model->Importicassautente)?>

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



Quando arrivo alla cassa mi appare:

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

Potete aiutarmi a risolvere questo problema perfavore.

Grazie in anticipo!!!

L’approccio che usi è errato, ricordati che stai usando un framework MVC :)

Un controller senza model, in genere, è usato solo per fornire pagine statiche, a prescindere al tuo specifico caso cerca di mettere la logica (quindi connessione al db, query etc…) dentro un model o in un componente.

Ad esempio quella tabella "sessione" potrebbe avere un modello ActiveRecord e relativo controller che ti fornisce i risultati che vuoi.

Da quello che scrivi non si capisce la struttura della tua app quindi non saprei cosa consigliarti di preciso ma di sicuro non mettere tutto quel codice nel controller! (tanto meno nella vista)

Ciao Nicola, e grazie della risposta.

Quella tabella ha un controller e un model.

Praticamente in quella vista renderizzo le query a quella tabella (sessione), ma la vista stessa fa parte di un altro model e Controller. Per questo ho chiesto aiuto.

Ho provato come hai sicuramente visto a mettere la query dentro al controller dal quale sto renderizzando la vista…ma non mi funziona !!!

Forse mi sono spiegato male e me ne scuso. Io nel controller voglio creare una funzione che venga richiamata all’ interno del $formTextfield “totale”, come si fa con i menu dipendenti per i quali (almeno io ho fatto cosi) ti crei la funzione che esegue la query e la richiami nel dropDownList con $model->TuaFunzione. Ora questo non so se sia possibile farlo anche con i textField…e in più non riesco a organizzarmi la query a dovere nel controller. Vorrei fare come dici tu e quindi nel model o nel controller Sessione inserire la query e richiamarla con array(Controller/action) se fosse possibile…ma per ora non riesco neppure a far funzionare questa benedetta query!!! Ed infatti come dici tu, essendo questo un’ approcio non “giusto” per un framework (ammetto che è l’ unica vista dove ho query al suo interno), ma non riuscendo a creare il tutto, mi sono creato il form come se stessi creando una app senza il framework ;D …almeno cosi mi funziona…ma certo è che non voglio farlo cosi per questioni di sicurezza e di logica MVC. Quindi ho chiesto un help a qualcuno che come voi è molto più “ferrato” di me :rolleyes:

Si il problema è che dal codice che hai postato non si capisce cosa sia quel form e perché non ha un modello?

Io farei un getter nel model che gestisce il form e nella vista imposterei il valore del campo input col valore ritornato dal getter.

es.




public function getTotaleSessione() {

$sessione = ModelSessione::findOne([<where>]);


return $sessione->campo_del_model_sessione;

}



nella vista avrai il valore che ti serve in


$modelloForm->totaleSessione

Stai usando un framework, usalo anche per costruire il tuo form! :)

Grazie Nicola…ehm…quel form non ha un modello perchè non riuscendo a organizzarmi la query e il resto, ho preferito (per far funzionare ciò che mi serve) usare un classico form html :) ;D . Per quanto riguarda gli altri form che ho nell’ apps sono tutti creati con i model…questo l’ ho “buttato” dentro cosi nella vista perchè non sapevo come far funzionare ciò che mi serviva a me !!! Sorry :)

Ora provo come dici tu e vedo se mi carica l’ array di risultati nel textField.

Ultima cosa, quando scrivi




........

$sessione = ModelSessione::findOne([<where>]);

.......



2 Domande:

1)perchè findOne? A me servono tutti i risultati riguardanti quell’ utente, infatti nella query esegue “seleziona tutti i risultati con quella sessione_id riguardanti lo stesso operatore_id”. operatore_id=$divisione, dove $divisione=Yii::app()->user->id, perchè divido i risultati in base a Yii::app()->user->id che in quel momento è l’ utente connesso al quale è stata assegnata una determinata cassa (cassa_id) in precedenza e sulla quale in quel momento stà lavorando. Infatti mi trovo nella pagina cassa.

  1. where???? inserisco li le condizioni del find?

Scusa se possono sembrarti domande stupide…ma per i novelli… come me posso essere utili a capire.

Grazie ancora e scusa lo smartellamento di @@ (chiocciole) :D

Il mio era solo un esempio, oltretutto mi sono riferito a Yii2 :)

dentro il getter puoi mettere tutta la logica che ti pare, l’importante è che lì dentro tiri fuori il dato che ti serve e non ne controller o vista!

Ricordati che puoi creare un modello di quello che ti pare, quindi se c’è bisogno, puoi crearne uno per gestirti il tuo form!

Immagina sempre che il modello è quello che fa il lavoro sporco, il controller fa domande al modello per avere dati e li passa alla vista che li rappresenta solamente!

Ti ringrazio tanto per le spiegazioni, come sempre diretto, e molto chiaro. :)