2010-02-19 8 views
5

Quiero validar un formulario para asegurarme de que el usuario escriba un nombre y un apellido.¿Cómo puedo mantener un valor en una entrada de texto después de que se produzca una entrega?

Si un usuario escribe solo su apellido, el formulario debe mostrarse nuevamente con un mensaje de error junto al campo del último nombre, pero el valor del nombre debe ser todavía estar allí.

No sé cómo hacer esto, jeje. Solo soy un programador de PHP novato.

Esto es lo que tengo hasta ahora:

<html> 
<head> 
</head> 

<body> 
    <form action="formprueba.php" method="get"> 
     <dl> 
      <dt>Last Name:</dt> 
      <dd><input type="text" value="" name="name" /> 
       <?php if((isset($_GET['name'])) && ($_GET['name'] == "")){ 
        echo "Please write a correct name."; 
       } 
       ?> 
      </dd>     

      <dt>Last Name:</dt> 
      <dd><input type="text" value="" name="lastname" /> 
       <?php if((isset($_GET['lastname'])) && ($_GET['lastname'] == "")){ 
        echo "Please write a correct last name."; 
       } 
       ?> 
      </dd> 

      <br />     
      <dt> 
       <input type="submit" value="enviar" /> 
      </dt> 
      <input type="hidden" name="enviado" value="j"/> 
     </dl> 
    </form> 
</body> 

Además, estoy seguro de esta validación es horrible, si usted tiene un par de minutos, estaría muy grad si alguien puede mostrarme una forma más eficiente de validar (sin usar complementos de terceros).

Gracias SO.

Respuesta

14

Coloque la variable que necesita en el campo "valor" de la entrada-tag como esto:

<input type="text" value="<?php echo htmlspecialchars($_GET['lastname']); ?>" name="lastname" /> 

y es importante citar a como mínimo, los caracteres HTML que alguien podría poner (por htmlspecialchars).

+5

Para manejar el aviso de índice indefinido cuando $ _GET no está establecido, generalmente hago esto en algún lugar en la parte superior de los scripts $ lastname = isset ($ _ GET ['lastname'])? $ _GET ['lastname']: ''; – vsr

0

Puede usar javascript del lado del cliente; de ​​este modo, guardará un viaje al servidor.

Sin embargo, la desventaja es que en realidad solo se puede realizar una comprobación básica ya que no se puede confiar en el usuario (por supuesto, para medidas de seguridad). Al menos puede "marcar" los patrones no válidos antes de realizar un costoso viaje al servidor.

+0

Necesito un PHP única solución en este momento. : P Lo investigaré cuando entregue esta pequeña tarea. Podría describir lo que tengo que hacer? No necesariamente quiero todo el código que me acaba de entregar. –

+0

El lado del cliente JS guardará un viaje al servidor, pero requiere confiar en el usuario. Solo puede ser "agradable para el usuario" y nunca un sustituto de la verificación real. – Quentin

2

Si un usuario escribe en sólo su última nombre, la forma debe mostrar de nuevo con un mensaje de error al lado del campo apellido , pero el valor nombre todavía debe estar allí.

acaba de obtener su valor de $_GET (el método de formulario que está utilizando)

<input type="text" value="" name="lastname" value="<?php echo $_GET['lastname'];?>" /> 

y así sucesivamente ....

Usted necesidad también utilizar htmlspecialchars función por razones de seguridad.

More Information Here.

+1

** debe ** no podría. Si no se desinfecta la información antes de que salga del sistema, se abrirá el sitio hasta los ataques XSS. – Quentin

+0

@David: tiene razón :) – Sarfraz

-2

pienso, JavaScript es la mejor respuesta si se puede confiar en Javascript. Pero el script del lado del cliente puede ser anulado. Entonces valide su entrada en el servidor más tarde.

0

sólo una pequeña nota que tuve que aprender por las malas: mostrar un mensaje de error e instando a que el usuario presione el botón de retroceso (o hacer lo mismo usando javascript) hace no, en general, preservar los valores en los campos de entrada.

Esto parece ser completamente específico del navegador, p. Ej. para mí que trabajó en Safari, pero no en Firefox ...

0

Es bueno hacer validaciones en el lado del servidor. Tu enfoque parece estar bien. Puede mantener una bandera que le dirá al final de la página si la validación fue exitosa o no.

Ejemplo

$ flag = ture;

<?php if((isset($_GET['lastname'])) && ($_GET['lastname'] == "")){ 
     echo "Please write a correct last name."; 
     $flag="false"; 
} 
?> 

continuación, en la parte inferior de la página si ($ flag == true) echo "formulario de envío";

Sobre la persistencia de un mismo valor de la persona que ha hablar correctamente añadiendo valor a su etiqueta de entrada

value="<?php echo $_GET['lastname'];?>" 

Espero que esto ayude.

1

Si usted está haciendo algo así como

<input type="text" value="" name="lastname" value="<?php echo $_GET['lastname'];?>" /> 

, nunca, nunca jamás se olvide de comprobar/escapar el valor se visualiza usando, por ejemplo, htmlentities(). De lo contrario, está abierto a ataques de inyección de JavaScript totalmente triviales!

-1

Agregar a su formulario en el que primero se declara:

<form onsubmit="event.preventDefault(); validateMyForm();"> 
+0

¿Por qué el OP "en este momento"? Una ** buena respuesta ** siempre tendrá una explicación de lo que se hizo y por qué se hizo de esa manera, no solo para el OP, sino también para los futuros visitantes de SO. –

Cuestiones relacionadas