Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Suma de valores

Estas en el tema de Suma de valores en el foro de PHP en Foros del Web. Hola, Tengo un panel de contabilidad de entradas vendidas para mis RRPP, donde cada uno introduce cuantas vendio de cada tipo y me actualiza los ...
  #1 (permalink)  
Antiguo 13/01/2014, 19:03
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Pregunta Suma de valores

Hola,

Tengo un panel de contabilidad de entradas vendidas para mis RRPP, donde cada uno introduce cuantas vendio de cada tipo y me actualiza los campos para yo ver cuantas llevan.

En la tabla que tengo me lo muestra por entradas de 6 8 10 12 y vip, y queria añadir otra columna para mostrar el total, simplemente una suma de las anteriores, pero no soy capaz.

Os dejo el codigo a ver si alguien sabe como hacerlo, gracias.

Código:
// Procesar entradas
$id     = MySQLi_Real_Escape_String($dbh, $_SESSION["id_user"]);
$id2    = MySQLi_Real_Escape_String($dbh, $_POST['id']);
$e_e6  = MySQLi_Real_Escape_String($dbh, $_POST['e_6']);
$e_e8  = MySQLi_Real_Escape_String($dbh, $_POST['e_8']);
$e_e10  = MySQLi_Real_Escape_String($dbh, $_POST['e_10']);
$e_e12  = MySQLi_Real_Escape_String($dbh, $_POST['e_12']);
$e_evip  = MySQLi_Real_Escape_String($dbh, $_POST['e_vip']);



if ($id !== $id2) {
	header("Location: manage.php?msg_e=".base64_encode('Error de sincronización. Cierra tu sesión y vuelve a entrar.')); 
	exit;
};

// Actualizar valores
$query = "UPDATE `vendedores` SET `e_6` = '$e_e6', `e_8` = '$e_e8', `e_10` = '$e_e10', `e_12` = '$e_e12', `e_vip` = '$e_evip', `e_total` = '($e_e6 + $e_e8 + $e_e10 + $e_e12 + e_vip)' WHERE `id` = '$id' LIMIT 1;";

$result = MySQLi_Query($dbh, $query) or die(MySQLi_Error($dbh));
Yo habia probado a usar:

`e_total` = '($e_e6 + $e_e8 + $e_e10 + $e_e12 + e_vip)'

e_total ya es creado en la base de datos como campo, el problema es que asi, siempre muestra un 0, tambien he probado sin parentesis y en ese caso muestra el valro de $e_e6
  #2 (permalink)  
Antiguo 13/01/2014, 19:23
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Suma de valores

Podrías sumar los valores en PHP, asignas el resultado a una variable y luego guardas en el e_total, el valor de dicha variable.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 13/01/2014, 20:08
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Suma de valores

Cita:
Iniciado por Alexis88 Ver Mensaje
Podrías sumar los valores en PHP, asignas el resultado a una variable y luego guardas en el e_total, el valor de dicha variable.

Saludos
puedes decirme el codigo, porque creo que tambien habia probado y no me funciono.. gracias.
  #4 (permalink)  
Antiguo 13/01/2014, 20:20
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Suma de valores

Primero sumas:

Código PHP:
Ver original
  1. $suma = $e_e6 + $e_e8 + $e_e10 + $e_e12 + $e_evip;

Y luego actualizas:

Código MySQL:
Ver original
  1. `e_total` = $suma
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 13/01/2014, 20:24
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Suma de valores

Gracias!

Antes lo habia probado y no me iba, alguna errata habre cometido, todo ok!
  #6 (permalink)  
Antiguo 13/01/2014, 20:55
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Suma de valores

Si te fijas en tu query, la última variable que añades no existe:

$e_e6 + $e_e8 + $e_e10 + $e_e12 + e_vip

Por eso es que no obtenías el resultado que esperabas.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 14/01/2014, 06:17
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Suma de valores

¿Y esto estaria bien?

Por que me vuelve a devolver cero en este caso

Código:
$neto = ($e_e6 * 0.9) + ($e_e8 * 0.9) + ($e_e10 * 0.9) + ($e_e12 * 0.9) + ($e_evip * 0.9);
  #8 (permalink)  
Antiguo 14/01/2014, 07:10
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Suma de valores

Cita:
Iniciado por DCienfuegos Ver Mensaje
¿Y esto estaria bien?

Por que me vuelve a devolver cero en este caso

Código:
$neto = ($e_e6 * 0.9) + ($e_e8 * 0.9) + ($e_e10 * 0.9) + ($e_e12 * 0.9) + ($e_evip * 0.9);
Rectifico, si me funciona pero siempre me redondea a enteros por arriba, como hacer que me muestre el resultado en float (con decimales) ??

He probado con

$neto = (float) (($e_e6 * 0.9) + ($e_e8 * 0.9) + ($e_e10 * 0.9) + ($e_e12 * 0.9) + ($e_evip * 0.9));

y nada

Última edición por DCienfuegos; 14/01/2014 a las 07:36
  #9 (permalink)  
Antiguo 14/01/2014, 09:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Suma de valores

Para redondear el número, utilizar la función round() y para darle un formato con decimales (por ejemplo, redondeas 4,5 a 5 y quieres que se vea como 5,00), utiliza la función number_format().

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #10 (permalink)  
Antiguo 14/01/2014, 13:10
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Suma de valores

Cita:
Iniciado por Alexis88 Ver Mensaje
Para redondear el número, utilizar la función round() y para darle un formato con decimales (por ejemplo, redondeas 4,5 a 5 y quieres que se vea como 5,00), utiliza la función number_format().

Saludos

Me podrias poner como quedaria la liena $neto= si no te es mucha molestia? Gracias.
  #11 (permalink)  
Antiguo 14/01/2014, 13:46
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Suma de valores

Puedes hacerlo todo en una sola línea, pero te lo explicaré por parte para que no te enredes:

Código PHP:
Ver original
  1. //La suma
  2. $neto = ($e_e6 * 0.9) + ($e_e8 * 0.9) + ($e_e10 * 0.9) + ($e_e12 * 0.9) + ($e_evip * 0.9);
  3.  
  4. //Redondeas el resultado anterior
  5. $redondeo = round($neto);
  6.  
  7. //Colocas el punto decimal y completas con 2 decimales
  8. $final = number_format($redondeo, 2, ".", ",");

Aplicando esto con datos reales:

Código PHP:
Ver original
  1. //La suma
  2. $neto = 5.03 + 4.82; //9.85
  3.  
  4. //Redondeas el resultado anterior
  5. $redondeo = round($neto); //10
  6.  
  7. //Colocas el punto decimal y completas con 2 decimales
  8. $final = number_format($redondeo, 2, ".", ","); //10.00

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #12 (permalink)  
Antiguo 14/01/2014, 13:55
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Suma de valores

Cita:
Iniciado por Alexis88 Ver Mensaje
Puedes hacerlo todo en una sola línea, pero te lo explicaré por parte para que no te enredes:

Código PHP:
Ver original
  1. //La suma
  2. $neto = ($e_e6 * 0.9) + ($e_e8 * 0.9) + ($e_e10 * 0.9) + ($e_e12 * 0.9) + ($e_evip * 0.9);
  3.  
  4. //Redondeas el resultado anterior
  5. $redondeo = round($neto);
  6.  
  7. //Colocas el punto decimal y completas con 2 decimales
  8. $final = number_format($redondeo, 2, ".", ",");

Aplicando esto con datos reales:

Código PHP:
Ver original
  1. //La suma
  2. $neto = 5.03 + 4.82; //9.85
  3.  
  4. //Redondeas el resultado anterior
  5. $redondeo = round($neto); //10
  6.  
  7. //Colocas el punto decimal y completas con 2 decimales
  8. $final = number_format($redondeo, 2, ".", ","); //10.00

Saludos
Creo que no nos hemos entendido, yo quiero que el resultatdo que me salga sea con decimales pero sin redondear ya que lo que calculo es el dinero neto que gano.

Mi problema es que el valor de $neto si en tu ejemplo es:

$neto = 5.03 + 4.82; //9.85

a mi me daria 10 directamente o 9, no me hace las multiplicaciones y suma con decimales vaya..
  #13 (permalink)  
Antiguo 14/01/2014, 14:34
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Suma de valores

Si haces esto:

Código PHP:
Ver original
  1. $neto = 5.03 + 4.82;
  2. $final = number_format($neto, 2, ".", ",");

Vas a obtener 9.85, como en este ejemplo: http://ideone.com/mUMYXJ

Si quieres guardar el dato en la BD como 9.85 y no como 10, tienes que hacer compatible el tipo de datos que alberga el campo de la tabla con el dato que deseas insertar. Si el tipo es INT, no puedes esperar a que guarde decimales, para eso está el tipo DECIMAL.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #14 (permalink)  
Antiguo 14/01/2014, 15:37
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Suma de valores

Cita:
Iniciado por Alexis88 Ver Mensaje
Si haces esto:

Código PHP:
Ver original
  1. $neto = 5.03 + 4.82;
  2. $final = number_format($neto, 2, ".", ",");

Vas a obtener 9.85, como en este ejemplo: http://ideone.com/mUMYXJ

Si quieres guardar el dato en la BD como 9.85 y no como 10, tienes que hacer compatible el tipo de datos que alberga el campo de la tabla con el dato que deseas insertar. Si el tipo es INT, no puedes esperar a que guarde decimales, para eso está el tipo DECIMAL.

Saludos
Sigue sin funcionar, el campo neto en la db ya esta en decimal y el codigo en php es:

Código:
// Procesar entradas
$id     = MySQLi_Real_Escape_String($dbh, $_SESSION["id_user"]);
$id2    = MySQLi_Real_Escape_String($dbh, $_POST['id']);
$e_e6  = MySQLi_Real_Escape_String($dbh, $_POST['e_6']);
$e_e8  = MySQLi_Real_Escape_String($dbh, $_POST['e_8']);
$e_e10  = MySQLi_Real_Escape_String($dbh, $_POST['e_10']);
$e_e12  = MySQLi_Real_Escape_String($dbh, $_POST['e_12']);
$e_evip  = MySQLi_Real_Escape_String($dbh, $_POST['e_vip']);
$suma = $e_e6 + $e_e8 + $e_e10 + $e_e12 + $e_evip;
$neto = ($e_e6 * 0.9) + ($e_e8 * 0.9) + ($e_e10 * 0.9) + ($e_e12 * 0.9) + ($e_evip * 0.9);
$final = number_format($neto, 2, ".", ",");

if ($id !== $id2) {
	header("Location: manage.php?msg_e=".base64_encode('Error de sincronización. Cierra tu sesión y vuelve a entrar.')); 
	exit;
};

// Actualizar valores
$query = "UPDATE `vendedores` SET `e_6` = '$e_e6', `e_8` = '$e_e8', `e_10` = '$e_e10', `e_12` = '$e_e12', `e_vip` = '$e_evip', 
`e_total` = '$suma' , `e_neto` = '$final'  WHERE `id` = '$id' LIMIT 1;";
  #15 (permalink)  
Antiguo 14/01/2014, 19:13
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Suma de valores

¿Y qué resultado obtienes? ¿Indicaste en el campo de la tabla la cantidad de enteros y decimales?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: mysql, sql, suma, tabla
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 10:03.