Foros del Web » Programando para Internet » PHP »

Validación de formulario

Estas en el tema de Validación de formulario en el foro de PHP en Foros del Web. Hola nuevamente. Nunca antes en mi vida había entrado tanto a este foro. Pero bueno tengo dudas que necesito aclarar de una vez y por ...
  #1 (permalink)  
Antiguo 26/01/2010, 16:49
 
Fecha de Ingreso: agosto-2005
Mensajes: 152
Antigüedad: 18 años, 8 meses
Puntos: 0
Validación de formulario

Hola nuevamente.
Nunca antes en mi vida había entrado tanto a este foro. Pero bueno tengo dudas que necesito aclarar de una vez y por todas, espero me disculpen.
Tengo el siguiente código:
Código PHP:
<?php
// incluimos el archivo de conexion
include ('db_cnx.php');
// recibimos el formulario
if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar')
{
  
// comprobamos que el formulario no envie campos vacios
  
if(!empty($_POST['codigo_emp']) && $_POST['descripcion'] &&
   
$_POST['comprador1'] && $_POST['identidad1'] && $_POST['comprador2'] && $_POST['identidad2'])
    {
      
$busqueda mysql_query("SELECT codigo_emp FROM datos WHERE codigo_emp='$codigo_emp'");  
      if(
mysql_num_rows($busqueda)>0) { // ó " !=0 " como se quiera ver 
         // Inciso a:  
         
echo "Está empresa ya existe. Por favor intente con otro cliente.<br>"
         echo 
"<a href=\"javascript:history.back()\">Regresar</a>"
    } else { 
       
// Inciso b:
      // creamos la variable y le asignamos el valor a insertar
      // Paso 1: Recibimos el formulario:       
      
$codigo_emp $_POST['codigo_emp'];
      
$descripcion $_POST['descripcion'];
      
$comprador1 $_POST['comprador1'];
      
$identidad1 $_POST['identidad1'];
      
$comprador2 $_POST['comprador2'];
      
$identidad2 $_POST['identidad2'];      
      
// insertamos registros a la base de datos
      
$sqlInserDat mysql_query("INSERT INTO datos (codigo_emp, descripcion, comprador1, identidad1, comprador2, identidad2)
      VALUES ('$codigo_emp', '$descripcion', '$comprador1', '$identidad1', '$comprador2', '$identidad2')"
$db_link)
      or die(
mysql_error());
// enviamos un mensaje de exito
echo "Los datos fueron guardados correctamente";  
            }             
    }
      
// si el formulario viene vacio
      //enviamos un mensaje de error
        
echo "El formulario tiene campos vacios, debe llenar el formulario";    
}
?>
En él mismo trato de evitar que se introduzcan valores duplicados en la base de datos, además de comprobar que el formulario con los valores a insertar en la base de datos se haya envíado y además de verificar que el mismo no tenga ningún campo vacio. Hasta ahí una breve explicación.
Cuando lleno el formulario con registro que ya existe todo perfecto me dice que existe el registro, es decir me pone el mensaje personalizado para tal sistuación, si no lleno todos los campos del formulario me pone también el mensaje correspondiente y si pongo un nuevo registro me sale el mensaje correspondiente, pero hay una situación que me tiene loco y no acabo de encontrarle la solución, y es el caso que en todas estás situaciones el mensaje que debo llenar todos los campos del formulario siempre sale.
No sé si es que lo estoy colocando en la parte que no se debe o que no entiendo bien el funcionamiento de las estructuras if else anidadas. El caso es que no doy pie con bola.
Ayudaaaaaaaaaaaaaaaaaaaaaaa.
Muchas Gracias por su paciencia.
  #2 (permalink)  
Antiguo 26/01/2010, 17:09
 
Fecha de Ingreso: enero-2010
Mensajes: 20
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Validación de formulario

te falta un else, haber prueba asi:

<?php
// incluimos el archivo de conexion
include ('db_cnx.php');
// recibimos el formulario
if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar')
{
// comprobamos que el formulario no envie campos vacios
if(!empty($_POST['codigo_emp']) && $_POST['descripcion'] &&
$_POST['comprador1'] && $_POST['identidad1'] && $_POST['comprador2'] && $_POST['identidad2'])
{
$busqueda = mysql_query("SELECT codigo_emp FROM datos WHERE codigo_emp='$codigo_emp'");
if(mysql_num_rows($busqueda)>0) { // ó " !=0 " como se quiera ver
// Inciso a:
echo "Está empresa ya existe. Por favor intente con otro cliente.<br>";
echo "<a href=\"javascript:history.back()\">Regresar</a>";
} else {
// Inciso b:
// creamos la variable y le asignamos el valor a insertar
// Paso 1: Recibimos el formulario:
$codigo_emp = $_POST['codigo_emp'];
$descripcion = $_POST['descripcion'];
$comprador1 = $_POST['comprador1'];
$identidad1 = $_POST['identidad1'];
$comprador2 = $_POST['comprador2'];
$identidad2 = $_POST['identidad2'];
// insertamos registros a la base de datos
$sqlInserDat = mysql_query("INSERT INTO datos (codigo_emp, descripcion, comprador1, identidad1, comprador2, identidad2)
VALUES ('$codigo_emp', '$descripcion', '$comprador1', '$identidad1', '$comprador2', '$identidad2')", $db_link)
or die(mysql_error());
// enviamos un mensaje de exito
echo "Los datos fueron guardados correctamente";
}
}else{
// si el formulario viene vacio
//enviamos un mensaje de error
echo "El formulario tiene campos vacios, debe llenar el formulario";
}
}
?>
  #3 (permalink)  
Antiguo 26/01/2010, 17:22
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Validación de formulario

si ya solucionaste tu error te digo que tu codigo no esta bien programado ademas de verificar que no esten vacios los campos debes validar las entradas para xss , utilizacion de codigo dañino y tambien tu sentencia mysql esta mal porque es vulnerable a injeccion .....

saludos!!!

si hago tiempo te post el codigo como deberia ir .....
  #4 (permalink)  
Antiguo 26/01/2010, 17:42
 
Fecha de Ingreso: agosto-2005
Mensajes: 152
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: Validación de formulario

Muchas Gracias AldoxMk por tu respuesta, precisamente ese era el problema.
Gracias Reiteradas. Zerpico_01 agradecería de todo corazón que hicieras el tiempo y me mejoraras el código.
Muchas Gracias a los dos.
  #5 (permalink)  
Antiguo 26/01/2010, 18:37
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Validación de formulario

es algo echo a la ligera y bien paranoico , pero tambien recuerda que puedes utilizar jquery o algun ajax para validar datos desde lado del usuario, hay muchos aqui tienes un links

http://www.google.es/#hl=es&source=h...ca4cb4c0fea563

pero tambien recuerda que siempre tienes que validar del lado servidor con php.... el javascript o ajax te sirve para usuarios no maliciosos....

en fin aqui tienes un codigo que realice a la ligera tal vez te de algun error pero trata de mejorarlo.... yo uso cosas asi, muchos prefieren usar filtros de terceros para validacion como http://htmlpurifier.org/

Código PHP:
<?php
// incluimos el archivo de conexion
include ('db_cnx.php');
// recibimos el formulario
$error_empresa=  "Está empresa ya existe. Por favor intente con otro cliente.<br>"
$error_vacio="debes completar todos los campos del formulario"
///coloca todos los caracteres y palabras que puedan hacer daño slect, WHERE, from etc...
///debes colcoarlos en minuscualas y mayuculas si no usa la funcion php para pasar lo que
//usuario coloque siempre a minusculas.....
$reemplame=array("\x00",'*','#','@','!','%','&','|','+','-','$','^' ,'\x00''\\/''/'':''?''¿''<''>'','';','(',')','$','%','[',']','"',' ','Á','É','Í','Ó','Ú','Ü','ú','ó','á','é','í','ü','.','UNION','union');
if(isset(
$_POST['enviar']) && $_POST['enviar'] == 'Enviar')
{
 
$codigo_emp =  htmlentities($_POST['codigo_emp'], ENT_QUOTES);
 
//si el codigo es numerico solamente
 
if (!preg_match("/^[0-9]+$/"$codigo_emp)){
  
///si no es valor numeral lo envias a una pagina de error o lo que tu quieras
 
header("Location:pagina_error.php");
exit();
    }
 
$descripcion htmlentities($_POST['descripcion'], ENT_QUOTES);
 
//si la descripcion tendra caracteres alfa numericos unicamente
 
if (!preg_match("/^[a-zA-Z0-9]+$/"$descripcion)){
  
///si tiene un codigo malicioso lo envias a pagina de error
  //NOTA: no aclares en la pagina ninguna nota que diga que error cometio ...
  //eso daria pautas al atacante, tambien recuerda que debes hacer una tabla en tu DB
  //para almacenar IP y errores si se cometen ejemplo: mas 7 errores de este tipo
  //bloqueas el IP .... 
 
header("Location:pagina_error.php");
exit();
    }
 
$comprador1 htmlentities($_POST['comprador1'], ENT_QUOTES);
 if (!
preg_match("/^[a-zA-Z]+$/",  $comprador1)){
  
///iden anteriores 
 
header("Location:pagina_error.php");
exit();
    }
 
$identidad1 htmlentities($_POST['identidad1'], ENT_QUOTES);
 if (!
preg_match("/^[a-zA-Z]+$/"$identidad1)){
  
///crear archivo de aviso suspension 
 
header("Location:pagina_error.php");
exit();
    }
 
$comprador2 htmlentities$_POST['comprador2'], ENT_QUOTES);
 if (!
preg_match("/^[a-zA-Z]+$/"$comprador2)){
 
header("Location:pagina_error.php");
exit();
    }
 
$identidad2 htmlentities($_POST['identidad2'], ENT_QUOTES); 
 if (!
preg_match("/^[a-zA-Z]+$/"$identidad2)){
 
header("Location:pagina_error.php");
exit();
    }
      
  
// comprobamos que el formulario no envie campos vacios
  
if(empty($_POST['codigo_emp']) && $_POST['descripcion'] &&
   
$_POST['comprador1'] && $_POST['identidad1'] && $_POST['comprador2'] && $_POST['identidad2'])
    {
    
$error_vacio
    
// $error_stop=1; se usaria para crear un codigo mas complejo pero no tengo tiempo :-(
      
}
    elseif{
    
$img1=$_POST['codigo_emp'];
$img1=str_replace($reemplame,'',$img1);

  
$codigo_emp $_POST['codigo_emp'];
  
$codigo_emp=str_replace($reemplame,'',$codigo_emp);
  
 
$descripcion $_POST['descripcion'];
 
$descripcion=str_replace($reemplame,'',$descripcion);
 
 
$comprador1 $_POST['comprador1'];
$comprador1=str_replace($reemplame,'',$comprador1);

$identidad1 $_POST['identidad1'];
$identidad1=str_replace($reemplame,'',$identidad1);

$comprador2 $_POST['comprador2'];
$comprador2=str_replace($reemplame,'',$comprador2);

$identidad2 $_POST['identidad2'];     
$identidad2=str_replace($reemplame,'',$identidad2);
      

 
$busqueda sprintf("SELECT codigo_emp FROM datos WHERE codigo_emp='%s'",stripslashes(mysql_real_escape_string('$codigo_emp')));  
$busqueda_sqlq=mysql_query($busqueda);
//$busqueda_fetch=mysql_fetch_array($busqueda_sqlq);
      
      
elseif(mysql_num_rows($busqueda)!=0) { // ó " !=0 " como se quiera ver 
         // Inciso a:  
       
$error_empresa;  
// $error_stop=1; se usaria para crear un codigo mas complejo pero no tengo tiempo :-(
       //  echo "<a href=\"javascript:history.back()\">Regresar</a>"; 
       //si genera error el formulario no se enviara debe cargarse ...creo ....que tendras que crear sessiones con los campos del formulario para que lo que ha colocado el usuario no se borre....
    
} else { 
      
    
$codigo_emp =  mysql_real_escape_string($_POST['codigo_emp']);
     
$descripcion mysql_real_escape_string(($_POST['descripcion']);
     
$comprador1 mysql_real_escape_string(($_POST['comprador1']);
     
$identidad1 mysql_real_escape_string(($_POST['identidad1']);
     
$comprador2 mysql_real_escape_string(( $_POST['comprador2']);
   
$identidad2 mysql_real_escape_string(($_POST['identidad2']);     


 
mysql_query("INSERT INTO datos (codigo_emp, descripcion, comprador1, identidad1, comprador2, identidad2) values ('$codigo_emp', '$descripcion', '$comprador1', '$identidad1', '$comprador2', '$identidad2')"$db_link)
      or die(
mysql_error());
// enviamos un mensaje de exito
echo "Los datos fueron guardados correctamente";  
            }             
    }
      
// si el formulario viene vacio
      //enviamos un mensaje de error
     ///   echo "El formulario tiene campos vacios, debe llenar el formulario";    
}
}
?>
yo en particular prefiero no mostrar que error a ocurrido ya que eso daria pautas a un malicioso, solo mostraria un mensaje general algo asi: --> hay errores en la informacion, por favor verique los datos introducidos.
pues digamos que un malicioso se mete a tu formulario y comienza a generar errores, si da error el campo ejemplo "dos" con esto le estas diciendo que el campo uno es correcto se entiende....
saludos!!

Última edición por zerpico_01; 27/01/2010 a las 09:58

Etiquetas: formulario, validar
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 04:16.