Foros del Web » Programando para Internet » PHP »

validar campos

Estas en el tema de validar campos en el foro de PHP en Foros del Web. Hola, tengo una pequeña duda: Tengo que validar los campos de un formulario de registro de usuarios, si uno no cumple una cierta condicion pues ...
  #1 (permalink)  
Antiguo 11/03/2005, 08:42
 
Fecha de Ingreso: enero-2005
Mensajes: 9
Antigüedad: 12 años, 10 meses
Puntos: 0
validar campos

Hola, tengo una pequeña duda:

Tengo que validar los campos de un formulario de registro de usuarios, si uno no cumple una cierta condicion pues este regresa a la pagina del formulario y muestra su error. El problema esta que si no has escrito ningun campo correctamente, siempre se muestra el ultimo de los errores y el resto no se muestra.

$pag=$_SERVER['HTTP_REFERER'];

if (strlen($usuario)<5 || strlen($usuario)>15)
{
header ("Location: $pag&error=1");
}
if (strlen($passwd)<6 || strlen($passwd)>16)
{
header ("Location: $pag&error=2");
}
if (!valid_email($email))
{
header ("Location: $pag&error=3");
}

y aqui esta el script que procesa el formulario y muestra el error:

<?php
if (isset($_GET['error'])){
$error[1] = "El nombre de usuario debera contener entre 5 y 15 caracteres.";
$error[2] = "La contraseña debera tener entre 6 y 16 caracteres.";
$error[3] = "El email escrito no es valido.";
echo "Mensaje: ".$error{$_GET['error']};
}
?>

Me gustariia que mostrase todos los errores que se hayan producido a la vez y no solo de uno en uno como hace esto, me podeis ayudar?
  #2 (permalink)  
Antiguo 11/03/2005, 09:10
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
El tema es que estas direccionando con un solo error...eso es lo que queres?
Sino es eso, tendrías que crear un vector con los errores, y luego direccionarlo.
Si te sireve que sea de a uno, pero queres que te patee con el primero, intenta en poner un exit luego del header().
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 11/03/2005, 09:25
 
Fecha de Ingreso: enero-2005
Mensajes: 9
Antigüedad: 12 años, 10 meses
Puntos: 0
Hola nicolaspar, me gustaria redireccionar con todos los errores a la vez y no de uno en uno como estoy haciendo ahora, me puedes poner un ejemplo del vector?
  #4 (permalink)  
Antiguo 11/03/2005, 09:40
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Es que vos ya lo tenes creado, el tema es que no lo concatenas...
Hace algo asi:
$error=$pag."&error=";
if (strlen($usuario)<5 || strlen($usuario)>15)
{
$error .= "1,";
}
if (strlen($passwd)<6 || strlen($passwd)>16)
{
$error .= "2,";
}
if (!valid_email($email))
{
$error .= "3,";
}

header ("Location: ".$error."");

Eso te llevaria algo como :
pagina.php?error=1,2,3

Del otro lado hace como estas haciendo, de todas maneras yo validaria mas eso. Podes poner en una var de session este valor, y el otro lado, al menos usar un intval en el valor (cuantos menos errores se ven, y mas segura es la aplicacion, es mejor;))
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 12/03/2005, 09:42
 
Fecha de Ingreso: enero-2005
Mensajes: 9
Antigüedad: 12 años, 10 meses
Puntos: 0
Hola, gracias por la respuesta pero tengo un problema. Lo e echo como me has dicho pero cuando envio el formulario me dice lo siguiente;

Notice: Undefined index: 1,2,3, in output_fns.php on line 17

en la linea 17 tengo esto:

echo "Error:" .$error{$_GET['error']};

y antes de ese "echo" tengo los errores definidos;

if (isset($_GET['error'])){
$error[1] = "El nombre de usuario debera contener entre 5 y 15 caracteres.";
$error[2] = "La contraseña debera tener entre 6 y 16 caracteres.";
$error[3] = "El email escrito no es valido.";

cual podria ser el problema? porque por mas que lo miro no lo entiendo
  #6 (permalink)  
Antiguo 13/03/2005, 21:59
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
supongo que el problema será que estás buscando algo como $error[1,2,3] lo cuál... no existe.
... Ok, de principio quizá la función explode (http://mx.php.net/manual/es/function.explode.php) te sirva; separando por comas... ahora la cuestión está en que no siempre tendrás los tres errores... ... ooook! ya está: los resultados de ese explode lo asignas a otra variable (arreglo al fin) y, dependiendo del número de elementos (errores) ejecutas un while para que te imprima los errores relacionados... más gráficamente:
Código PHP:
if (isset($_GET['error'])){   
$error[1] = "El nombre de usuario debera contener entre 5 y 15 caracteres."
$error[2] = "La contraseña debera tener entre 6 y 16 caracteres."
$error[3] = "El email escrito no es valido."

$erroresexplode (","$_GET['error']); // dudo si esto sirva... sino prueba antes otro cambio de variable; $ERROR=$_GET...

$i=0// solo para que se impriman en órden... digo! :-P
while($i count($errores)) {
$j$errores[i]; // le asigna el número de error (1, 2 ó 3)
echo $error[j]; // ahora sì, imprimir error[1], error[2]... 
$i++;
}

no sé igual creo que es muy complicado.. quizá exista algo más sencillo... Como sea, solo inteno ayudar...

La mejor de las suertes!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 13/03/2005 a las 22:03
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:25.