Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/01/2010, 18:37
Avatar de zerpico_01
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