Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Como escribir en una base de datos a través de un input números con decimales

Estas en el tema de Como escribir en una base de datos a través de un input números con decimales en el foro de PHP en Foros del Web. Buenas Tardes, Ando aprendiendo un poco de programación con PHP y quisiera saber como tengo que configurar el input para que en la base de ...
  #1 (permalink)  
Antiguo 22/06/2015, 16:45
 
Fecha de Ingreso: junio-2015
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Como escribir en una base de datos a través de un input números con decimales

Buenas Tardes, Ando aprendiendo un poco de programación con PHP y quisiera saber como tengo que configurar el input para que en la base de datos se realice el "Update" con los números en decimales. Para los decimales utilice la siguiente funcion.

HTML:

<input class="number32" name="ammount" id="ammount" />

<script>

$('input.number32').keyup(function(event) {

// skip for arrow keys
if(event.which >= 37 && event.which <= 40){
event.preventDefault();
}

$(this).val(function(index, value) {
value = value.replace(/,/g,'');
return numberWithCommas(value);
});
});

function numberWithCommas(x) {
var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join(".");
}

</script>

y en la parte de PHP utilice esto.


mysql_query("UPDATE tabla1 set ammount='$_POST[ammount]'");



Pero, por alguna extraña razon (Desconozco) solo me los digitos a la izquierda antes de la primera coma, es decir, si inserto 402,350 solo me toma 402.
Muchas gracias. Espero su ayuda.
  #2 (permalink)  
Antiguo 22/06/2015, 17:19
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años
Puntos: 10
Respuesta: Como escribir en una base de datos a través de un input números con decima

He cambiado tu funcion de la siguente manera y si funciona:
Código Javascript:
Ver original
  1. function numberWithCommas(x) {
  2. var parts = x.toString().split(".");
  3. //aqui era el problema
  4. //parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  5. return parts.join(",");
  6. }

¿Ahora lo que no entiendo es porque quieres cambiar el punto ( que los lenguajes de programacion entienden como coma europea ) por una coma? Tu sabras :) ... ( porque es esto lo que hace esta funcion )

Cita:
por alguna extraña razon (Desconozco) solo me los digitos a la izquierda
Je je ... me suena a mi que la razon es el copiar y pegar :))))))

Última edición por matake; 22/06/2015 a las 17:39
  #3 (permalink)  
Antiguo 22/06/2015, 17:47
 
Fecha de Ingreso: junio-2015
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Como escribir en una base de datos a través de un input números con decima

Muchas gracias pero... Ese código no me funciono y la razón por la que quiero ese formato es porque lo necesito así :((((....
Nota: No soy muy experto en javascript y medio lo entendi, copie y pegue. jajajajaja ya que es un detalle que me falta para un trabajo que tengo que entregar para ayer :/
  #4 (permalink)  
Antiguo 22/06/2015, 17:55
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años
Puntos: 10
Respuesta: Como escribir en una base de datos a través de un input números con decima

voy a mirar un poco mas

Última edición por matake; 22/06/2015 a las 18:12
  #5 (permalink)  
Antiguo 22/06/2015, 18:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como escribir en una base de datos a través de un input números con decima

No confundas representar los decimales en pantalla con coma, con ell formato de lo datos para almacenar en la base.
Las bases de datos trabajan con el punto decimal, a coma no existe en ese contexto. Eso quiere decir que cuando creas el INSERT o UPDATE, debes poner el decimal con punto. Que luego lo representes en pantalla con coma, es un tema de programación, no de la base.
Por otro lado, ten en cuenta que en la base el tipo de columna para decimales es DECIMAL, FLOAT, REAL u otros, dependiendo de la base de datos usada.
En tu caso es posible que esa columna este declarada como INT, lo que quiere decir ENTERO, tipo de dato que no almacena decimales.

Por cierto, ni se te ocurra usar un VARCHAR. Eso sí sería una metida de pata mayúscula.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 22/06/2015 a las 20:14
  #6 (permalink)  
Antiguo 22/06/2015, 18:54
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años
Puntos: 10
Respuesta: Como escribir en una base de datos a través de un input números con decima

Buenooo ... he mirado un poco mas y he constatado que me equivoque yo .... ja ja ... lo que me paso a mi es al reves o sea "por alguna razon extraña" a mi al copiar y pegar tu funcion me salio una coma y tu tenias un punto.

Sin embargo encontre otro error en la linea:
Código Javascript:
Ver original
  1. value = value.replace(/,/g,'.'); //en tu codigo faltaba el punto entre las comillas y es aqui que cambia la coma cuando tu escribes en el formulario por el punto lo que seria correcto

O sea ahora he comprobado y tu codigo html tal como lo tenias con el unico error que te he dicho ahora si te devuelve un numero no una cadena aunque lo escribes con coma ,

Esto si hay que tener en cuenta como te ha dicho gnzsoloyo mas arriba lo de la base de datos.

¿Con esto te funciona?

Última edición por matake; 22/06/2015 a las 19:21
  #7 (permalink)  
Antiguo 22/06/2015, 20:44
 
Fecha de Ingreso: junio-2015
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Como escribir en una base de datos a través de un input números con decima

Muchas gracias por su atención, pero les comento lo que quiero lograr hacer, yo tengo un "saldofinal" y tengo un "monto", ese monto al insertarlo a través de un "input" necesito que tenga formato con comas, es decir, si escribo 12345, me mostrara en el formulario 12,345.00 , es decir, que me separe los decimales con un punto. Que hice yo:

Acepto que copie y pegue el codigo javascript: para que el formato me saliera en el formulario como yo queria que se mostrara en el formulario. Luego reste ese monto insertado con el "saldofinal" utilizando esta parte del codigo:

mysql_query("UPDATE transfers set saldofin = saldofin- (ammount)");

Pero a la hora de hacerme la resta no me sale el resultado correcto, leyendo lo de gnzsoloyo, tengo un "Arroz con mango" declarando las variables, Tengo como ammount "VARCHAR" y como saldofin "INT" quisiera que me ayudaran y me aconsejaran a ver como resuelvo esta locura que logre por no empaparme mas en el tema jajaja...
  #8 (permalink)  
Antiguo 22/06/2015, 22:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como escribir en una base de datos a través de un input números con decima

Por lo pronto, para usar datos monetarios en MySQL, el manual de referencia dice que se deben usar columnas de tipo DECIMAL y no FLOAT. Usualmente serían DECIMAL (20,8) para trabajar con buena precisión.
Por otro lado, que lo representes como 123,456.78 en pantalla es total y absolutamente irrelevante para la base, porque la base debe recibir sol 123456.78, no los separadores de miles, porque los campos de tipo numérico no los pueden almacenar ni tampoco necesitan almacenarlos. Son tema visual, no parte del dato.
Luego, al consultar el dato le indicas a MySQL que entregue el dato formateado y listo.
Ahora bien, de acuerdo a lo que dices, tienes datos corruptos en las tablas y tendrás que revisar el esquema para corregir errores.
Te sugiero ver ese tema en el subforo de MySQL para verlo mejor.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 23/06/2015, 15:05
 
Fecha de Ingreso: junio-2015
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Como escribir en una base de datos a través de un input números con decima

No, creo que no me esta entendiendo, en el "input" en la parte del formulario me tiene que aparecer ese formato, y en la base de datos solo me toma los numeros a la izquierda de la coma.
  #10 (permalink)  
Antiguo 23/06/2015, 15:25
 
Fecha de Ingreso: junio-2015
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Como escribir en una base de datos a través de un input números con decima

La unica manera que me restara, fue de la siguiente manera.

mysql_query("UPDATE transfers set saldofin = saldofin- (1000*ammount)");

pero repito, solo me toma antes de la coma, ya que despues de la coma no me toma los valores.

Por ejemplo tengo de saldo fin 10,000.00 y le voy a restar 4,500. El resultado me da 6,000.00

Y si, necesito ese formato estadounidense!.

Pero si tengo 10,000.00 y le resto 4.500 si me arroja: 5,500.00 , entonces no se como hacer que me reconozca las comas. :(((( Ayuda porfavor

Última edición por Jotan32; 23/06/2015 a las 15:30
  #11 (permalink)  
Antiguo 23/06/2015, 16:17
 
Fecha de Ingreso: junio-2015
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Como escribir en una base de datos a través de un input números con decima

En si necesito es un codigo, que me cambie del formato del input "0,000.00" al formato "0.000,00" para que la resta en php me arroje un resultado correcto.
  #12 (permalink)  
Antiguo 23/06/2015, 16:59
 
Fecha de Ingreso: junio-2015
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Como escribir en una base de datos a través de un input números con decima

Tengo que entregar este trabajoo :((((((((
  #13 (permalink)  
Antiguo 23/06/2015, 17:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como escribir en una base de datos a través de un input números con decima

Mira, si estas usando los números de esa forma es imposible que la suma te de bien, porque PHP tampoco maneja internamente los separadores de millares. los valores numéricos decimales se manejan como números de punto flotante.
Tienes un serio problema de confusión acerca de cómo se manipulan magnitudes en programación.
Por favor, acude al manual antes de seguir.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 23/06/2015, 19:34
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años
Puntos: 10
Respuesta: Como escribir en una base de datos a través de un input números con decima

Para ayudarte un poco mas ( ya que yo tampoco sabia ) ... he escuchado el consejo de gnzsoloyo y he mirado en el manual.

Espero que te pueda servir este ejemplo del manual:

Código PHP:
Ver original
  1. $number = 1234.56;
  2.  
  3. // muestra el formato internacional para la configuración regional en_US
  4. setlocale(LC_MONETARY, 'en_US');
  5. echo money_format('%i', $number) . "\n";
  6. // USD 1,234.56

Es solo un ejemplo de : http://php.net/manual/es/function.money-format.php

y una alternativa para windows ( ya que en el manual dice que no funciona en windows ) seria esto:
http://stackoverflow.com/questions/6...ndows-platform

Hay que tener en cuenta que en la base de datos tienes que tener formato DECIMAL o FLOAT

si sigues teniendo VARCHAR .. ( lo que no se aconseja ) ... intenta usar esta funcion para transformar los strings en numeros para poder hacer calculos

http://php.net/manual/es/function.floatval.php

Última edición por matake; 23/06/2015 a las 19:46
  #15 (permalink)  
Antiguo 24/06/2015, 00:44
 
Fecha de Ingreso: junio-2015
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Como escribir en una base de datos a través de un input números con decima

Bueno despues de leerme el manual, y seguir los consejos de ustedes, lo logre finalmente!.

Código PHP:
<?php
 
include("conex.php");
 
mysql_query("UPDATE tabla1 set ammount='$_POST[ammount]'");
 
$ammount=$_POST['ammount'];
 
$caracteres = Array(","); 
$resultado str_replace($caracteres,"",$ammount); 
 
mysql_query("UPDATE tabla1 set saldofin = saldofin- ($resultado)");
 echo 
header("location:../recibo.php");
?>

Asi logre quitarle la coma, al numero introducido a través del "input" y lo pude restar. Muchisimas gracias!

Etiquetas: html, input, mysql, 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 21:02.