[Yii1][RISOLTO]Problema con un' array

Salve a tutti.

Ri-eccomi qua a chiedere un’ aiuto per sbrogliare una situazione dalla quale ci sto uscendo pazzo.

Ho un form che mi invia dei dati e se faccio un


var_dump($POST);

ricevo questo:




array(6) { ["Fatture"]=> array(11) { ["cl_cognome"]=> string(5) "ROSSI" 

["cl_nome"]=> string(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' /> "MAURIZIO" 

["cl_tipo_via"]=> string(3) "VIA" 

["cl_indirizzo"]=> string(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' /> "DEI 4 RE" 

["cl_civico"]=> string(2) "45" 

["cl_stato"]=> string(6) "ITALIA" 

["cl_cap"]=> string(5) "00145" 

["cl_comune"]=> string(4) "ROMA" 

["cl_provincia"]=> string(2) "RM" 

["cl_piva"]=> string(11) "03225640214" 

["cl_codfisc"]=> string(16) "RSIMRZ45A02Z105C" } 


["prodotto"]=> array(4) { 

[0]=> string(31) "CD" 

[1]=> string(37) "Video Cassetta" 

[2]=> string(37) "DVD" 

[3]=> string(36) "Gioco" 

} 


["peso"]=> array(4) { 

[0]=> string(2) "12" 

[1]=> string(2) "12" 

[2]=> string(2) "51" 

[3]=> string(2) "20" 

} 


["iva"]=> array(4) { 

[0]=> string(7) "ART.E15" 

[1]=> string(3) "22%" 

[2]=> string(3) "22%" 

[3]=> string(3) "22%" 

} 


["totale"]=> array(4) { 

[0]=> string(5) "12.00" 

[1]=> string(4) "3.28" 

[2]=> string(4) "4.51" 

[3]=> string(4) "7.44" 

} 


["yt0"]=> string(6) "Stampa" }



Ora mi ritrovo a dover mandare in stampa questo array dividendolo in righe tipo:

Prodotto - Peso - Iva - Totale.

Ad ogni riga un record dell’ array con i suoi valori.

La pagina di stampa è questa:




<table style="width: 100%; margin: auto;">

  <tbody>

    <tr>

	  <td colspan="5"></td>

        </tr>

        <br />

        <tr style=" width:100%; border:1px solid #000000; ">

        

			<td style="font-weight:bold; width:20%;">Prodotto</td>

			<td style="font-weight:bold; width:20%;">Peso</td>

			<td style="font-weight:bold; width:20%;">Iva</td>

			<td style="font-weight:bold; width:20%;">Totale</td>

					</tr>


QUI DOVREI INIZIARE IL CICLO DELL' ARRAY SE NON ERRO E INSERIRE OGNI RECORD IN OGNI RIGA


			<tr align="center">

                  <td style="width:40%; border-left:1px solid #000000; border-right:1px solid #000000; border-bottom:1px solid #000000;" align="left">

                       <?php echo $dati->prodotto?>

                        </td>

		

						<td style="width:20%; border-left:1px solid #000000; border-right:1px solid #000000; border-bottom:1px solid #000000;">

                        <?php echo  $dati->peso.' gr.';?> 

                        </td>

                       

						<td style="width:20%; border-left:1px solid #000000; border-right:1px solid #000000; border-bottom:1px solid #000000;">

                        <?php echo $dati->iva.'%'?> 

                        </td>

						

						<td style="width:20%; border-left:1px solid #000000; border-right:1px solid #000000; border-bottom:1px solid #000000;">

                        <?php echo number_format($imponibile,2,'.','').' €';?> 

                        </td>

		               </tr>


QUI DOVREI CHIUDERE IL CICLO DELL' ARRAY


			<tr>

	     <td colspan="5">

             </td>

        </tr>

     </tbody>

</table>



Non riesco pero a capire come faccio a scompattare questo tipo di array e "ciclarlo" nella pagina di stampa.

o meglio so che a $_POST[prodotto][$i] se inserito in un ciclo corrispondono i prodotto in righe:

$_POST[prodotto][0]

$_POST[prodotto][1]

e cosi via…sempre che non mi stia sbagliando nuovamente.

Qualcuno può essere cosi gentile da aiutarmi a risolvere questo dilemma ???? ;D

Grazie in anticipo :)

Una cosa del tipo:




<?php

$prodotto = $_POST['prodotto'];

$peso= $_POST['pesi'];

$iva = $_POST['iva'];


$html = '';

for($k=0;$k<count($prodotto);$k++) {

       

       $html = <<< HTML

         <tr>

               <td>{$prodotto[$k]}</td>

               <td>{$peso[$k]}</td>

               <td>{$iva[$k]}</td>

         </td>

HTML;

}




?>




<table>

      <tr>

           <th>Prodotto</th>

           <th>Peso</th>

           <th>Iva</th>

       </tr>

       <?= $html ?>

</table>



Ciao Fabrizio e come sempre GRAZIE della disponibilità

Questo pomeriggio provo il tuo suggerimento e ti faccio sapere.

Un Saluto

Niente da fare Fabrizio…non funziona.

Ti spiego un’ attimo.

Quindi ho un controller che mi restistuisce la query dei record e me li stampa a video.

Io qui posso modificarne lapercentuale di iva e l’ imponibile.

Quando poi clicco su "Stampa"

nel controller all’ azione che mi permette di fare ciò che ti ho detto ho provato a fare




.................

$fattura->attributes=$_POST['RiepilogoFattura'];

			var_dump($_POST);

			exit;

........................



e ricevo l’ array come ho descritto prima.

Poi questo array va scompattato per righe e inviato alla pagina di stampa.

Ho provato a mettere il tuo codice nella view di stampa(genera un pdf)…ma sembra quasy che non arrivino quei dati per $_POST.

Mi spiego meglio…se nella vista faccio




print_r($_POST);



mi scrive "Array".

Se invece scrivo:




print_r($_POST['prodotto']);

oppure

print_r($_POST['prodotto'][1]);



non mi stampa nulla.

Credo che mi sono incasinato per bene!!!! Forse non riesco a mandargli tutti i parametri dall’ actionintestazioneFatt alla actionStampa.

Le sto provando tutte ma non ne vengo a capo.

Qualche altra idea? Vuoi vedere più codice?

Intanto continuo a provare…che@@@@@@!!!

Se fai un




var_dump($_POST['prodotto']);



Sicuro che l’output di




var_dump($_POST);



sia proprio quello che hai mandato?

Allora l’ array $_POST è giustissimo.

Sempre nel controller (nell’ azione dove posso modificare iva e imponibile)

ho fatto:




$fattura->attributes=$_POST['RiepilogoFattura'];	

			//var_dump($_POST);

		    var_dump($_POST['prodotto']);

			exit;



e mi stampa l’ array di tutti i prodotti in sequenza:




array(4) { [0]=> string(31) "CD" [1]=> string(37) "Video Cassetta" [2]=> string(37) "DVD" [3]=> string(36) "Gioco" }



Quindi all’ actionIntestazioneFatt arriva l’ array.

Ecco anche l’ array che ricevo da var_dump($_POST);




array(6) { ["Fatture"]=> array(11) { ["cl_cognome"]=> string(5) "ROSSI" ["cl_nome"]=> string(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' /> "MAURIZIO" ["cl_tipo_via"]=> string(3) "VIA" ["cl_indirizzo"]=> string(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' /> "DEI 4 RE" ["cl_civico"]=> string(2) "45" ["cl_stato"]=> string(6) "ITALIA" ["cl_cap"]=> string(5) "00145" ["cl_comune"]=> string(4) "ROMA" ["cl_provincia"]=> string(2) "RM" ["cl_piva"]=> string(11) "06558742563" ["cl_codfisc"]=> string(16) "RSIMRZ45A02Z105C" } ["prodotto"]=> array(4) { [0]=> string(31) "CD" [1]=> string(37) "Video Cassetta" [2]=> string(37) "DVD" [3]=> string(36) "Gioco" } ["peso"]=> array(4) { [0]=> string(2) "12" [1]=> string(2) "12" [2]=> string(2) "51" [3]=> string(2) "20" } ["iva"]=> array(4) { [0]=> string(7) "ART.E15" [1]=> string(3) "22%" [2]=> string(3) "22%" [3]=> string(3) "22%" } ["totale"]=> array(4) { [0]=> string(3) "123" [1]=> string(4) "3.28" [2]=> string(4) "4.51" [3]=> string(4) "7.44" } ["yt0"]=> string(6) "Stampa" }



Questo è ciò che mi stampa a video.

io prima ho solo mandato a capo ad ogni record per far capire come veniva l’ array a video.

Fabrizio pensavo…nella mia nebbia più totale ;D

se nel controller setto le variabili




$prodotto = $_POST['prodotto'];

$peso = $_POST['peso'];

$piva = $_POST['iva'];

$totale = $_POST['totale'];



Nel redirect passo i parametri (sempre che passino come array…non lo so ).

A questo:




$this->redirect(array('StampaFattura','model'=>$model, 'fattura'=>$fattura, 'id_miss'=>$id_miss,

'intestatario'=>$intestatario, 'indirizzo'=>$indirizzo, 'indirizzo2'=>$indirizzo2, 'cf_pi'=>$cf_pi, 'nuovo_id'=>$nuovo_id));



aggiungo:




'prodotto'=>$prodotto, 'peso'=>$peso,'iva'=>$iva,'totale'=>$totale;

......che sono le variabili che ho settato prima........



Pensi che cosi passano alla vista della stampa?..che ripeto e un file PDF.

Quindi nella view ciclo come hai detto tu prima. Pensi possa funzionare?

Grazie ancora.

Scusami ma di che redirect stai parlando?

Non puoi passare delle variabili strutturate in quel modo a redirect, al massimo puoi aggiungere dei parametri nell’url.

Secondo me stai facendo un pò di confusione.

ecco appunto…te l’ ho detto che sono incasinato brutalmente…sono giorni che sto provando in mille modi…ma non riesco a farlo funzionare :(

Spiegami cosa c’entra il redirect nella visualizzazione in view dei parametri passati in $_POST. Così è più chiaro il tuo obiettivo.

ora ne sparo un altra…quando uno clicca su “STAMPA” al posto di fare il redirect posso rimanere sempre nella stessa action e fargli generare li l’ output del PDF? Cosi posso accedere agli array? Mo je do foco al pc ;D

Certo che puoi

Scusa ho letto adesso…ti spiego il tutto. Io ho una action Intestatrio fattura dove ho un form nel quale l’ utente inserisce l’ intestario della fattura…il form poi prosegue e viene validato da un altro model (RiepilogoFattura".

Quindi questi input sono dati da una query dove richiamo i prodotti scelti e lascio due inputfield liberi nel quale uno puo cambiare l’ iva e inserire l’ imponibile.

Quindi a questo punto la fattura sarebbe pronta per la stampa. Al click sul pulsante stampa vorrei stampare la fattu…che ora ho provato a generare appunto con il redirect all’ action “STAMPA FATTURA”.

Ora se è possibile posso generare l’ output del PDF senza usare un redirect ma facendo si che se per post arriva “stampa_fattura” (nome del pulsante) mi generi l’ output per il pdf recuperando i dati come mi hai spiegato?

Ok se posso…mi spieghi perfavore al posto di usare il


$this->redirect..........

cosa dovrei mettere li?

Questo e ciò che mi genera il pdf:




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

//////PREPARO IL PDF DA GENERARE E SALVARE NEL DATABASE

		$num_fattura = $_GET['nuovo_id'];

	    $this->layout="//layout/pdf-fattura";

	    $mPDF1 = Yii::app()->ePdf->mpdf();

	    

	    $mPDF1->WriteHTML($this->render('frontend/stampa_fattura',array(

	    'prodotto'=>$prodotto, 'intestatario'=>$intestatario, 'indirizzo'=>$indirizzo, 'indirizzo2'=>$indirizzo2, 

		'cf_pi'=>$cf_pi,'nuovo_id'=>$nuovo_id, 'num_fattura'=>$num_fattura,	'nome_ditta'=>$nome_ditta, 

		'ind_ditta'=>$ind_ditta, 'piva_ditta'=>$piva_ditta, 'cf_ditta'=>$cf_ditta, 'tel_ditta'=>$tel_ditta, 

		'email_ditta'=>$email_ditta),true));

		//////ASSEGNO IL NOME ALLA DIRECTORY DI SALVATAGGIO DELLE FATTURE PER OGNI FILIALE

		$path = Yii::getPathOfAlias('webroot').'/fatture-filiali/'.$id_filiale.'/';

		/////SE NON ESISTE LA CREO

		if(!is_dir($path))

		{

		mkdir($path, 0, true);	

		chmod($path, 0775);

		}

		///////DATA E NOME FATTURA

		$data_fatt = date('Y-m-d');

		$nome_fatt = 'Fattura-'.$num_fattura.'-'.$data_fatt.'.pdf';

		///////CREO IL LINK IN MANIERA TALE CHE SI POSSA SEMPRE RISTAMPARE E O CONTROLLARE LA FATTURA

		$create_link = Yii::app()->createAbsoluteUrl('').'/fatture-filiali/'.$id_filiale.'/'.$nome_fatt;

		//////FACCIO L' UPDATE DELLA TABELLA FATTURE  E AGGIUNGO IL LINK AL FILE PER LA VISTA

		$aggiungi_link = "UPDATE  fatture_filiali SET link = '$create_link' WHERE id_filiale = '$id_filiale' AND num_fatt = '$num_fattura'";

        $update_della_tabella = Yii::app()->db->createCommand($aggiungi_link);

		$update_della_tabella->execute();	

		/////////SALVO IL FILE NELLA DIRECTORY 

		$salva_file = $path.'/'.$nome_fatt;

        $mPDF1->Output($salva_file,  'F'); 

		////GENERO IL PDF DA STAMPARE

		$mPDF1->Output($nome_fatt, EYiiPdf::OUTPUT_TO_DOWNLOAD);

..................



Quindi l’action che fa il render del codice che mi hai scritto deve ricevere qualcosa per popolare le variabili che ci sono nel tuo codice.

Perchè ad esempio, $prodotto da dove viene?

Scusami prodotto fa parte di una vecchia prova dove gli spingevo l’ array alla vista…pero non modificava nulla prima della stampa.

E’ una vechia action di prova nella quale gli recuperava i record dal database e gli stampava la fattura senza permettergli modifiche. proveniva da qui:




/////////RICERCO LE MISSIVE PASSATE PER LA FATTURA E RECUPERO I LORO DATI

		$ricerca = Missiva::model()->findAllByAttributes(array('missiva_id'=>$_GET['id_miss']));

        $conta = count($ricerca);

        if($conta > 0){

        $prodotto = array();

        foreach($ricerca as $risultati)

        array_push($prodotto,$risultati->missiva_id);

        }



Quindi per quello che vorrei fare adesso non c’ entra nulla perche la fattura deve essere generata da cio che arriva per $_POST.

Benissimo. Puoi per fare una prova direttamente utilizzare i campi del $_POST nella view.

Ricordati però che i form autogenerati (ActiveForm) hanno come "action" la stessa azione che li ha generati.

Quindi se l’action che ha generato il form si chiama “generaForm”, la proprietà action di <form> punterà all’url dell’action “generaForm”.

Tu devi modificare questo valore per impostarlo ad esempio su “generaPdf”, cambiando la proprietà action dell’oggetto del form istanziato da ActiveForm.

ok ci provo…altra domanda…tramite i primi campi del form, quelli per l’ intestazione della fattura devono comunque popolarmi una tabella dei clienti. Quindi in questo caso il form è formato da due model

Fatture Filiali e RiepiloFattura. Facendo come dici tu nel codice del form:




<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'fatture-filiali-form',

	// Please note: When you enable ajax validation, make sure the corresponding

	// controller action is handling ajax validation correctly.

	// There is a call to performAjaxValidation() commented in generated controller code.

	// See class documentation of CActiveForm for details on this.

	'enableAjaxValidation'=>false,

)); ?>



quindi dovrei aggiungere:




'action'=>Yii::app()->createUrl('/CONTROLLER/AZIONE DI STAMPA PDF'),



giusto? e in questo modo lo faccio puntare direttamente alla action che genera il pdf?

Ho capito bene o sto ancora in alto mare?

Esatto, così tutti i dati andranno all’action per generare il pdf e non quello di default, che è l’action stessa che ha generato la view del form.