Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] calcular notas definitivas provenientes de una consulta en tiempo real

Estas en el tema de calcular notas definitivas provenientes de una consulta en tiempo real en el foro de PHP en Foros del Web. Cordial saludo Estoy creando una aplicación para registro de notas, los datos de los estudiantes vienen de una consulta, de acuerdo a la cantidad de ...
  #1 (permalink)  
Antiguo 28/11/2015, 11:16
 
Fecha de Ingreso: agosto-2014
Ubicación: barranquilla
Mensajes: 93
Antigüedad: 10 años, 3 meses
Puntos: 0
calcular notas definitivas provenientes de una consulta en tiempo real

Cordial saludo

Estoy creando una aplicación para registro de notas, los datos de los estudiantes vienen de una consulta, de acuerdo a la cantidad de estudiante se genera la lista con la cantidad de fila, cada fila necesita capturar tres notas las cuales se le calcula la definitiva, tengo un script que me hace el calculo como quiero pero solo funciona en la primera fila de la lista al pasar a la siguiente fila no hace los calculo.

alguien quien me pueda ayudar. coloco el código para que sea analizado.

Código HTML:
<script language="javascript">
function calcular(){
    n1 = document.getElementById("n1").value;
   n2 = document.getElementById("n2").value;
   n3= document.getElementById("n3").value;
   r= (parseInt(n1)*0.30)+(parseInt(n2)*0.30)+(parseInt(n3)*0.40);
  document.getElementById("resultado").value = r.toFixed(1);

}
 </script> 
Código PHP:
 <?php
             $n
=1;
             while(
$fila=mysql_fetch_array($sql)){
                
                 
?>
                 <td><input type="text" id="n" value="<?php echo $n?>"></td>
                 <td><?php echo '<strong>'.$fila['apellidos']. '   ' .$fila['nombres'].'</strong>'?></td>
            
                 <td> <input type="number"  name="inas" size="1" maxlength="2" style="width:50px" value="0" step="1" max="8" min="1" ></td>
                 <td> <input type="number"  id="n1"    style="width:50px" value="0"  max="5" min="1" autofocus onChange="calcular();"></td>
                 <td> <input type="number"  id="n2"   style="width:50px" value="0"   max="5" min="1" onChange="calcular();"></td>
                 <td> <input type="number"  id="n3"   style="width:50px" value="0"   max="5" min="1" onChange="calcular();"></td>
                 <td> <input type="number"  id="resultado"   style="width:50px" value="0" step="0.1" max="5" min="1"></td>
                 <td> </td>
                 <td></td>
                 <tr></tr>
               <?php
                $n
++;
             }                                        
        
?>
  #2 (permalink)  
Antiguo 28/11/2015, 12:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: calcular notas definitivas provenientes de una consulta en tiempo real

Pues tu problema es de Javacript/HTML básicamente: repites el mismo ID en cada vuelta del loop y eso no es válido, porque precisamente los ID deben ser identificadores únicos.

Igualmente tu función calcular() está "amarrada" a los mismos IDs siempre, lo cual no funcionará para el resto de los elementos que tienes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/11/2015, 13:24
 
Fecha de Ingreso: agosto-2014
Ubicación: barranquilla
Mensajes: 93
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: calcular notas definitivas provenientes de una consulta en tiempo real

Hola pateketrueke

Gracias por tu respuesta, si la verdad la solución puede ser usando un vector, pero tengo algunas limitaciones con javascript, me podrías dar una maco con algún ejemplo para iniciar

Te lo agradezco
  #4 (permalink)  
Antiguo 28/11/2015, 13:49
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 4 meses
Puntos: 263
Respuesta: calcular notas definitivas provenientes de una consulta en tiempo real

mano podrias probar enviando una id que identifique a los elementos de tu lista, por ejemplo

Código Javascript:
Ver original
  1. function calcular(X){
  2.     n1 = document.getElementById(X).value;
  3.    n2 = document.getElementById("A"+X).value;
  4.    n3= document.getElementById("B"+X).value;
  5.    r1= (parseInt(n1)*0.30)+(parseInt(n2)*0.30)+(parseInt(n3)*0.40);
  6.    document.getElementById("resultado"+X).value = r1;
  7.  
  8. }
Código HTML:
Ver original
  1. <input type="text" id="A1" value="" placeholder="0"/>
  2. <input type="text" id="B1" value="" placeholder="0"/>
  3. <input type="text" id="1" value="" placeholder="0" onChange="javascript:calcular(this.id);"/>
  4. <input type="text" id="resultado1" value="" readonly/>
  5.  
  6. <br><br>
  7. <input type="text" id="A2" value="" placeholder="0"/>
  8. <input type="text" id="B2" value="" placeholder="0"/>
  9. <input type="text" id="2" value="" onChange="javascript:calcular(this.id);"/>
  10. <input type="text" id="resultado2" value="" readonly/>
  11.  
  12. <br><br>
  13. <input type="text" id="A3" value="" placeholder="0"/>
  14. <input type="text" id="B3" value="" placeholder="0"/>
  15. <input type="text" id="3" value="" onChange="javascript:calcular(this.id);"/>
  16. <input type="text" id="resultado3" value="" readonly/>

alli le estoy pasando la id del ultimo campor que es el que va a activar el calculo y las id de los otros campos la copleto con la del ultimo, asi el js diferencia cada linea

Muestra: http://jsfiddle.net/6e7s4mxf/
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 28/11/2015, 13:54
 
Fecha de Ingreso: agosto-2014
Ubicación: barranquilla
Mensajes: 93
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: calcular notas definitivas provenientes de una consulta en tiempo real

xfxstudios Gracias por tu respuesta se ve excelente, pero mi lista viene de php como hago para pasar el ID de cada fila a la funcion de JAVASCRIPT
  #6 (permalink)  
Antiguo 28/11/2015, 13:58
 
Fecha de Ingreso: octubre-2015
Ubicación: España
Mensajes: 21
Antigüedad: 9 años, 1 mes
Puntos: 6
Respuesta: calcular notas definitivas provenientes de una consulta en tiempo real

Pues al igual que lo haces en el código php que pasaste:
Código PHP:
 <?php 
             $n
=1
             while(
$fila=mysql_fetch_array($sql)){ 
                 
                 
?> 
                 <td><input type="text" id="n" value="<?php echo $n?>"></td> 
                 <td><?php echo '<strong>'.$fila['apellidos']. '   ' .$fila['nombres'].'</strong>'?></td> 
             
                 <td> <input type="number"  name="inas" size="1" maxlength="2" style="width:50px" value="0" step="1" max="8" min="1" ></td> 
                 <td> <input type="number"  id="A<?php echo $n?>"    style="width:50px" value="0"  max="5" min="1" autofocus></td> 
                 <td> <input type="number"  id="B<?php echo $n?>"   style="width:50px" value="0"   max="5" min="1"></td> 
                 <td> <input type="number"  id="<?php echo $n?>"   style="width:50px" value="0"   max="5" min="1" onChange="calcular(this.id);"></td> 
                 <td> <input type="number"  id="resultado<?php echo $n?>"   style="width:50px" value="0" step="0.1" max="5" min="1"></td> 
                 <td> </td> 
                 <td></td> 
                 <tr></tr> 
               <?php 
                $n
++; 
             }                                         
        
?>
  #7 (permalink)  
Antiguo 28/11/2015, 14:00
 
Fecha de Ingreso: agosto-2014
Ubicación: barranquilla
Mensajes: 93
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: calcular notas definitivas provenientes de una consulta en tiempo real

ok, hermano gracias lo probare y te comentare si me funciono, un abarzo
  #8 (permalink)  
Antiguo 28/11/2015, 14:02
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 4 meses
Puntos: 263
Respuesta: calcular notas definitivas provenientes de una consulta en tiempo real

segun veo inicias un copntador con el while, podrias utilizarlo para personalizar las id asi:

Código PHP:
Ver original
  1. <td> <input type="number"  id="n<?php echo $n; ?>"   style="width:50px" value="0"   max="5" min="1"></td>

y la que va a ejecutar el calculo asi:

Código PHP:
Ver original
  1. <td> <input type="number"  id="<?php echo $n; ?>"   style="width:50px" value="0"   max="5" min="1" onChange="calcular(this.id);"></td>

si visualizar el codigo ya generado, deveria de verse asi:

Código HTML:
Ver original
  1. <td> <input type="number"  id="n1"   style="width:50px" value="0"   max="5" min="1"></td>
  2. <td> <input type="number"  id="1"   style="width:50px" value="0"   max="5" min="1" onChange="calcular(this.id);"></td>

y asi suscesivamente
__________________
[email protected]
HITCEL
  #9 (permalink)  
Antiguo 28/11/2015, 22:09
 
Fecha de Ingreso: agosto-2014
Ubicación: barranquilla
Mensajes: 93
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: calcular notas definitivas provenientes de una consulta en tiempo real

fbadiola, xfxstudios

Gracias por su ayuda me funciono de maravilla, gracias si me calcula la nota definitiva de varias filas. ahora tengo un detalle que solo calcula la definitiva al hacer los cambios en la tercera nota, quisiera que se actualice la nota definitiva al cambiar cualquiera de las tres notas.

Gracias, espero una mano...!
  #10 (permalink)  
Antiguo 29/11/2015, 09:24
 
Fecha de Ingreso: agosto-2014
Ubicación: barranquilla
Mensajes: 93
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: calcular notas definitivas provenientes de una consulta en tiempo real

Gracias amigo ya lo resolvi su ayuda me dio una buena base, aqui coloco el codigo para alguien que tenga el mismo problema

funcion javascript
Código HTML:
Ver original
  1. <script language="javascript">
  2. function calcular(x){
  3.    n1 = document.getElementById("a"+x).value;
  4.    n2 = document.getElementById("b"+x).value;
  5.    n3= document.getElementById("c"+x).value;
  6.    r1= (parseFloat(n1)*0.30)+(parseFloat(n2)*0.30)+(parseFloat(n3)*0.40);
  7.    document.getElementById("def"+x).value = r1.toFixed(1);  
  8.  
  9. }
  10.  </script>
Codigo PHP
Código PHP:
Ver original
  1. while($fila=mysql_fetch_array($sqlest)){
  2.                
  3.                  ?>
  4.                  <td><?php echo $n; ?></td>
  5.                  <td><?php echo '<strong>'.$fila['apellidos']. '   ' .$fila['nombres'].'</strong>'; ?></td>
  6.                  <td> <input type="number" name="inas" size="1" maxlength="2" style="width:50px"  step="1" max="8" min="1" value="<?php echo $fila['inasistencias'] ?>"></td>
  7.                  <td> <input type="number" name="con" id="a<?php echo $n ?>"            style="width:50px"   max="5" step="0.1" min="1" autofocus value="<?php echo $fila['conocimiento'] ?>" onChange="calcular(<?php echo $n ?>);"></td>
  8.                  <td> <input type="number" name="des" id="b<?php echo $n ?>"            style="width:50px"    max="5" min="1" step="0.1" value="<?php echo $fila['desempeno'] ?>" onChange="calcular(<?php echo $n ?>);" ></td>
  9.                  <td> <input type="number" name="pro" id="c<?php echo $n ?>"             style="width:50px"     max="5" min="1" step="0.1" value="<?php echo $fila['producto'] ?>" onChange="calcular(<?php echo $n ?>);"></td>
  10.                  <td> <input type="text"  name="def" id="def<?php echo $n ?>"           style="width:50px" step="0.1"   max="5" min="1" value="<?php echo $fila['definitiva'] ?>" readonly ></td>
  11.                  <td> </td>
  12.                  <tr></tr>
  13.                <?php
  14.                 $n++;
  15.              }

Si alguien de los colaboradores me responde si es una buena solucion

Etiquetas: calcular, notas, real, registro, sql, tiempo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:58.