Puntos indicadores de mil
Tengo un input tipo text el cual mediante una funcio automáticamente me coloca los puntos indicadores de mil a un numero Ej: si dígito 1000 el lo deja 1.000 el problema es cuando intento insertar estos datos a mysql ya que solo reconoce hasta el punto en este caso 1. Trabajo en PHP.
2 respuestas
Respuesta de Kike Rodríguez
1
1
Kike Rodríguez, Siempre aprendiendo, es lo que hay ;)
El problema es sencillo. Supongo que utilizas una función para mostrar en pantalla los números con punto para ser más legibles o más estéticos. Pero claro, la base de datos no acepta ese formato porque el campo es numérico y al introducir el punto en el formulario lo tratas como cadena de texto.
Supongo que el campo es importante que en la base de datos sea numérico, si no es así, cámbialo a cadena de caracteres y solucionado.
Pero si necesitas que el campo sea numérico la forma más sencilla de es modificarlo al asignar la variable. En el campo input tienes una variable llamada por ejemplo "numero":
<input type="text" size="30" name="numero">
Pero a la hora de pasárselo a la base de datos lo haces asignando al campo "$numero" de la base de datos el valor de "numero" del formulario:
$numero = $_REQUEST['numero'];
Lo que debes hacer es cambiar esto y asignarlo así (evidentemente creando una función "Limpiar_puntos()"):
$numero = Limpiar_puntos($_REQUEST['numero']);
El usuario sigue viendo los números con separador de miles pero tu base recibe el número "limpio".
Un saludo,
Kike
PD Te pongo un ejemplo sencillo de como trato yo los formularios antes de insertarlos en una base de datos, es un ejemplo básico que pongo para cursos de PHP. Quizá el orden te parezca extraño (asignar los valores a la base de datos antes de que se haya mostrado siquiera el formulario), pero es muy efectivo.
En pseudocódigo:
1º Asigno valores a los campos de la base de datos con los resultados obtenidos del form. (En este paso es donde tú borras los puntos introducidos en el valor "numero")
2º Error = false
3º Si se ha pulsado enviar {compruebo si hay algún error en los valores introducidos}
4º Si se ha pulsado enviar y no hay error {Muestro pantalla de formulario enviado y meto los campos en la base de datos}
Si no (si hay error o no se ha pulsado enviar) {Muestro el formulario y en caso de que haya algún error lo marco para que el usuario lo corrija}
EN CÓDIGO (si trabajas en localhost con cambiar el nombre de la base de datos y crear los campos verás como funciona):
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<style type="text/css">
.error
{
color:#CC0000
}
</style>
</head>
<body>
<?PHP
// Tomamos los valores introducidos en el formulario
$nombre = $_REQUEST['nombre'];
$genero = $_REQUEST['genero'];
$pais = $_REQUEST['pais'];
$enviar = $_REQUEST['enviar'];
// Creamos una función para crear opciones del formulario y guardar los datos seleccionados poe el usuario
function opcion_seleccionada($pais)
{
switch ($pais)
{
case "España":
print ("<option selected>España<option>Francia<option>Alemania");
break;
case "Francia":
print ("<option>España<option selected>Francia<option>Alemania");
break;
case "Alemania":
print ("<option>España<option>Francia<option selected>Alemania");
break;
default:
print ("<option selected>España<option>Francia<option>Alemania");
break;
}
}
//Crear una funcion para ver los datos de la base
function listar_datos_base($base)
{
$consulta = mysql_query("SELECT * FROM $base");
$nfilas = mysql_num_rows($consulta);
print ("
<h3>Nombre,Genero,Pais</h3>
<br />");
for ($i=0;$i<$nfilas;$i++)
{
$fila = mysql_fetch_array($consulta);
echo ("'{$fila['nombre']}','{$fila['genero']}','{$fila['pais']}'<br />");
}
}
// Comprobamos si hay algún error
$error = false;
if (isset($enviar)) //Si se ha pulsado el botón de Buscar
{
// Texto de búsqueda
if (trim($nombre) == "")
{
$errores["nombre"] = " Debe introducir su nombre";
$error = true;
}
else
$errores["nombre"] = "";
if (!$genero)
{
$errores["genero"] = "Debe seleccionar el género";
$error = true;
}
else
$errores["genero"] = "";
}
// Si los datos son correctos, procesamos formulario e insertamos los datos
if (isset($enviar) && $error==false)
{
print ("<H1>El Formulario se ha enviado correctamente</H1> <br />");
print ("
<p>Estos son los datos introducidos:</p>
");
print ("Nombre y Apellidos: $nombre <br />");
print ("Género: $genero <br />");
print ("Pais: $pais <br />");
//Conectamos a la base de datos
$conexion = mysql_connect ("localhost","root","");
mysql_select_db("curso_php_bases",$conexion);
mysql_query("INSERT INTO datos(nombre,genero,pais) VALUES ('{$_POST['nombre']}','{$_POST['genero']}','{$_POST['pais']}')")
or die ("ERROR. No se han actualizado los datos");
print ("
<p> <a href='3-ejemplo envio a bd.php'>Nuevos datos</a> </p>
");
print ("
<h2>Datos introducidos hasta ahora:</h2>
<br />");
listar_datos_base(datos);
mysql_close($conexion);
}
else
{
?>
<H2>Base de datos</H2>
<form method="post">
<p>Nombre y Apellidos:<input type="text" size="30" name="nombre"
<?PHP
if (isset($enviar))
print ("value='$nombre'>");
else
print (">");
if ($errores["nombre"] != "")
print ("<span class='error'>" . $errores["nombre"] . "</span>");
?>
</p>
<p>Buscar en: <input type="radio" name="genero" value="Hombre"
<?php if ((isset($enviar)) && ($genero =="Hombre")) print "checked"?>>Hombre <!--Guarda el valor-->
<input type="radio" name="genero" value="Mujer"
<?php if ((isset($enviar)) && ($genero =="Mujer")) print "checked"?>>Mujer <!--Guarda el valor-->
<?PHP
if ((isset($enviar)) && ($errores["genero"]!=""))
print ("<span class='error'> No ha seleccionado un género </span>");
?>
</p>
<p>Pais:<select name="pais">
<?PHP opcion_seleccionada($pais);?>
</select>
</p>
<p><input type="submit" name="enviar" value="Enviar">
<input type="reset" name="Borrar" value="Borrar" >
</p>
</FORM>
<?PHP
}
?>
</body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<style type="text/css">
.error{color:#CC0000}
</style>
</head>
<body>
<?PHP
// Tomamos los valores introducidos en el formulario$nombre = $_REQUEST['nombre'];$genero = $_REQUEST['genero'];$pais = $_REQUEST['pais'];$enviar = $_REQUEST['enviar'];// Creamos una funcion para crear opciones del formulario y guardar los datos seleccionados poe el usuario
function opcion_seleccionada($pais){switch ($pais){case "España":print ("<option selected>España<option>Francia<option>Alemania");break;case "Francia":print ("<option>España<option selected>Francia<option>Alemania");break;case "Alemania":print ("<option>España<option>Francia<option selected>Alemania");break;default:print ("<option selected>España<option>Francia<option>Alemania");break;}}
//Crear una funcion para ver los datos de la base
function listar_datos_base($base){$consulta = mysql_query("SELECT * FROM $base");$nfilas = mysql_num_rows($consulta);print ("
<h3>Nombre,Genero,Pais</h3>
<br />");for ($i=0;$i<$nfilas;$i++){$fila = mysql_fetch_array($consulta);echo ("'{$fila['nombre']}','{$fila['genero']}','{$fila['pais']}'<br />");}}
// Comprobamos si hay algún error$error = false;if (isset($enviar)) //Si se ha pulsado el botón de Buscar{// Texto de búsquedaif (trim($nombre) == "") { $errores["nombre"] = " Debe introducir su nombre"; $error = true; } else $errores["nombre"] = "";if (!$genero){ $errores["genero"] = "Debe seleccionar el género"; $error = true; } else $errores["genero"] = ""; }
// Si los datos son correctos, procesamos formulario e insertamos los datos if (isset($enviar) && $error==false) { print ("<H1>El Formulario se ha enviado correctamente</H1> <br />"); print ("
<p>Estos son los datos introducidos:</p>
"); print ("Nombre y Apellidos: $nombre <br />"); print ("Género: $genero <br />"); print ("Pais: $pais <br />");//Conectamos a la base de datos
$conexion = mysql_connect ("localhost","root","");mysql_select_db("curso_php_bases",$conexion);mysql_query("INSERT INTO datos(nombre,genero,pais) VALUES ('{$_POST['nombre']}','{$_POST['genero']}','{$_POST['pais']}')") or die ("ERROR. No se han actualizado los datos"); print ("
<p> <a href='3-ejemplo envio a bd.php'>Nuevos datos</a> </p>
"); print ("
<h2>Datos introducidos hasta ahora:</h2>
<br />"); listar_datos_base(datos);mysql_close($conexion); } else {?>
<H2>Base de datos</H2>
<form method="post">
<p>Nombre y Apellidos:<input type="text" size="30" name="nombre"
<?PHPif (isset($enviar)) print ("value='$nombre'>"); else print (">");if ($errores["nombre"] != "") print ("<span class='error'>" . $errores["nombre"] . "</span>");?></p>
<p>Buscar en: <input type="radio" name="genero" value="Hombre" <?php if ((isset($enviar)) && ($genero =="Hombre")) print "checked"?>>Hombre <!--Guarda el valor--><input type="radio" name="genero" value="Mujer" <?php if ((isset($enviar)) && ($genero =="Mujer")) print "checked"?>>Mujer <!--Guarda el valor-->
<?PHPif ((isset($enviar)) && ($errores["genero"]!=""))print ("<span class='error'> No ha seleccionado un género </span>");?> </p>
<p>Pais:<select name="pais"><?PHP opcion_seleccionada($pais);?></select></p>
<p><input type="submit" name="enviar" value="Enviar"> <input type="reset" name="Borrar" value="Borrar" > </p>
</FORM>
<?PHP }?>
</body>
Supongo que el campo es importante que en la base de datos sea numérico, si no es así, cámbialo a cadena de caracteres y solucionado.
Pero si necesitas que el campo sea numérico la forma más sencilla de es modificarlo al asignar la variable. En el campo input tienes una variable llamada por ejemplo "numero":
<input type="text" size="30" name="numero">
Pero a la hora de pasárselo a la base de datos lo haces asignando al campo "$numero" de la base de datos el valor de "numero" del formulario:
$numero = $_REQUEST['numero'];
Lo que debes hacer es cambiar esto y asignarlo así (evidentemente creando una función "Limpiar_puntos()"):
$numero = Limpiar_puntos($_REQUEST['numero']);
El usuario sigue viendo los números con separador de miles pero tu base recibe el número "limpio".
Un saludo,
Kike
PD Te pongo un ejemplo sencillo de como trato yo los formularios antes de insertarlos en una base de datos, es un ejemplo básico que pongo para cursos de PHP. Quizá el orden te parezca extraño (asignar los valores a la base de datos antes de que se haya mostrado siquiera el formulario), pero es muy efectivo.
En pseudocódigo:
1º Asigno valores a los campos de la base de datos con los resultados obtenidos del form. (En este paso es donde tú borras los puntos introducidos en el valor "numero")
2º Error = false
3º Si se ha pulsado enviar {compruebo si hay algún error en los valores introducidos}
4º Si se ha pulsado enviar y no hay error {Muestro pantalla de formulario enviado y meto los campos en la base de datos}
Si no (si hay error o no se ha pulsado enviar) {Muestro el formulario y en caso de que haya algún error lo marco para que el usuario lo corrija}
EN CÓDIGO (si trabajas en localhost con cambiar el nombre de la base de datos y crear los campos verás como funciona):
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<style type="text/css">
.error
{
color:#CC0000
}
</style>
</head>
<body>
<?PHP
// Tomamos los valores introducidos en el formulario
$nombre = $_REQUEST['nombre'];
$genero = $_REQUEST['genero'];
$pais = $_REQUEST['pais'];
$enviar = $_REQUEST['enviar'];
// Creamos una función para crear opciones del formulario y guardar los datos seleccionados poe el usuario
function opcion_seleccionada($pais)
{
switch ($pais)
{
case "España":
print ("<option selected>España<option>Francia<option>Alemania");
break;
case "Francia":
print ("<option>España<option selected>Francia<option>Alemania");
break;
case "Alemania":
print ("<option>España<option>Francia<option selected>Alemania");
break;
default:
print ("<option selected>España<option>Francia<option>Alemania");
break;
}
}
//Crear una funcion para ver los datos de la base
function listar_datos_base($base)
{
$consulta = mysql_query("SELECT * FROM $base");
$nfilas = mysql_num_rows($consulta);
print ("
<h3>Nombre,Genero,Pais</h3>
<br />");
for ($i=0;$i<$nfilas;$i++)
{
$fila = mysql_fetch_array($consulta);
echo ("'{$fila['nombre']}','{$fila['genero']}','{$fila['pais']}'<br />");
}
}
// Comprobamos si hay algún error
$error = false;
if (isset($enviar)) //Si se ha pulsado el botón de Buscar
{
// Texto de búsqueda
if (trim($nombre) == "")
{
$errores["nombre"] = " Debe introducir su nombre";
$error = true;
}
else
$errores["nombre"] = "";
if (!$genero)
{
$errores["genero"] = "Debe seleccionar el género";
$error = true;
}
else
$errores["genero"] = "";
}
// Si los datos son correctos, procesamos formulario e insertamos los datos
if (isset($enviar) && $error==false)
{
print ("<H1>El Formulario se ha enviado correctamente</H1> <br />");
print ("
<p>Estos son los datos introducidos:</p>
");
print ("Nombre y Apellidos: $nombre <br />");
print ("Género: $genero <br />");
print ("Pais: $pais <br />");
//Conectamos a la base de datos
$conexion = mysql_connect ("localhost","root","");
mysql_select_db("curso_php_bases",$conexion);
mysql_query("INSERT INTO datos(nombre,genero,pais) VALUES ('{$_POST['nombre']}','{$_POST['genero']}','{$_POST['pais']}')")
or die ("ERROR. No se han actualizado los datos");
print ("
<p> <a href='3-ejemplo envio a bd.php'>Nuevos datos</a> </p>
");
print ("
<h2>Datos introducidos hasta ahora:</h2>
<br />");
listar_datos_base(datos);
mysql_close($conexion);
}
else
{
?>
<H2>Base de datos</H2>
<form method="post">
<p>Nombre y Apellidos:<input type="text" size="30" name="nombre"
<?PHP
if (isset($enviar))
print ("value='$nombre'>");
else
print (">");
if ($errores["nombre"] != "")
print ("<span class='error'>" . $errores["nombre"] . "</span>");
?>
</p>
<p>Buscar en: <input type="radio" name="genero" value="Hombre"
<?php if ((isset($enviar)) && ($genero =="Hombre")) print "checked"?>>Hombre <!--Guarda el valor-->
<input type="radio" name="genero" value="Mujer"
<?php if ((isset($enviar)) && ($genero =="Mujer")) print "checked"?>>Mujer <!--Guarda el valor-->
<?PHP
if ((isset($enviar)) && ($errores["genero"]!=""))
print ("<span class='error'> No ha seleccionado un género </span>");
?>
</p>
<p>Pais:<select name="pais">
<?PHP opcion_seleccionada($pais);?>
</select>
</p>
<p><input type="submit" name="enviar" value="Enviar">
<input type="reset" name="Borrar" value="Borrar" >
</p>
</FORM>
<?PHP
}
?>
</body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<style type="text/css">
.error{color:#CC0000}
</style>
</head>
<body>
<?PHP
// Tomamos los valores introducidos en el formulario$nombre = $_REQUEST['nombre'];$genero = $_REQUEST['genero'];$pais = $_REQUEST['pais'];$enviar = $_REQUEST['enviar'];// Creamos una funcion para crear opciones del formulario y guardar los datos seleccionados poe el usuario
function opcion_seleccionada($pais){switch ($pais){case "España":print ("<option selected>España<option>Francia<option>Alemania");break;case "Francia":print ("<option>España<option selected>Francia<option>Alemania");break;case "Alemania":print ("<option>España<option>Francia<option selected>Alemania");break;default:print ("<option selected>España<option>Francia<option>Alemania");break;}}
//Crear una funcion para ver los datos de la base
function listar_datos_base($base){$consulta = mysql_query("SELECT * FROM $base");$nfilas = mysql_num_rows($consulta);print ("
<h3>Nombre,Genero,Pais</h3>
<br />");for ($i=0;$i<$nfilas;$i++){$fila = mysql_fetch_array($consulta);echo ("'{$fila['nombre']}','{$fila['genero']}','{$fila['pais']}'<br />");}}
// Comprobamos si hay algún error$error = false;if (isset($enviar)) //Si se ha pulsado el botón de Buscar{// Texto de búsquedaif (trim($nombre) == "") { $errores["nombre"] = " Debe introducir su nombre"; $error = true; } else $errores["nombre"] = "";if (!$genero){ $errores["genero"] = "Debe seleccionar el género"; $error = true; } else $errores["genero"] = ""; }
// Si los datos son correctos, procesamos formulario e insertamos los datos if (isset($enviar) && $error==false) { print ("<H1>El Formulario se ha enviado correctamente</H1> <br />"); print ("
<p>Estos son los datos introducidos:</p>
"); print ("Nombre y Apellidos: $nombre <br />"); print ("Género: $genero <br />"); print ("Pais: $pais <br />");//Conectamos a la base de datos
$conexion = mysql_connect ("localhost","root","");mysql_select_db("curso_php_bases",$conexion);mysql_query("INSERT INTO datos(nombre,genero,pais) VALUES ('{$_POST['nombre']}','{$_POST['genero']}','{$_POST['pais']}')") or die ("ERROR. No se han actualizado los datos"); print ("
<p> <a href='3-ejemplo envio a bd.php'>Nuevos datos</a> </p>
"); print ("
<h2>Datos introducidos hasta ahora:</h2>
<br />"); listar_datos_base(datos);mysql_close($conexion); } else {?>
<H2>Base de datos</H2>
<form method="post">
<p>Nombre y Apellidos:<input type="text" size="30" name="nombre"
<?PHPif (isset($enviar)) print ("value='$nombre'>"); else print (">");if ($errores["nombre"] != "") print ("<span class='error'>" . $errores["nombre"] . "</span>");?></p>
<p>Buscar en: <input type="radio" name="genero" value="Hombre" <?php if ((isset($enviar)) && ($genero =="Hombre")) print "checked"?>>Hombre <!--Guarda el valor--><input type="radio" name="genero" value="Mujer" <?php if ((isset($enviar)) && ($genero =="Mujer")) print "checked"?>>Mujer <!--Guarda el valor-->
<?PHPif ((isset($enviar)) && ($errores["genero"]!=""))print ("<span class='error'> No ha seleccionado un género </span>");?> </p>
<p>Pais:<select name="pais"><?PHP opcion_seleccionada($pais);?></select></p>
<p><input type="submit" name="enviar" value="Enviar"> <input type="reset" name="Borrar" value="Borrar" > </p>
</FORM>
<?PHP }?>
</body>
Perdona, se ha copiado dos veces, no sé por que, el código solo es hasta el primer
</body>
, a par tir de ahí es lo mismo repetido pero "apiñado".
</body>
, a par tir de ahí es lo mismo repetido pero "apiñado".
- Compartir respuesta
- Anónimo
ahora mismo