Insertar Codigo Java Y Php En Un Formulario Yii

Hola, y como siempre desculpen por mi espanol.

Tengo un codigo java y php que utilizo en mi sitio web (wordpress). Ahora necesito pasar este codigo en Yii pero no llego hacerlo. Tengo un formulario con text-area e un campo "precio". Gracias a JavaScript calculo el total de parablas que un usuario inserta en el textarea. En la siguente pagina me sale el precio total que el usuario tiene que pagar.

Esto es el codigo que quiero importar en mi aplicacion yii:




......

<script type="text/javascript">

function countwords()

{

var formtext=document.telegramma.text.value;

formtext=formtext.split(" ");

document.telegramma.nbwords.value= formtext.length;

document.telegramma.nbchar.value= document.telegramma.text.value.length;

}

</script>

<textarea rows="12" name="text" cols="60" wrap="virtual"></textarea></table>

<table align="center" width="50" cellspacing="0" cellpadding="10">

<td align="center">

<input type="submit" value="Adelante" onclick="javascript:countwords();">

<input type="hidden" name="nbwords" />

<input type="hidden" name="nbchar" />

</td></table>


</form>

</td></table>



En la siguente pagina calculo el precio total gracias a este trozo de codigo:




$text = $_POST['text'];

$nbwords = $_POST['nbwords'];


$precio = 9999.00;


if ($nbwords < 501){

  $precio = 29.95;

}

if ($nbwords < 201){

  $precio = 16.95;

}

if ($nbwords < 101){

  $precio = 9.75;

}

if ($nbwords < 51){

  $precio = 6.50;

}

if ($nbwords < 21){

  $precio = 4.40;

}


print "<table width='200' bgcolor='#FFFF00'><td align='center' width='200'><font color='#000066'>Has insertado <b>$nbwords parablas. El precio es <b>$precio €</b></td></table>";



Ahora el calculo de parablas lo hace cuando le paso los parametros nbwords (nbchars no lo utilizo)de la index a la pagina que verifica los datos y luego calcula el precio. En el form hay el boton


<input type="submit" value="Adelante" onclick="javascript:countwords();">

gracias al cual llego a la pagina siguente de verificacion. En Yii ya tengo un formulario con 2 steps pero no llego a insertar el codigo php en Yii para que todo funcione. Alguien de vos otros tiene alguna idea por solucionar este problema?

Como siempre Gracias :)

Buenos días.

Pero qué es lo que no te funciona?

No te llega a la página de verificación?

A dónde quieres ir después de la página ed verificación?

En el primer trozo de código tienes un </form>, pero no veo por ningún lado la apertura <form action="…>.

Escríbenos el código completo y especifica donde te falla.

Un saludo.

Buenos dias Lagogz y gracias por que eres lo unico que me contesta!!!

No lo he escribido todo (el codigo) por no joder la gente en el leerlo.

Me voy a esplicar mejor.

Estos son los dos Step de mi forumlario Yii

Step 1:




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

	'id'=>'telegramma-form',

	'stateful'=>true,

	// 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,

)); ?>


<p class="note">Tutti i campi contrassegnati con <span class="required">*</span> sono obbligatori.</p>


    <table>

    <td>

    <center><h2>Mittente</h2></center>

    </td>

    </table>

    <table>

    <tr>

    <td>

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

		<?php echo $form->textField($model,'nome_mitt',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'nome_mitt')."</b></font>"; ?>

        </td>

      

        <td>

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

		<?php echo $form->textField($model,'cognome_mitt',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'cognome_mitt')."</b></font>" ;?>

        </td>

         </tr>

         </table>

         <table>

         <tr>

         <td>

		<?php echo $form->labelEx($model,'Indirizzo'); ?><br />

		<?php echo $form->dropDownList($model,'indirizzo_mitt', CHtml::listData(Ubicazioni::model()->findAll(), "nomeub","nomeub"));?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'indirizzo_mitt')."</b></font>"; ?>

        </td>

        <td>

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

		<?php echo $form->textField($model,'via_mitt',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'via_mitt')."</b></font>"; ?>

        </td>

        <td>

		<?php echo $form->labelEx($model,'civico'); ?><br />

		<?php echo $form->textField($model,'civico_mitt',array('size'=>20,'maxlength'=>20)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'civico_mitt')."</b></font>"; ?>

        </td>

        </tr>

        </table>

        <table>

        <tr>

        <td>

		<?php echo $form->labelEx($model,'cap'); ?><br  />

		<?php echo $form->dropDownList($model,'cap_mitt', CHtml::listData(Cap::model()->findAll(), "cap","cap"));?>

        <?php /* decidere se usare questa o quella sopra echo $form->dropDownList($model,'cap_mitt', CHtml::listData(Cap::model()->findAll(), "id","cap"))*/;?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'cap_mitt')."</b></font>"; ?>

        </td>

        <td>

		<?php echo $form->labelEx($model,'citta'); ?><br  />

		<?php echo $form->textField($model,'citta_mitt',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'citta_mitt')."</b></font>"; ?>

        </td>

        <td>

		<?php echo $form->labelEx($model,'provincia'); ?><br  />

		<?php echo $form->textField($model,'provincia_mitt',array('size'=>2,'maxlength'=>2)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'provincia_mitt')."</b></font>"; ?>

        </td>

        </tr>

        </table>

        <table>

        <tr>

        <td>

		<?php echo $form->labelEx($model,'stato'); ?><br  />

		<?php echo $form->dropDownList($model,'stato_mit', CHtml::listData(Stati::model()->findAll(), "nome","nome"));?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'stato_mit')."</b></font>"; ?>

        </td>

        </tr>

        </table>

        <br  />

        <table>

         <td>

         <center><h2>Destinatario</h2></center>

         </td>

         </table>

        

        <table>

        <tr>

        <td>

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

		<?php echo $form->textField($model,'nome_dest',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'nome_dest')."</b></font>"; ?>

        </td>

        <td>

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

		<?php echo $form->textField($model,'cognome_dest',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'cognome_dest')."</b></font>"; ?>

        </td>

        </tr>

        </table>

        <table>

        <tr>

        <td>

		<?php echo $form->labelEx($model,'Indirizzo'); ?><br />

		<?php echo $form->dropDownList($model,'indirizzo_dest', CHtml::listData(Ubicazioni::model()->findAll(), "nomeub","nomeub"));?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'indirizzo_dest')."</b></font>"; ?>

        </td> 

        <td>

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

		<?php echo $form->textField($model,'via_dest',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'via_dest')."</b></font>"; ?>

        </td>

        <td>       

		<?php echo $form->labelEx($model,'civico'); ?><br />

		<?php echo $form->textField($model,'civico_dest',array('size'=>20,'maxlength'=>20)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'civico_dest')."</b></font>"; ?>

        </td>

        </tr>

        </table>

        <table>

        <tr>

        <td>

		<?php echo $form->labelEx($model,'cap_id'); ?><br  />

		<?php echo $form->dropDownList($model,'cap_id', CHtml::listData(Cap::model()->findAll(), "id","cap"));

		 /*Posso anche utilizzare la forumla sotto con lo stesso risultato

		 $arrCap = Cap::model()->findAll();

         $arrData = CHtml::listData( $arrCap, 'id', 'cap');

         echo $form->dropDownList( $model, 'cap_id', $arrData);*/

		 ?>

        

        

		<?php echo "<font color='#000000'><b>" .$form->error($model,'cap_id')."</b></font>"; ?>

        </td>

        <td>

		<?php echo $form->labelEx($model,'citta'); ?><br  />

		<?php echo $form->textField($model,'citta_dest',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'citta_dest')."</b></font>"; ?>

        </td>

        <td>

		<?php echo $form->labelEx($model,'provincia'); ?><br  />

		<?php echo $form->textField($model,'provincia_dest',array('size'=>2,'maxlength'=>2)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'provincia_dest')."</b></font>"; ?>

        </td>

        </tr>

        </table>

        <table>

        <tr>

        <td>

		<?php echo $form->labelEx($model,'stato'); ?><br  />

		<?php echo $form->dropDownList($model,'stato_dest', CHtml::listData(Stati::model()->findAll(), "nome","nome"));?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'stato_dest')."</b></font>"; ?>

        </td>

        </tr>

        </table>

        <table>

        <td>

		<?php echo $form->labelEx($model,'testo'); ?><br />

		<?php echo $form->textArea($model,'parole',array('rows'=>6, 'cols'=>20, 'maxlenght'=>'1500')); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'parole')."</b></font>"; ?><br />


        </td>

        </table>




 <?php echo CHtml::submitButton('Annulla', array('name'=>'cancel')); ?>

 <?php echo CHtml::submitButton('Avanti' ,array('name'=>'step2')); ?>

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



Step 2:




<?php


/* @var $this TelegrammaController */

/* @var $model Telegramma */

/* @var $form CActiveForm */

?>


<div class="form">

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

	'id'=>'telegramma-form',

	'stateful'=>true,

	// 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,

)); ?>


<table>

        <td>

		<?php echo $form->labelEx($model,'precio'); ?><br  />

		<?php echo $form->textField($model,'precio',array('size'=>10,'maxlength'=>5)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'precio')."</b></font>"; ?>

        </td>

        <td>

		<?php echo $form->labelEx($model,'esito'); ?><br  />

		<?php echo $form->hiddenField($model,'esito',array('value'=>'In Consegna', 'type'=>"hidden", 'size'=>10,'maxlength'=>200)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'esito')."</b></font>"; ?>

        </td>

        

        <td>

		<?php echo $form->labelEx($model,'data_consegna'); ?><br  />

		<?php echo $form->hiddenField($model,'data_consegna',array('value'=>'2014-00-00', 'type'=>"hidden", 'size'=>10,'maxlength'=>10)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'data_consegna')."</b></font>"; ?>

        </td>

        <td>

		<?php echo $form->labelEx($model,'ora_consegna'); ?><br  />

		<?php echo $form->hiddenField($model,'ora_consegna',array('value'=>'00:00:00', 'type'=>"hidden", 'size'=>10,'maxlength'=><img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' />); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'ora_consegna')."</b></font>"; ?>

        </td>

         <td>

		<?php echo $form->labelEx($model,'agenzia_mitt'); ?><br  />

		<?php echo $form->hiddenField($model,'agenzia_mitt',array()); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'agenzia_mitt')."</b></font>"; ?>

        </td>

         <td>

		<?php echo $form->labelEx($model,'agenzia_dest'); ?><br  />

		<?php echo $form->hiddenField($model,'agenzia_dest',array()); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'agenzia_dest')."</b></font>"; ?>

        </td>

        </table>


<?php echo CHtml::submitButton('Torna Indietro', array('name'=>'step1')); ?>

<?php echo CHtml::submitButton('Conferma',array('name'=>'finish')); ?>

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

</div>



Ahora lo que quiero hacer en el Step 1 es poner mi javascript en la variable "$parole" (final de el Step1):

Entonces:




<?php echo $form->labelEx($model,'testo'); ?><br />

		<?php echo $form->textArea($model,'parole',array('rows'=>6, 'cols'=>20, 'maxlenght'=>'1500')); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'parole')."</b></font>"; ?><br />


/* TENGO QUE QUITAR EL $form->textArea "parole" Y PONER ESTO: */


<form name="telegramma" action="step2.php" method="post">

<script type="text/javascript">

function countwords()

{

var formtext=document.telegramma.text.value;

formtext=formtext.split(" ");

document.telegramma.nbwords.value= formtext.length;

document.telegramma.nbchar.value= document.telegramma.text.value.length;

}

</script>

<textarea rows="12" name="text" cols="60" wrap="virtual"></textarea></table>

<table align="center" width="50" cellspacing="0" cellpadding="10">

<td align="center">

<input type="submit" value="Avanti" onclick="javascript:countwords();">

<input type="hidden" name="nbwords" />

<input type="hidden" name="nbchar" />

</td></table>

</form>



El javascript me calcula el total de parablas que el usuario escribe en el textArea y pasa esa variable ($nbwords) gracias al metodo "post" (a mi que se la pase con post o con get me da iguale) a la pagina de controllo (Step 2 de formulario) donde hay el codigo php que dice a el usuario cuanto tiene que pagar.

Y entonces en el Step 2 tengo que insertar esto:




<?php

$text = $_POST['text'];

$nbwords = $_POST['nbwords'];


$precio = 9999.00;


if ($nbwords < 501){

  $precio = 29.95;

}

if ($nbwords < 201){

  $precio = 16.95;

}

if ($nbwords < 101){

  $precio = 9.75;

}

if ($nbwords < 51){

  $precio = 6.50;

}

if ($nbwords < 21){

  $precio = 4.40;

}

?>


/* AQUI TIENE QUE SALIR EL TOTAL QUE TIENE QUE PAGAR EL USUARIO GRACIAS A LA VARIABLE $nbwords Y A EL CODIGO PHP CON EL CUAL  SE HACE EL CALCULO. */

<?php echo $form->labelEx($model,'precio'); ?><br  />

		<?php echo $form->textField($model,'precio',array('size'=>10,'maxlength'=>5)); ?>

		<?php echo "<font color='#000000'><b>" .$form->error($model,'precio')."</b></font>"; ?>



Que sea un


<?php print $precio € 

o un textfield me da igual. El importante es que se calcule el total.

No se sy lo he esplicado bien :) … pues mi espanol también no es bueno.

Como siempre Gracias!!!

Bien, creo q te he entendido.

Tienes una página con un formulario (formulario A), en donde tienes un textarea. Quieres que al hacer el submit, se calcule el precio respecto al nº de palabras que hay en el textarea y recargar la misma página pero con otro formulario (formulario B ).

La verdad no veo el sentido de hacer esto, pero hagas lo que hagas supongo que irás a un action de tu controlador para recargar la página, no?

Entonces en mi opinión no tienes que hacer ningún javascript. En tu action escribes una función que calcule el nº de palabras de tu $_POST[‘Telegramma’][‘nbwords’] y lo pasas en el render a la siguiente llamada.




...

$numPalabras = $this->contarPalabras(); // O como quieras llamar a tu función.

$model->precio = $numPalabras * 500;    // O el precio que tu quieras.


$this->render('tuVista', array(

                           'model' => $model

                            ));

...



Y en tu vista ya trabajas con el precio.

Un saludo.

PD.: si lo que quieres es tener un formulario con varios pasos y un sólo submit, entonces no puedes tener un submit en el paso 1, tendrás un botón normal que lanze un javascript q te calcula el precio, te oculta la capa del step 1 y te muestra la capa del step 2, PERO SERÁ UN ÚNICO FORMULARIO!!!!!!

Te pongo un ejemplo de un único submit. En tu vista tienes un único formulario:





<script>

function irPaso2()

    {

        var textoControl = document.getElementById('textoControl').value;

        textoControl = textoControl.split(" ");

        document.getElementById('precio').value = textoControl.length * 500; // 500 o el precio que quieras

        

        document.getElementById('paso1').style.visibility = 'hidden';

        document.getElementById('paso2').style.visibility = 'visible';

    }

</script>


<div id="paso1">

            <?php echo CHtml::label('Texto Control', 'textoControl'); ?>

            <?php echo CHtml::textArea('textoControl',

                                        '',

                                        array(

                                            'rows'=>6, 

                                            'cols'=>50,

                                            'id' => 'textoControl'

                                            ));?>

</div>


<div id="paso2" style="visibility: hidden;">

            <?php echo CHtml::label('Precio', 'precio'); ?>

            <?php echo CHtml::textField('precio',

                                        '',

                                        array('id'=>'precio'));?>

</div>


<div class="row buttons">

	<?php echo CHtml::button('Avanzar', 

                                  array(

                                        'onclick' => 'irPaso2();',

                                        ));?>

</div>




Cuando pulses en el botón "Avanzar", se calculará el nº de palabras, se rellenará la caja de texto del precio, se ocultará el div del paso 1 y se mostrará el div del paso 2.

Tienes que cambiar los CHtml por $form, poner el resto de controles que desees incluido el form y listo. O sea, q encierras todo dentro de un formulario.

Un saludo.

Hola lagogz, desculpa si no he contestado mui pronto pero no hè tenido tiempo.

Ahora ententarè aplicar tu consejos a mi aplicaciòn y luego te dirè si he resuelto.

Del momento te digo gracias por tus ayudas. :)

Hola lagogz, lo que has echo esta bueno solo por el total de parablas que un usuario escribe, a lo que he visto, por que en nel campo "precio" solo apareche el numero de parablas. Y entonces por hacer que en mi DB inserte el valor precio aciendo el calculo que he dicho en el otro post (y que vuelvo ha esplicar mas abajo)… como puedo hacer? Aun tengo que hacer otra validacion por control y confirmación de campos en otro step. Asi como tu lo has echo me salen las parablas que un usuario escribe en el texArea. Pero el calculo de el precio lo hace gracias a:




$text = $_POST['text'];

$nbwords = $_POST['nbwords'];


$precio = 9999.00;


if ($nbwords < 501){

  $precio = 29.95;

}

if ($nbwords < 201){

  $precio = 16.95;

}

if ($nbwords < 101){

  $precio = 9.75;

}

if ($nbwords < 51){

  $precio = 6.50;

}

if ($nbwords < 21){

  $precio = 4.40;

}



por que con este codigo el php sabe que en el textArea hay ($nbwords) una cantidad de parablas y entonces tambien sabe que si hay menos de 21 parabals el precio es 4,40 €. Si hay (a partir de 21) mas de 20 parablas y menos 51 el precio es 6,50…y asi siguendo. Esto es lo que tengo que hacer. De manera que en el siguente step el usuario pueda mirar lo que ha insertado, el total que tiene que pagar y confirmarlo todo aciendo click en el submitButton e volvendo a la vista index dove les pongo un mensaje de gracias.

Harè otras pruebas, por que puede ser que me estoy equivocando yo en el aplicar tu codigo a my aplicacion.

De todas maneras te digo MUCHAS GRACIAS por tus consejos y por lo que gracias a ti estoy aprendiendo. :)

Buenas noches lagogz he encontrado este script que me devuelve (solo de forma read) el total de parablas de un textarea.




<script type=""text/javascript"">

var cnt;

function wordcount(count) {

var words = count.split(/\s/);

cnt = words.length;

var ele = document.getElementById('w_count');

ele.value = cnt;

}

document.write("<input type=text id=w_count size=4 readonly>");

</script>



Ahora tu conoces algo para que el valor w_count pueda ser insertado en el db? Por que si puedo insertar ese valor puedo hacer esto en el Controller. o No???




$model->precio = $model->w_count < 21 = 4,40;



pero aun me falta algo por que con eso en el controller solo puedo enviar el precio por un max de 20 parablas.

Es posible hacer un criteria en el cual puedo obtenir mi precio con estos if?




$precio = 9999.00;


if ($w_count < 501){

  $precio = 29.95;

}

if ($w_count < 201){

  $precio = 16.95;

}

if ($w_count < 101){

  $precio = 9.75;

}

if ($w_count < 51){

  $precio = 6.50;

}

if ($w_count < 21){

  $precio = 4.40;

}



Puedo hacer esto en el Controller??




...........

$precio = $precio;

$model->precio = $model->w_count < 21 = 4,40;

$model->precio = $model->w_count < 51 = 6,50;

$model->precio = $model->w_count < 101 = 19,75;

$model->precio = $model->w_count < 501 = 29,95;

..........



Te pido disculpa si estoy diciendo tonterias…pero ya sabes que voy aprendiendo y entonces voy haciendo pruebas … que hasta ahora no son buenas…pero bueno sigo probando. Todabia me falta llegar a insertar el w_count en el DB por hacer mis pruebas.

Espero entiendas lo que digo. :(

Un Saludo

Giannix, pero claro, hombre.

En la función irPaso2 que te escribí, calculo el precio suponiendo q cada palabra cuesta 500, por eso multiplico por 500. Lo que tienes que hacer escribir esto




if ($w_count < 501){

  $precio = 29.95;

}

if ($w_count < 201){

  $precio = 16.95;

}

if ($w_count < 101){

  $precio = 9.75;

}

if ($w_count < 51){

  $precio = 6.50;

}

if ($w_count < 21){

  $precio = 4.40;

}



en la función irPaso2 en formato JavaScript.

Y te vuelvo a repetir, haces un submit final o haces un submit con cada paso?

Si haces un submit al final no tienes que hacer nada más.

Si haces un submit a cada paso, pues en la función irPaso2 tienes que hacer un submit al final de la misma, y en tu controlador escribir el código correspondiente para actualizar lo que desees.

Si tengo tiempo hoy te paso un ejemplo.

Hola lagogz, y no se de verdad com decirte gracias por tu tiempo.

Del momento ago 2 submit para insertar valores en el DB a cadauno de los steps.

Ahora estoy ententando de hacer como me esplicastes con un solo formulario e la validacion final.

Lo que no llego hacer es escribir esa funcion php en java para que me calcule el precio. :(

Tambièn no llego a validar el formulario haciendo de tu manera por que me da este erro:




TelegrammaController and its behaviors do not have a method or closure named "contarPalabras". 



Me puedes esplicar tambièn el metodo con dos submit?

Por que tambièn me sale el mismo error.

Ya se que me voy a volver loco estos dias por que mi cerebro nunca descansa de cuando me levanto y voy a trabajar hasta que voy a dormir y a la noche tambien en mis suenos sigo escribiendo codigo y haciendo pruebas.

Ya veremos lo que va a pasar!!! :)

Hola, nadie puede ayudarme? Aun no he solucionado :(