Foros del Web » Programando para Internet » PHP »

Campos vacios

Estas en el tema de Campos vacios en el foro de PHP en Foros del Web. Hola. Tengo un html con un formulario y al hacer submit los valores se envía mediante POST a un .php. En ese PHP miro si ...
  #1 (permalink)  
Antiguo 06/10/2011, 05:16
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Exclamación Campos vacios

Hola. Tengo un html con un formulario y al hacer submit los valores se envía mediante POST a un .php.

En ese PHP miro si los campos está vacíos. Mi pregunta es, como hago para que si un campo está vacío vaya otra vez a la página del formulario y aparezca un texto en rojo diciendo: "Campo vacio"?
  #2 (permalink)  
Antiguo 06/10/2011, 06:24
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 6 meses
Puntos: 331
Respuesta: Campos vacios

http://www.google.com/search?client=...utf-8&oe=utf-8
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 06/10/2011, 06:44
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Campos vacios

Que simpatico....

No quiero usar Javascript.
La única forma de devolver mensajes de Error del PHP al HTML es mediante variables ?error= ?
  #4 (permalink)  
Antiguo 06/10/2011, 07:38
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 3 meses
Puntos: 20
Respuesta: Campos vacios

Una Consulta, por que no quieres usar Javascript??
  #5 (permalink)  
Antiguo 06/10/2011, 07:44
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Campos vacios

Porque validar campos en JavaScript y luego enviarlos a PHP es inseguro. Existen herramientas para burlar esa validación JS y saltar al PHP directamente y si en ese PHP no se valida lo enviado pueden hacer inyección SQL, entre otras cosas...
  #6 (permalink)  
Antiguo 06/10/2011, 07:50
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 3 meses
Puntos: 20
Respuesta: Campos vacios

Bien, Lo que te recomendaria para hacer esto es usar ajax. que validas en php y si encuentra un campo vacio te lo devuelve con un error
  #7 (permalink)  
Antiguo 06/10/2011, 07:51
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 2 meses
Puntos: 81
Respuesta: Campos vacios

Te equivocas en tu apreciación y en algo de información. No es que haya herramientas, basta con descativar JavaScript y evitar la validación, pero también debe haber validación en PHP y un filtro para evitar SQL inyection. El hecho de que se pueda burlar la validación de JavaScript no quiere decir que no valga la pena aplicarlo porque JavaScript hace que la experiencia del usuario sea más interactiva o dinámica, ya que no hace falta recargar toda la página. Como dije se recomienda que la validación esté en ambos lados. Suerte!
  #8 (permalink)  
Antiguo 06/10/2011, 07:58
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 5 meses
Puntos: 55
Respuesta: Campos vacios

no me parece buen idea validar campos con JS o Ajax que es lo mismo ya que este se ejecuta en el navegador y si el usuario desactiva JS la validación no se ejecuta.

De cara a la validación es mejor hacerla del ledo del servidor para ello php, js es útil para hacer el sistema mas agradable al usuario ya que no tiene que enviar la petición al servidor para chequear los campos. pero jamas se debe confiar la validación o la seguridad en JS

Para validar los datos usa las funciones de php para el manejo de variables.

http://www.php.net/manual/es/ref.var.php


y para evitar inyección SQL usa mysql_real_escape_string

http://www.php.net/manual/es/functio...ape-string.php
  #9 (permalink)  
Antiguo 06/10/2011, 08:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Campos vacios

Es tan sencillo como:
Código PHP:
Ver original
  1. <?php
  2. $aErrors = array();
  3. if (isset($_POST['submit'])) {
  4.        if (empty($_POST['nombre'])) {
  5.                $aErrors['nombre'] = 'Se necesita un nombre!';
  6.        }
  7.  
  8.        if (count($aErrors) == 0) {  // Forma valida
  9.                  header ('Location : ' . $_SERVER['PHP_SELF']);
  10.        }
  11. }
  12. ?>
  13. <form method="post">
  14.           <input type="text" name="nombre" value="<?php if (isset($_POST['nombre'])) { echo $_POST['nombre']; } ?>" /><?php if ( isset($aErrors['nombre'])) { echo '<span class="error">' . $aErrors['nombre'] . '</span>'; } ?>
  15. </form>

Con eso puedes validar el campo y mostrar el error en caso de que exista un error.
  #10 (permalink)  
Antiguo 06/10/2011, 09:23
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Campos vacios

Hola. La explicación sobre porque no quiero validar en JavaScript era un resumen.

Evidentemente se puede validar en Javascript y en PHP a la vez, aunque vuelvo a decir que NUNCA lo haría en javascript. En todo caso haría la validación en php mediante una llamada AJAX desde JS (así es más agradable para el usuario), pero la propia validacion de campos nunca en JS. Además que por la seguridad, siempre es mejor que el usuario sepa lo menos posible del codigo de la web.

El formulario lo uso para enviar emails. Lo he hecho como dice GatorV, pero sin el header y un action= a la propia página.


Código PHP:
Ver original
  1. <?php
  2.     //Enviar mail
  3.     include('send.php');
  4.    
  5.     //Controlar doble Post
  6.     require("postClass.php");
  7.     $thisPost = new Post_Block;
  8.  
  9.         //Evitar caracteres extraños en la cadena
  10.     function limpiarCadena($cadena){
  11.         $cadena = preg_replace("/¡|\^|'|:|@|#|\$|%|&|\"|~|\+|\*|\/|\||\\|\[|\]|\(|\)|\{|\}/","",$cadena);
  12.         $cadena = preg_replace("/-{2,}/","-",$cadena);
  13.         $cadena = preg_replace("/^-|-+$/","",$cadena);
  14.         return $cadena;
  15.     }
  16.  
  17.         //sintaxis email
  18.     function limpiarEmail($email){
  19.         $mail_correcto = 0;
  20.         //compruebo unas cosas primeras
  21.         if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){
  22.             if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) {
  23.             //miro si tiene caracter .
  24.                 if (substr_count($email,".")>= 1){
  25.                 //obtengo la terminacion del dominio
  26.                     $term_dom = substr(strrchr ($email, '.'),1);
  27.                     //compruebo que la terminación del dominio sea correcta
  28.                     if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){
  29.                     //compruebo que lo de antes del dominio sea correcto
  30.                         $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1);
  31.                         $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
  32.                         if ($caracter_ult != "@" && $caracter_ult != "."){
  33.                             $mail_correcto = 1;
  34.                         }
  35.                     }
  36.                 }
  37.             }
  38.         }
  39.         if ($mail_correcto)         return 1;
  40.         else                        return 0;
  41.     }
  42.    
  43.  
  44.  
  45.     if(isset($_POST['postID']))
  46.    
  47.     if ($thisPost->postBlock($_POST['postID'])) {
  48.        
  49.        
  50.         if( (isset($_POST["mensaje"])) && (isset($_POST["email"])) )
  51.             //Si el campo Nombre está activo y tiene contenido....                     
  52.                
  53.             if( ($_POST["email"] != '') && (limpiarEmail($_POST["email"])) )
  54.                
  55.                 if( ($_POST["mensaje"] != '') ){
  56.                    
  57.                     $mail = new enviarMail();            
  58.                     $rslt = $mail->sendMsg($_POST["email"],$_POST["name"],$_POST["topic"],$_POST["mensaje"],$_SESSION["lang"]);
  59.                        
  60.                     if ($rslt)  $rtdoMensaje = "Mensaje enviado";
  61.                     else        $rtdoMensaje = "Error al enviar el mensaje. Intentalo de nuevo.";
  62.                 }
  63.                 else
  64.                    
  65.                     $controlMensaje = "<span style='color:red'>&nbsp;(Campo mensaje requerido)</span>";    
  66.             else
  67.                
  68.                 $controlMail = "<span style='color:red'>&nbsp;(Campo mail requerido)</span>";              
  69.                    
  70.     }
  71.  
  72.        
  73. ?>



Código HTML:
Ver original
  1. <form method="post" action="?x=ctt">
  2.        
  3.        
  4.         <!-- Textarea -->        
  5.         <?php if(isset($controlMensaje)) echo $controlMensaje; ?>
  6.         <textarea name="mensaje" style="height:225px; width:480px;" ><?php if(isset($_POST["mensaje"])) echo $_POST["mensaje"] ?></textarea>
  7.  
  8.        
  9.         <!-- Textbox Email -->                
  10.         <?php if(isset($controlMail)) echo $controlMail; ?>        
  11.           <input               
  12.                type="text"
  13.                name="email"
  14.                value="<?php if(isset($_POST["email"])) echo $_POST["email"] ?>"              
  15.           />  
  16.              
  17.         <!-- Boton Enviar -->  
  18.          <input type="submit" style="width:auto; cursor:pointer" value="Enviar"><?php if(isset($rtdoMensaje)) echo $rtdoMensaje; ?>
  19.  
  20.            
  21.         <?php $thisPost->startPost(); ?>
  22.         </form>

Etiquetas: campos, html, vacios
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 12:54.