elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Formulario subtotales
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Formulario subtotales  (Leído 4,431 veces)
bgnumis

Desconectado Desconectado

Mensajes: 155


Ver Perfil
Formulario subtotales
« en: 6 Junio 2016, 08:25 am »

Hola, quiero hacer un formulario de gastos, buceando por internet he visto algo que funciona:

Código
  1.  
  2. Quantity: Unit price: Amount:
  3.  
  4. Quantity: Unit price: Amount:
  5.  
  6. Quantity: Unit price: Amount:
  7.  
  8. Quantity: Unit price: Amount:
  9.  
  10. Quantity: Unit price: Amount:
  11.  
  12. Quantity: Unit price: Amount:
  13.  
  14. Total All:
  15.  
  16.  
  17.  

PREGUNTA 1

Se supone que para que multiplique y haga el total necesito este código de js, donde debo colocar esto para que calcule?:



Código
  1.  
  2.  
  3.  
  4. $(".qty").on('input', function () {
  5.    var self = $(this);
  6.    var unitVal = self.next().val();
  7.    self.next().next().val(unitVal * self.val());
  8.   fnAlltotal();
  9. });
  10.  
  11. $(".unit").on('input', function () {
  12.    var self = $(this);
  13.    var qtyVal = self.prev().val();
  14.    self.next().val(qtyVal * self.val());
  15.  fnAlltotal();
  16. });
  17.  
  18. function fnAlltotal(){
  19.  var total=0
  20.    $(".amount").each(function(){
  21.         total += parseFloat($(this).val()||0);
  22.    });
  23.    $(".result").val(total);
  24.  
  25. }
  26.  
  27.  
  28.  


PREGUNTA 2

Si utilizo dos subtotales en la página (utilizando el código anterior) pero dos veces (uno son gastos de alojamiento y otro bloque con su subtotal que sea gastos de desplazamiento) ¿Cómo conseguiría el total (suma de los dos subtotales?


PREGUNTA 3:

Si los campos de Quantity, total, etc quisiera que se guardaran en una tabla que quedara en la bdd mysql phpmyadmin (me explico fatal) ¿Cómo debería ponerlo en los campos? ¿Qué introducciones debería añadir?

Sé que son muchas cosas a ver si me podeis orientar


En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: Formulario subtotales
« Respuesta #1 en: 6 Junio 2016, 10:57 am »

Esta pregunta no debería ir en el subforo PHP  (menos la ultima  :-\)

1. Siempre en el apartado <head> de tu web, ya sea en un archivo .js incluido en <script src="/path/to/scripts.js"></script> o entre las mismas etiquetas <script>código js</script>.

2. ¿Te estás respondiendo tu mismo o es que quieres un ejemplo?  ;D Como dices, hay que sumar los dos valores. Si los valores están en el campo .result, dales otro nombre a cada uno: .alojamiento y .desplazamiento y simplemente los sumas una vez ambos estén calculados:

Código
  1. var alojamiento    = $(".alojamiento").val(),
  2.    desplazamiento = $(".desplazamiento").val();
  3.  
  4. $('.total').val(alojamiento + desplazamiento);

Siendo total el campo donde muestras la suma de ambos.

3. Para guardar en la db solo tienes que coger los datos (igual que hago arriba) y enviarlos por ajax (preferiblemente usando post) a un script php que haga la petición a mysql. Hay mil ejemplos de ajax en el apartado programación web o directamente ver la función de jQuery .post() que hace lo que necesitas. Y la parte de PHP es simplemente eso, una query a mysql introduciendo lo que quieres (post) en la tabla que quieras: Coger lo que viene por post y usarlo en la query.


En línea

bgnumis

Desconectado Desconectado

Mensajes: 155


Ver Perfil
Re: Formulario subtotales
« Respuesta #2 en: 6 Junio 2016, 21:18 pm »

Hola gAb1 lo primero mil gracias.

Estoy intentándo crear un archivo js y que lo lea pero nada...qué horror. Mira de aqui me saqué el código que estaba probando

http://jsfiddle.net/ch510dk3/2/

Se que es hacer trampas pero tú podrías ponerme un ejemplo de como haría rodar eso en un html o php¿?

A ver si me hechas un cable...

En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: Formulario subtotales
« Respuesta #3 en: 6 Junio 2016, 23:15 pm »

Si claro, para eso estamos  ::)

Le he hecho unos arreglos a ese script para que haga lo que quieras o lo que he entendido que querias: http://jsfiddle.net/ch510dk3/17/

Código
  1. function fnAlltotal() {
  2.    var alojamiento_total    = 0,
  3.        desplazamiento_total = 0;
  4.  
  5.    $(".amount-aloj").each(function() {
  6.         alojamiento_total += parseFloat($(this).val()||0);
  7.    });
  8.    $(".amount-desp").each(function() {
  9.         desplazamiento_total += parseFloat($(this).val()||0);
  10.    });
  11.    $(".alojamiento").val(alojamiento_total);
  12.    $(".desplazamiento").val(desplazamiento_total);
  13.    $('.total').val((alojamiento_total + desplazamiento_total).toFixed(2));
  14.  
  15. }

Para mostrar dos deciamales puedes usar .toFixed(2). Y los inputs que quieras que no se pueda escribir (solo leer) puedes ponerle readonly (mejor que disabled).

Para lo de php ya te dije como hacerlo, ademas tienes mil ejemplos en otras preguntas como la tuya. El otro dia puse un ejemplo en el foro de programación web. Mira bien que este tema esta muy visto en el foro (y en todas partes) y para eso está, para buscar lo que necesites y si no lo encuentras entonces se pregunta (no podemos estar repitiendo una y otra vez lo mismo  :-\).
En línea

bgnumis

Desconectado Desconectado

Mensajes: 155


Ver Perfil
Re: Formulario subtotales
« Respuesta #4 en: 7 Junio 2016, 09:48 am »

Mil gracias.

Yo veo que funciona, pero cuando lo pongo todo en el php, un rueda?

Donde está lo que no veo? La idea es poner en el head el código js y luego llamar a la función en el body no?

Código
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Documento sin título</title>
  6.  
  7.  
  8. <script language="javascript" >
  9. function fnAlltotal() {
  10. var alojamiento_total = 0,
  11.       desplazamiento_total = 0;
  12.  
  13.    $(".amount-aloj").each(function(){
  14.         alojamiento_total += parseFloat($(this).val()||0);
  15.    });
  16.    $(".amount-desp").each(function(){
  17.         desplazamiento_total += parseFloat($(this).val()||0);
  18.    });
  19.    $(".alojamiento").val(alojamiento_total);
  20.    $(".desplazamiento").val(desplazamiento_total);
  21.   $('.total').val((alojamiento_total + desplazamiento_total).toFixed(2));
  22.  
  23. }
  24.  
  25. $(".unit").on('keyup', function () {
  26.    var self = $(this),
  27.     qtyVal = self.prev().val();
  28.  
  29.    self.next().val(qtyVal * self.val());
  30.  fnAlltotal();
  31. });
  32.  
  33. $(".qty").on('keyup', function () {
  34.    var self = $(this),
  35.        unitVal = self.next().val();
  36.    self.next().next().val(unitVal * self.val());
  37.   fnAlltotal();
  38. });
  39.  
  40. </script>
  41.  
  42. </head>
  43.  
  44. <body>
  45.  
  46. PAGOS
  47.  
  48.  
  49.  
  50. <br />
  51. <br />
  52.  
  53. <div class="alojamiento-box">
  54.    <div>Quantity:
  55.        <input type="text" class="qty" />Unit price:
  56.        <input type="text" class="unit" />Amount:
  57.        <input type='text' class='amount-aloj' readonly />
  58.    </div>
  59.    <div>Quantity:
  60.        <input type="text" class="qty" />Unit price:
  61.        <input type="text" class="unit" />Amount:
  62.        <input type='text' class='amount-aloj' readonly />
  63.    </div>
  64.    <div>Quantity:
  65.        <input type="text" class="qty" />Unit price:
  66.        <input type="text" class="unit" />Amount:
  67.        <input type='text' class='amount-aloj' readonly />
  68.    </div>Sub Total:
  69.    <input type="text" class="alojamiento" readonly />
  70. </div>
  71. <div class="desplazamiento-box">
  72.    <div>Quantity:
  73.        <input type="text" class="qty" />Unit price:
  74.        <input type="text" class="unit /">Amount:
  75.        <input type='text' class='amount-desp' readonly />
  76.    </div>
  77.    <div>Quantity:
  78.        <input type="text" class="qty" />Unit price:
  79.        <input type="text" class="unit" />Amount:
  80.        <input type='text' class='amount-desp' readonly />
  81.    </div>
  82.    <div>Quantity:
  83.        <input type="text" class="qty" />Unit price:
  84.        <input type="text" class="unit" />Amount:
  85.        <input type='text' class='amount-desp' readonly />
  86.    </div>Sub Total:
  87.    <input type="text" class="desplazamiento" readonly />
  88. </div><br />
  89. Total All: <input type="text" class="total" readonly />
  90.  
  91. <br>
  92. <br>
  93. <br>
  94.  
  95.  
  96. <script languaje="javascript">
  97. fnAlltotal();
  98. </script>
  99.  
  100.  
  101. </body>
  102. </html>
  103.  
  104.  


Esto no me rueda, calcula nada incluso poniendo, en el body:


Código
  1.  
  2. <?php
  3. <script languaje="javascript">
  4. fnAlltotal();
  5. </script>
  6. ?>
  7.  
  8.  

Siento la pregunta tonta, pero no consigo que "actue" el js
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: Formulario subtotales
« Respuesta #5 en: 7 Junio 2016, 21:44 pm »

Si no te funciona es porque no estás usando la libreria jQuery, la incluyo en el ejemplo de abajo. Y seguiria sin funcionar por que se te olvidó poner el script dentro de un document ready. Abajo dejo el código completo y listo para funcionar.

Estamos en 2016! Usa HTML 5!  ;D

Para declarar el tipo de lenguaje es con el atributo type="text/javascript".

Incluyo las nuevas etiquetas HTML 5 para que sea más facil estructurar y organizar mejor el código html:

Código
  1. <!DOCTYPE html>
  2.  
  3.    <head>
  4.  
  5.        <meta http-equiv="Content-Type" content="Text/HTML" charset="UTF-8" />
  6.        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7.  
  8.        <title>Nombre Web</title>
  9.  
  10.        <link type="text/css" rel="stylesheet" media="all" href="css/styles.css" />
  11.  
  12.        <script type="text/javascript" src="//code.jquery.com/jquery-2.2.4.min.js"></script>
  13.        <script type="text/javascript" src="js/scripts.js"></script>
  14.  
  15.        <script type="text/javascript">
  16.            $(function () {
  17.  
  18.                function fnAlltotal() {
  19.                        var alojamiento_total    = 0,
  20.                            desplazamiento_total = 0;
  21.  
  22.                    $('.amount-aloj').each(function () {
  23.                        alojamiento_total += parseFloat($(this).val() || 0);
  24.                    });
  25.                    $('.amount-desp').each(function () {
  26.                        desplazamiento_total += parseFloat($(this).val() || 0);
  27.                    });
  28.                    $('.alojamiento').val(alojamiento_total);
  29.                    $('.desplazamiento').val(desplazamiento_total);
  30.                    $('.total').val((alojamiento_total + desplazamiento_total).toFixed(2));
  31.  
  32.                }
  33.  
  34.                $('.unit').on('keyup', function () {
  35.                    var self = $(this),
  36.                        qtyVal = self.prev().val();
  37.  
  38.                    self.next().val(qtyVal * self.val());
  39.                    fnAlltotal();
  40.                });
  41.  
  42.                $('.qty').on('keyup', function () {
  43.                    var self = $(this),
  44.                        unitVal = self.next().val();
  45.  
  46.                    self.next().next().val(unitVal * self.val());
  47.                    fnAlltotal();
  48.                });
  49.  
  50.            });
  51.        </script>
  52.  
  53.    </head>
  54.  
  55.    <body>
  56.  
  57.        <header>
  58.  
  59.        </header>
  60.  
  61.        <main>
  62.  
  63.            <div id="invoice">
  64.  
  65.                <h3>PAGOS</h3>
  66.  
  67.                <div class="alojamiento-box">
  68.                    <div>Quantity:
  69.                        <input type="text" class="qty" />Unit price:
  70.                        <input type="text" class="unit" />Amount:
  71.                        <input type="text" class="amount-aloj" readonly />
  72.                    </div>
  73.                    <div>Quantity:
  74.                        <input type="text" class="qty" />Unit price:
  75.                        <input type="text" class="unit" />Amount:
  76.                        <input type="text" class="amount-aloj" readonly />
  77.                    </div>
  78.                    <div>Quantity:
  79.                        <input type="text" class="qty" />Unit price:
  80.                        <input type="text" class="unit" />Amount:
  81.                        <input type="text" class="amount-aloj" readonly />
  82.                    </div>Sub Total:
  83.                    <input type="text" class="alojamiento" readonly />
  84.                </div>
  85.  
  86.                <div class="desplazamiento-box">
  87.                    <div>Quantity:
  88.                        <input type="text" class="qty" />Unit price:
  89.                        <input type="text" class="unit /">Amount:
  90.                        <input type="text" class="amount-desp" readonly />
  91.                    </div>
  92.                    <div>Quantity:
  93.                        <input type="text" class="qty" />Unit price:
  94.                        <input type="text" class="unit" />Amount:
  95.                        <input type="text" class="amount-desp" readonly />
  96.                    </div>
  97.                    <div>Quantity:
  98.                        <input type="text" class="qty" />Unit price:
  99.                        <input type="text" class="unit" />Amount:
  100.                        <input type="text" class="amount-desp" readonly />
  101.                    </div>Sub Total:
  102.                    <input type="text" class="desplazamiento" readonly />
  103.                </div><br />
  104.                Total All: <input type="text" class="total" readonly />
  105.  
  106.            </div>
  107.  
  108.        </main>
  109.  
  110.        <footer>
  111.  
  112.        </footer>
  113.  
  114.    </body>
  115.  
  116. </html>

El header es donde pondrías el menu, el banner... main como indica: el contenido principal, y footer lo mismo: el copyright, etc.

También puedes quitar el script del html y ponerlo en un archivo scripts.js y ahí los pones todos juntos. A menos que necesites imprimir algo de php en el script.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines