[Risolto][Yii 1]Da Php "puro" A Yii

Salve a tutti,

ho questo codice che uso in un sito creato con php scritto a "manina".

Lo uso per calcolare il prezzo in base al peso inserito nel form.

Come posso farlo eseguire a yii?




$peso = $_POST['peso'];


$prezzo = 9999.00;


if ($peso < 501){

  $prezzo = 29.95;

}

if ($peso < 201){

  $prezzo = 16.95;

}

if ($peso < 101){

  $prezzo = 9.75;

}

if ($peso < 51){

  $prezzo = 6.50;

}

if ($peso < 21){

  $prezzo = 4.40;

}



Chiedo aiuto perchè sto veramente dando di matto :(

Perchè così non lo esegue?

Ciao Fabrizio, no cosi non lo esegue sia che lo inserisca nel form, sia che lo inserisca nel controller. Praticamente cosi mi restituisce sempre 4,40 anche se come peso inserisco 500

Puoi postare il pezzo di codice in cui dovrebbe girare il blocco che hai riportato?

Sicuro che non ci sia un errore nel passare i parametri?

Hai provato a fare




var_dump($_POST);



subito prima dell’assegnazione di $peso in modo da verificare i parametri ricevuti dal server?

Ho provato prima nello step 2 del from




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

<?php $peso = $_POST['peso'];


$prezzo = 9999.00;


if ($peso < 501){

  $prezzo = 29.95;

}

if ($peso < 201){

  $prezzo = 16.95;

}

if ($peso < 101){

  $prezzo = 9.75;

}

if ($peso < 51){

  $prezzo = 6.50;

}

if ($peso < 21){

  $prezzo = 4.40;

}

?>


	<?php echo $form->errorSummary($model); ?>

    

         <table>

    <td bgcolor="#01388B" style=" border-radius:10px;">

    <center><h3><font color="#FFFFFF">Dati Inseriti</font></h3></center>

    </td>

    </table>

    

    

    <table  bgcolor="#01388B" style=" border-radius:10px;">

            <td>

			<font color="#FFFFFF"><?php echo $model->cognome; ?> <?php echo $model->nome; ?> -

			<?php echo $model->ubicazione; ?> <?php echo $model->via; ?> n. <?php echo $model->civico; ?>

            <?php echo $model->cap; ?> , <?php echo $model->comune; ?> (<?php echo $model->provincia; ?>)</font>

           </td>

   </table>

    

        

    <table bgcolor="#01388B" style=" border-radius:10px;">

    <tr>

    <td>

		<?php echo $form->labelEx($model,'prezzo'); ?>

		<?php echo $form->textField($model,'prezzo', array()); ?>

		<?php echo $form->error($model,'prezzo'); ?>

     </td>

........



poi nel Controller prima del validate




.........

$this->setPageState('step1',$_POST['Ps']); // save step1 into form state

  $model=new Ps('step1');

  

  $model->attributes =$_POST['Ps'];

  $peso = $_POST['peso'];


$prezzo = 9999.00;


if ($peso < 501){

  $prezzo = 29.95;

}

if ($peso < 201){

  $prezzo = 16.95;

}

if ($peso < 101){

  $prezzo = 9.75;

}

if ($peso < 51){

  $prezzo = 6.50;

}

if ($peso < 21){

  $prezzo = 4.40;

}

  if ($model->validate())

  $this->render('form2',array('model'=>$model));


  else {

    $this->render('form1',array('model'=>$model));

 

   }

}

........



In questo modo su prezzo non compare nulla.

Se invece inserisco




$peso = $_POST['peso'];


$model->prezzo = 9999.00;


if ($peso < 501){

$model->prezzo = 29.95;

}

if ($peso < 201){

$model->prezzo = 16.95;

}

if ($peso < 101){

$model->prezzo = 9.75;

}

if ($peso < 51){

$model->prezzo = 6.50;

}

if ($peso < 21){

$model->prezzo = 4.40;

}



qualsiasi peso io inserisca mi restituisce sempre 4.40

inserendo il var_dump

mi restituisce questo




 ["peso"]=> string(2) "56" } ["step2"]=> string(6) "Avanti" } 



quindi presumo che il valore peso lo riceva…il problema è fargli restituire il prezzo giusto!!!

Vedo qualche parentesi graffa di troppo nella risposta del var_dump.

Inoltre nel form non viene mai popolato peso, non vedo un textbox che possa popolarlo.

Buongiorno, peso e un textField nel quale io inserisco il peso e fa parte del 1° step del form. Al click su Avanti si passa al 2° step dove dovrebbe comparire il prezzo in automatico (in base al peso inserito nel 1° step), più altri campi da compilare prima dell’ inserimento di tutti i dati nel database. Con GET il valore peso viene passato al 2° step, perchè se nel 2° step scrivo:


<?php echo $model->peso; ?> 

mi stampa a video il peso che ho inserito nel 1° step.

Comunque sia non ne riesco a venirne a capo. Se qualcuno ha una soluzione anche più complessa, con JQuery o Ajax mi farebbe piacere leggere un link di riferimento perchè io non ne ho trovati. Ho trovato solo esempi con moltiplicazioni di prezzo (unico) * quantità…ma non è ciò di cui ho bisogno io.

prima di tutto devi essere sicuro che il name del tuo campo testuale si solo "peso",

Vedo che hai costruito la form con il solito metodo di yii textField($model,‘peso’

di solito questo genera un name di questo tipo: name=TuoModel[peso]

e nel post te lo ritrovi con $_POST[‘TuoModel’][‘peso’].

come mai non ti ritrovi il tuo $model->peso?

Una volta verificato che il tuo peso sia veramente in $_POST[‘peso’] o meno,

prova a fare il custom della variabile in int, perchè da quello che leggo, l’iterazione finisce sempre nell’ultimo ciclo, quindi viene considerato sempre < di 21.

prova ad inserire un: $peso = (int)$_POST[‘peso’];

st4nny avevi ragione, applicando ciò che hai detto e inserendo quindi questo codice nel 2° step




<?php $peso = (int)$_POST['peso']; 


$prezzo = 9999.00;


if ($model->peso < 501){

  $model->prezzo = 29.95;

}

if ($model->peso < 201){

  $model->prezzo = 16.95;

}

if ($model->peso < 101){

  $model->prezzo = 9.75;

}

if ($model->peso < 51){

  $model->prezzo = 6.50;

}

if ($model->peso < 21){

  $model->prezzo = 4.40;

  

}

?>



tutto funziona a dovere. Ti ringrazio infinitamente.