Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] suma en php

Estas en el tema de suma en php en el foro de PHP en Foros del Web. Hola a todos: tengo un cuestionario hecho con <form> Código: <form action="7formulario.php" method="post" id="formulario"> <p>Pregunta numero UNO que color de coche te gusta mas</p> <input ...
  #1 (permalink)  
Antiguo 29/11/2013, 05:49
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 4 meses
Puntos: 0
suma en php

Hola a todos:
tengo un cuestionario hecho con <form>
Código:
<form action="7formulario.php" method="post" id="formulario">
    <p>Pregunta numero UNO que color de coche te gusta mas</p>
<input type="checkbox" name="azul" value="azul">Azul<br>
<input type="checkbox" name="rojo" value="rojo">Rojo<br>
<input type="checkbox" name="verde" value="verde">Verde<br>
<input type="checkbox" name="amarillo" value="amarillo">Amarillo<br>
<br>
<p>Pregunta numero DOS que marca de coche te gusta mas</p>
<input type="checkbox" name="seat" value="seat">Seat<br>
<input type="checkbox" name="dacia" value="dacia">Dacia<br>
<input type="checkbox" name="opel" value="opel">Opel<br>
<input type="checkbox" name="jeep" value="jeep">Jeep<br>
<br>
<p>Pregunta numero TRES que ciudad es la mejor</p>
<input type="checkbox" name="madrid" value="madrid">Madrid<br>
<input type="checkbox" name="lugo" value="lugo">Lugo<br>
<input type="checkbox" name="soria" value="soria">Soria<br>
<input type="checkbox" name="jaen" value="jaen">Jaen<br>
<br>
<input name="sub" value="Enviar" type="submit">
<input name="res" value="Limpiar" type="reset">
</form>
En él realizo tres preguntas, y doy la opción de señalar varias opciones por ejemplo:
en la primera que color te gusta mas, puedes elegir un color o los cuatro colores este formulario lo envio a un documento .php donde cada variable tiene un valor numerico 1,2,.... .
En el documento php sumo los valores:
Código:
//Recogida de datos 
$azul = $_POST['azul'];
$rojo = $_POST['rojo'];
$verde = $_POST['verde'];
$amarillo = $_POST['amarillo'];
$seat = $_POST['seat'];
$dacia = $_POST['dacia'];
$opel = $_POST['opel'];
$jeep = $_POST['jeep'];
$madrid = $_POST['madrid'];
$lugo = $_POST['lugo'];
$soria = $_POST['soria'];
$jaen = $_POST['jaen'];
// asignacion de valores a las variables
$azul = 1;
$rojo = 2;
$verde = 0,5;
$amarillo = 6;
$seat = 3;
$dacia = 2;
$opel = 1;
$jeep = 4;
$madrid = 4;
$lugo = 2,7;
$soria = 6;
$jaen = 5;
//Suma de las respuestas
$resultado = $azul+$rojo+$verde+$amarillo+$seat+$dacia+$opel+$jeep+$madrid+$lugo+$soria+$jaen;
El problema que me surge es que me envia todos los valores y me suma todos los valores no discrimino las respuesta no señaladas.


La pregunta es ¿Cómo puedo hacer para que solo me sume las respuestas contestadas y les de valor cero a las no contestadas.?
  #2 (permalink)  
Antiguo 29/11/2013, 05:54
 
Fecha de Ingreso: mayo-2011
Ubicación: Bs.As Argentina
Mensajes: 193
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: suma en php

Yo lo que haría es preguntar con un if y verificar si esta tildado, entonces ahí le asigno la variable y luego verificar si las variables de asignación contienen valor y las agrego a resultado.

Se entiende la idea?.

Saludos
  #3 (permalink)  
Antiguo 29/11/2013, 10:35
 
Fecha de Ingreso: noviembre-2012
Mensajes: 139
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: suma en php

podiras usar funcion de javascript para verificar como dijo martin_9_91

intenta usar la funcion

esta funcion te verifica si esta chekeado tu caja
document.getElementById("checkbox").checked = true;
esta es si no esta chekeada
document.getElementById("checkbox").checked = false;
y le aplicas un if para darle el valor ejemplo:

si verde esta seleccionado le das valor sino 0
tendrias que hacerlo para todos los datos pero es una forma de las que se me ocurre
espero que te sirva de algo

saludos
  #4 (permalink)  
Antiguo 29/11/2013, 15:34
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: suma en php

tambien puede usar esto
Código PHP:
Ver original
  1. $azul = (empty($_POST['azul']) ? 0 : $_POST['azul'];
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #5 (permalink)  
Antiguo 02/12/2013, 10:00
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: suma en php

he hecho algo como esto
Código:
if (document.getElementById("$azul").checked)
{$azul = 1;}
else {$azul = 0;}
Si la variable $azul esta chequeada se le asigna valor 1 si no el valor es cero

Sin embargo no funciona ¿porque?
  #6 (permalink)  
Antiguo 02/12/2013, 10:44
 
Fecha de Ingreso: noviembre-2012
Mensajes: 139
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: suma en php

intentaste probando = true?
Código PHP:
Ver original
  1. if (document.getElementById("$azul").checked == true)
  2. {$azul == 1;}
  3. else {$azul ==0;}
  #7 (permalink)  
Antiguo 02/12/2013, 10:47
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: suma en php

No funciona porque no tienes claro los conceptos de uso del lenguaje que se ejecuta en el servidor ni del lenguaje que se ejecuta en el cliente, php y javascript. Mezclas ambos. Antes de continuar con lo que estás haciendo, es importante que sepas clarísimamente para qué sirve cada uno.
  #8 (permalink)  
Antiguo 02/12/2013, 11:10
 
Fecha de Ingreso: noviembre-2012
Mensajes: 139
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: suma en php

yo pence que lo hacia en etiquetas aparte
haber has esto

Código PHP:
Ver original
  1. //Recogida de datos
  2. $azul = $_POST['azul'];
  3. $rojo = $_POST['rojo'];
  4. $verde = $_POST['verde'];
  5. $amarillo = $_POST['amarillo'];
  6. $seat = $_POST['seat'];
  7. $dacia = $_POST['dacia'];
  8. $opel = $_POST['opel'];
  9. $jeep = $_POST['jeep'];
  10. $madrid = $_POST['madrid'];
  11. $lugo = $_POST['lugo'];
  12. $soria = $_POST['soria'];
  13. $jaen = $_POST['jaen'];
  14. // asignacion de valores a las variables
  15. $azul = 1;
  16. $rojo = 2;
  17. $verde = 0,5;
  18. $amarillo = 6;
  19. $seat = 3;
  20. $dacia = 2;
  21. $opel = 1;
  22. $jeep = 4;
  23. $madrid = 4;
  24. $lugo = 2,7;
  25. $soria = 6;
  26. $jaen = 5;
  27. ?>
  28. <script>
  29. if (document.getElementById("$azul").checked)
  30. {$azul = 1;}
  31. else {$azul = 0;}
  32. </script>
  33. <php?
  34.  
  35. //Suma de las respuestas
  36. $resultado = $azul+$rojo+$verde+$amarillo+$seat+$dacia+$opel+$jeep+$madrid+$lugo+$soria+$jaen;
y si no te resulta intenta hacer el script en la pagina del form manda los datos al script y de alli los rediriges al php con los valores dados
  #9 (permalink)  
Antiguo 02/12/2013, 11:11
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: suma en php

Penzaste mal.
Ya te dije cuál es el problema. Haz algo para solucionarlo, y no es preguntar en el foro. Es posible que alguien te escriba la solución de este caso particular, pero mañana volverás con otra pregunta de la misma naturaleza.

Si te doy un pez, mañana me pedirás otro. Si te enseño a pescar, jamás volverás a pasar hambre.
  #10 (permalink)  
Antiguo 02/12/2013, 11:54
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: suma en php

Cita:
Iniciado por b44 Ver Mensaje
he hecho algo como esto
Código:
if (document.getElementById("$azul").checked)
{$azul = 1;}
else {$azul = 0;}
Si la variable $azul esta chequeada se le asigna valor 1 si no el valor es cero

Sin embargo no funciona ¿porque?
Esto es codigo javascript, que se ejecuta una vez a enviado php una respuesta, asi que es imposible que pudieras usar las variables en tu script.

Lo que debes hacer es procesar las variables que te son enviadas desde tu formulario.
Prueba primero a ver cuales son las variables que se te han enviado a tu script php con un simple
Cita:
print_r($_POST);
Y luego una vez sepas que valores recibes termina de escribir tu script.
  #11 (permalink)  
Antiguo 03/12/2013, 10:46
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: suma en php

Gracias Dalam, empiezo a aclararme un poco:
Envio este formulario en html

Código:

<form action="7formulario.php" method="post" id="formulario">
<!-- <form action="http://xelene.nixiweb.com/php/7formulario.php" method="post" id="formulario"> -->
    <p>Pregunta numero UNO que color de coche te gusta mas</p>
<input type="checkbox" name="azul" value="azul">Azul<br>
<input type="checkbox" name="rojo" value="rojo">Rojo<br>
<input type="checkbox" name="verde" value="verde">Verde<br>
<input type="checkbox" name="amarillo" value="amarillo">Amarillo<br>
<br>
<p>Pregunta numero DOS que marca de coche te gusta mas</p>
<input type="checkbox" name="seat" value="seat">Seat<br>
<input type="checkbox" name="dacia" value="dacia">Dacia<br>
<input type="checkbox" name="opel" value="opel">Opel<br>
<input type="checkbox" name="jeep" value="jeep">Jeep<br>
<br>
<p>Pregunta numero TRES que ciudad es la mejor</p>
<input type="checkbox" name="madrid" value="madrid">Madrid<br>
<input type="checkbox" name="lugo" value="lugo">Lugo<br>
<input type="checkbox" name="soria" value="soria">Soria<br>
<input type="checkbox" name="jaen" value="jaen">Jaen<br>
<br>
<input name="sub" value="Enviar" type="submit">
<input name="res" value="Limpiar" type="reset">
</form>
Con
Código:
print_r($_POST);
veo los valores que envia el formulario y efectivamente envia las casillas marcadas.
Por ejemplo
Array ( [azul] => azul [amarillo] => amarillo [dacia] => dacia [jeep] => jeep [lugo] => lugo [soria] => soria [sub] => Enviar )

Ahora en el documento .php tengo que recoger esas variables, darles su valor y las variables no marcadas darles valor 0.
Aqui las recojo
+
Código:
//Recogida de datos 
$azul = $_POST['azul'];
$rojo = $_POST['rojo'];
$verde = $_POST['verde'];
$amarillo = $_POST['amarillo'];
$seat = $_POST['seat'];
$dacia = $_POST['dacia'];
$opel = $_POST['opel'];
$jeep = $_POST['jeep'];
$madrid = $_POST['madrid'];
$lugo = $_POST['lugo'];
$soria = $_POST['soria'];
$jaen = $_POST['jaen'];
El problema es como les doy valor solo a las enviadas y cero a las no enviadas.
  #12 (permalink)  
Antiguo 03/12/2013, 11:17
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: suma en php

Cita:
Iniciado por xSkArx Ver Mensaje
tambien puede usar esto
Código PHP:
Ver original
  1. $azul = (empty($_POST['azul']) ? 0 : $_POST['azul'];
Asi
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #13 (permalink)  
Antiguo 03/12/2013, 17:07
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: suma en php

Para que aprendas un poquito mas. lo que te dice xSKArx es la solucion pero te aconsejo que mires en el manual de php las instrucciones isset y empty para que sepas como actua cada una y las diferencias entre ellas.
Hazme un poco de caso y leelo hasta que lo comprendas, para como segun diria marlanga que no estes pidiendo siempre. o dicho textualmente

Cita:
Si te doy un pescado mañana me pediras otro, pero si te enseño a pescar, nunca volveras a pasar hambre.

Última edición por Dalam; 03/12/2013 a las 17:28
  #14 (permalink)  
Antiguo 04/12/2013, 03:38
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: suma en php

Parece que he encontrado la solucion

Código:
if (isset($azul))
{$azul = 1;}
if (isset($rojo))
{$rojo = 2;}
if (isset($verde))
{$verde = 3;}
if (isset($amarillo))
{$amarillo = 4;}
if (isset($seat))
{$seat = 1;}
if (isset($dacia))
{$dacia = 2;}
if (isset($opel))
{$opel = 3;}
if (isset($jeep))
{$jeep = 4;}
Si la variable ha sido enviada por el formulario se le asigna el valor 1,2,3 o 4 si no la ha enviado el formulario supongo que esta vacia y por ello no se suma.

He probado y funciona correctamente
  #15 (permalink)  
Antiguo 04/12/2013, 06:38
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: suma en php

Como lo tienes hecho por ti mismo ya te voy a enseñar unas cuantas cosas mas para que las tengas en cuenta en un futuro.

- Cuando se hace referencia a una variable que no esta definida, php devuelve false

Cita:
if($variableNoDefinida){
echo 'la variable esta definida';
}else{
echo 'la variable no esta definida';
}
El codigo anterior escribiria en pantalla la variable no esta definida

- Cuando dentro de un bucle solo se realiza una instruccion, no son necesarios los {}, estos son usados para anidar varias sentencias, con lo que el codigo anterior podria ponerse de la siguiente forma.

Cita:
if($variableNoDefinida) echo 'la variable esta definida';
else echo 'la variable no esta definida';
haciendo asi el codigo mas corto y bonito.
Si lo que quisieramos fuera solo mirar si no existe podriamos poner dentro del if la negacion
de esta forma

Cita:
if(!$variableNoDefinida) echo 'La variable no esta definida';
Sabiendo esto y para hacer mas corto tu codigo, que en este momento seria una cosa asi

Cita:
if (isset($azul))
{$azul = 1;}
if (isset($rojo))
{$rojo = 2;}
if (isset($verde))
{$verde = 3;}
if (isset($amarillo))
{$amarillo = 4;}
if (isset($seat))
{$seat = 1;}
if (isset($dacia))
{$dacia = 2;}
if (isset($opel))
{$opel = 3;}
if (isset($jeep))
{$jeep = 4;}
podriamos dejarlo en esto

Cita:
if($_POST['azul']) $azul = 1;
if($_POST['rojo']) $rojo = 2;
if($_POST['verde']) $verde = 3;
if($_POST['amarillo']) $amarillo = 4;
if($_POST['seat']) $seat = 1;
if($_POST['dacia']) $dacia = 2;
if($_POST['opel']) $opel = 3;
if($_POST['jeep']) $jeep = 4;
Con el codigo de esta forma sera mas facil de entender y tambien menos costoso de procesar por el nucleo de php.

Si tienes alguna duda mas preguntanos que con la actitud que tienes para querer aprender, nadie te negara ayuda.
Un saludo
  #16 (permalink)  
Antiguo 04/12/2013, 06:43
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: suma en php

Las variables no definidas se comprueban con ISSET(). Lo que haces, igual que con javascript, es muy peligroso porque los falsy values también dan FALSE en las comparaciones, como el cero, un booleano a FALSE, un null, etc.

Por otro lado, si esperas que la variable que lelga por POST es un número, lo mejor es
$variable=(int)$_POST["valor"];

Si la variaable es un número, lo convertirá a integer y lo asignará a $variable.
Si no llega nada, o lo que llega no es un número, mete un cero.

Última edición por marlanga; 04/12/2013 a las 06:50
  #17 (permalink)  
Antiguo 04/12/2013, 06:51
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: suma en php

Es mejor que uses empty() ya que si devuelve false no entrara en el if, y ocupa el ejemplo que te di yo
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #18 (permalink)  
Antiguo 04/12/2013, 07:35
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: suma en php

Tal y como tiene creado el formulario podria usar tanto empty como isset

empty dara considerara como vacia cual quier variable

"" (una cadena vacía)
0 (0 como un integer)
0.0 (0 como un float)
"0" (0 como un string)
NULL
FALSE
array() (un array vacío)
$var; (una variable declarada, pero sin un valor)

b44 lo que si que podrias hacer seria enviar ya los datos desde el formulario asignando como value los datos que quieres insertar.
Código HTML:
Ver original
  1. <input type="checkbox" name="azul" value="1">Azul<br>
  2. <input type="checkbox" name="rojo" value="2">Rojo<br>
  3. <input type="checkbox" name="verde" value="3">Verde<br>
  4. <input type="checkbox" name="amarillo" value="4">Amarillo<br>
  5. <br>
  6. <p>Pregunta numero DOS que marca de coche te gusta mas</p>
  7. <input type="checkbox" name="seat" value="1">Seat<br>
  8. <input type="checkbox" name="dacia" value="2">Dacia<br>
  9. <input type="checkbox" name="opel" value="3">Opel<br>
  10. <input type="checkbox" name="jeep" value="4">Jeep<br>
En este caso seria mejor que hicieses una mezcla entre lo que te han dicho tanto marlanga como xSKArx

Código PHP:
Ver original
  1. $azul = empty($_POST['azul']) ? 0 : (int)$_POST['azul'];
  2. $rojo  = empty($_POST['rojo']) ? 0 : (int)$_POST['rojo'];
  3. $verde = empty($_POST['verde']) ? 0 : (int)$_POST['verde'];
  4. $amarillo = empty($_POST['amarillo']) ? 0 : (int)$_POST['amarillo'];
  5. $seat  = empty($_POST['seat']) ? 0 : (int)$_POST['seat'];
  6. $dacia = empty($_POST['dacia']) ? 0 : (int)$_POST['dacia'];
  7. $opel = empty($_POST['opel']) ? 0 : (int)$_POST['opel'];
  8. $jeep = empty($_POST['jeep']) ? 0 : (int)$_POST['jeep'];
Al principio de este post pusiste que querias usar $verde = '0,5' en tal caso deberias cambiar el int por float y en el formulario el value cambiarlo por 0.5, aunque seria mejor que utilizaras integros en vez de numeros de coma flotante

Última edición por Dalam; 04/12/2013 a las 08:17

Etiquetas: formulario, suma, variable
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 11:33.