Foros del Web » Programando para Internet » PHP »

Evitar ingreso de campo vacio en bd

Estas en el tema de Evitar ingreso de campo vacio en bd en el foro de PHP en Foros del Web. Hola! Escribo este tema porque durante estos dias estuve trabajando en un formulario PHP que inserte datos dentro de una tabla MySQL y no logro ...
  #1 (permalink)  
Antiguo 13/02/2009, 00:19
dot
 
Fecha de Ingreso: julio-2008
Mensajes: 5
Antigüedad: 15 años, 9 meses
Puntos: 0
Evitar ingreso de campo vacio en bd

Hola! Escribo este tema porque durante estos dias estuve trabajando en un formulario PHP que inserte datos dentro de una tabla MySQL y no logro deshacerme de un problema.

El formulario funciona correctamente e ingresa los datos en la tabla, pero el problema es cuando algun campo queda vacio (en ese caso ingresa un campo en blanco en la base de datos). El código que estoy usando es este:

Código PHP:
<?php
// Conexión a MySQL.
$host 'localhost';
$user 'usuario';
$pass 'pass';
$dbname 'basededatos';
mysql_connect($host,$user,$pass) or die("No se pudo establecer la conexión.".mysql_error());
mysql_select_db($dbname) or die("No se puede acceder a la base de datos.".mysql_error());

// Insertar en tabla.
mysql_query("INSERT INTO datos VALUES('$_POST[datos]'),('$_POST[datosa]'),('$_POST[datosb]'),('$_POST[datosc]')"
or die(
mysql_error());

echo 
"Datos insertados!";

?>
El formulario tiene cuatro campos:

Código PHP:
<input type="text" name="datos" size="60">
<
input type="text" name="datosa" size="60">
<
input type="text" name="datosb" size="60">
<
input type="text" name="datosc" size="60"
Lo que me gustaría es que cuando se ingresan datos en los campos del formulario los mismos se inserten en la base de datos independientemente de si uno esta vacio o no (es decir, si se completan el campo datosa y datosb que se carguela informacion y los espacios en blanco de datos y datosc no).

Otro problema que tengo es que los datos se duplican, es decir, si ingreso el mismo dato la tabla lo vuelve a cargar y no lo rechaza.

Estuve leyendo temas en el foro y la verdad no pude solucionarlo, por eso posteo este nuevo. Desde ya muchas gracias...
  #2 (permalink)  
Antiguo 13/02/2009, 01:49
Avatar de sanchy  
Fecha de Ingreso: octubre-2008
Mensajes: 389
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Evitar ingreso de campo vacio en bd

para lo primero creo que necesitas tocar la base de datos. y ponerle el atributo 'null' a las filas

y lo segundo es tema de IFs... agarras todos los datos de la base, los recorres y los vas comparando con el dato nuevo, si alguno coincide, haces q salga del loop. y si no coincide, que lo inserte
  #3 (permalink)  
Antiguo 13/02/2009, 11:52
dot
 
Fecha de Ingreso: julio-2008
Mensajes: 5
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Evitar ingreso de campo vacio en bd

Las filas de la base de datos tienen activo el atributo null... pero al existir algun campo vacio en el formulario se ingresa un campo con valor "NULL" en la base de datos y en realidad lo que busco es que al estar vacio un campo se lo omita y no se agregue ningun contenido excepto el de aquellos campos con datos...

Y de lo segundo la verdad no entendi como hacerlo... Gracias por tu respuesta :)

Última edición por dot; 13/02/2009 a las 13:13
  #4 (permalink)  
Antiguo 13/02/2009, 16:06
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Evitar ingreso de campo vacio en bd

Hola pues para aclarar la segunda parte de tu pregunta creo que lo que deberias hacer es poner en alguna columna una LLAVE PRIMARIA, para que evites que este se repita, entonces antes de que mandes a meter los datos lo que necesitas hacer es una comparacion de si existe.

Código PHP:
$sql="SELECT dato_no_repita FROM datos where datos_no_repita=$_POST['datos (o cuialquiera de ellos)']";
$show=mysql_fetch_array($sql);
if (
$show==0)//no existe el dato
{
//haces el insert
}
else
//en caso de que ya exista.
{
echo 
"Error, este datos ya existe!";

Claro que possiras hacer esta misma consulta con varios datos, solo asegurate do ponerlos en el query y listo.
Espero que te sea de ayuda
Salu2!
__________________
海賊王 に なろ!
  #5 (permalink)  
Antiguo 13/02/2009, 22:22
dot
 
Fecha de Ingreso: julio-2008
Mensajes: 5
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Evitar ingreso de campo vacio en bd

Cita:
Iniciado por kurokishi Ver Mensaje
Hola pues para aclarar la segunda parte de tu pregunta creo que lo que deberias hacer es poner en alguna columna una LLAVE PRIMARIA, para que evites que este se repita, entonces antes de que mandes a meter los datos lo que necesitas hacer es una comparacion de si existe.

Código PHP:
$sql="SELECT dato_no_repita FROM datos where datos_no_repita=$_POST['datos (o cuialquiera de ellos)']";
$show=mysql_fetch_array($sql);
if (
$show==0)//no existe el dato
{
//haces el insert
}
else
//en caso de que ya exista.
{
echo 
"Error, este datos ya existe!";

Claro que possiras hacer esta misma consulta con varios datos, solo asegurate do ponerlos en el query y listo.
Espero que te sea de ayuda
Salu2!
Hola kurokishi! Muchas gracias por tu ayuda! Tengo una duda... en la parte de código donde pones "SELECT dato_no_repita" tengo que reemplazar por el nombre del dato que no quiero que se repita? Porque de ser asi tendria que tener previamente los nombre sde los datos a ingresar via formulario... ¿existe alguna forma que antes de hacer el insert chequee en la base de datos para comprobar que no esta duplicado sin la necesidad de tener que escribir el nombre especifico? No se si me explico bien. Igualmente muchas gracias, voy a probar el codigo...

Lo que me tiene preocupado es como puedo hacer para que un campo vacio no sea cargado en la base de datos... es decir que no me aparezca una fila vacia ni un campo "NULL". Simplemente que ante un campo vacio se carguen los demas y ese sea obviado...
  #6 (permalink)  
Antiguo 14/02/2009, 02:06
Avatar de uselox  
Fecha de Ingreso: agosto-2008
Ubicación: Lima, Perú
Mensajes: 168
Antigüedad: 15 años, 8 meses
Puntos: 12
Respuesta: Evitar ingreso de campo vacio en bd

agrega UNIQUE 'atributo' ala columna que no quieras q se repita
  #7 (permalink)  
Antiguo 14/02/2009, 02:09
 
Fecha de Ingreso: agosto-2008
Ubicación: D,F
Mensajes: 412
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: Evitar ingreso de campo vacio en bd

no a lado del selec va la el nombre de la columna q etsa el la tabla te voy a poner un ejemplo
Código PHP:
<?
//cuando utilisas un select  puedes hacerlo de esta manera select from "nombre //de la tabala" o selec "combre de la columna"from "nombre de la tabla"
//lo q mi compañero lo q puso es 
$sql="SELECT 'nombre de la columna ' From 'nombre de la tabla";
//despues para validar los campos que esten llenados o no utilisarias el if pork if es la condicion entonces  para que no queden campos vacios harias esto

if($nombre del campo ==""//aqui estamos poniendo un condicion por ejemplo que el campo se llame usuario , la condicion seria que si el campo usuario es igual a "se deja vacio cuado no tiene datos" 
//entonces vamos a hacer lo siguiente q es imprimir el mensaje de error que seria utilizando las llaves  { }
{
echo 
"no se lleno el campo ";
}
//entonces como ya entenderas que si no se llena el campo usuario nos mandara el erro que no se lleno el campo 
//en caso de que si halla llenado ya no usamos el if sino el else y quedaria de la siguiente forma
else 

echo 
"registro satisfatorio";
}
?>
espero que haya sido de ayuda nos vemos

Última edición por rikimm; 14/02/2009 a las 02:21
  #8 (permalink)  
Antiguo 14/02/2009, 12:02
dot
 
Fecha de Ingreso: julio-2008
Mensajes: 5
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Evitar ingreso de campo vacio en bd

Muchas gracias por tu aclaración rikimm!! =)

Probando el codigo, me surgió un nuevo problema. Ahora aún cuando tengo todos los campos llenos no puedo ingresar datos en la tabla porque me dice que uno de los campos sigue vacío... este es el código que estoy usando...

Código PHP:
mysql_query("SELECT datos FROM datos")
or die(
mysql_error());

if(
$datosa == "")
{
echo 
"Uno de los campos esta vacío.";
}
else

mysql_query("INSERT INTO datos VALUES('$_POST[datos]'),('$_POST[datosa]'),('$_POST[datosb]'),('$_POST[datosc]')"
or die(
mysql_error());

echo 
"Datos insertados!";

Por ejemplo en ese caso aún cuando el campo del formulario denominado "datosa" esté completo, me sigue entregando el error "Uno de los campos está vacío".

He probado completando todos los campos del formulario, solo algunos e incluso cambiando la condicion del if por otro campo pero sigue el mismo error...

Última edición por dot; 14/02/2009 a las 15:49
  #9 (permalink)  
Antiguo 14/02/2009, 17:37
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 326
Antigüedad: 15 años, 3 meses
Puntos: 27
Respuesta: Evitar ingreso de campo vacio en bd

la variable $datosa tiene datos?... en algun lado le asignas los datos de esa variable para compararla?
  #10 (permalink)  
Antiguo 14/02/2009, 19:17
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Evitar ingreso de campo vacio en bd

Pues cahi como dice vicram10, parece que $datosa no tiene valor (o por lo menos no se ve de donde saca su valor).
Te recomiendo que cuando metas los datos por post pongas un isset y aparte uses empty para saber si hay datos o no.
Código PHP:
if(isset ($_POST['datos']) && isset($_POST['datosa']) && ....)//checa si esta definida
{
  if (empty(
$_POST['datos']) && empty($_POST['datosa']) &&...)//si esta vacio
  
{
    echo 
"Hay campos sin llenar";
  }
  else 
  {
    
/*tu codigo, aqui puedes cambiar tus post a variables, o puedes seguir haciendolo igual
 ej. $datos=$_POST['datos']; etc. y asi ya poder poner en vez de post en tu query le pones 
la variable que le hayas asignado
*/
  
}

Pues espero que te sirva de menos para aclarar tus dudas. checalo y nos dices como te fue.
salu2!
__________________
海賊王 に なろ!

Última edición por kurokishi; 14/02/2009 a las 19:22
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 17:23.