Ver Mensaje Individual
  #5 (permalink)  
Antiguo 10/08/2011, 04:43
Avatar de vgonga1986
vgonga1986
 
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Validación de form en php.

Buenas,

Cita:
Iniciado por agcforos Ver Mensaje
Partimos de la base de que soy nuevo en esto. Te explico...
Si esto es como dices, deberías empezar por mirar algún manual y demás, porque si yo te explico cómo funcionan las validaciones en JS y PHP, asumo que tienes un conocimiento previo. Si no lo tienes, no te vas a enterar de nada.

Esto está perfectamente explicado en el post que te pasé, pero no lo habrás entendido. Te extiendo la explicación. La interacción entre un cliente y un servidor es la siguiente: el cliente realiza un evento (acción) y esto genera una petición HTTP que se envía al servidor, el servidor recoge la petición, accede al script que tiene que cargar, lo evalúa (es decir, ejecuta su código) y, con la respuesta que genera el script monta una respuesta HTTP que es enviada e interpretada por el cliente.

Bien, dentro de este esquema tenemos PHP y JS: PHP es un lenguaje de servidor y JS es un leguaje de cliente. Qué quiere decir esto? Quiere decir que PHP se va a ejecutar únicamente en el servidor y JS únicamente en el cliente. A la hora de validar, JS se mete (dentro del proceso que te he explicado) entre la generación de la acción (en este caso, darle a enviar el formulario) y el montaje de la petición HTTP, luego si la página no valida con JS no se envía la petición al servidor, se queda en la misma página y nunca pierdes los datos que tengas insertados en el formulario. Sin embargo, la validación PHP se introduce en la ejecución del script que se ejecuta en el servidor (nota que la petición ya ha sido enviada). Este script será el encargado de definir qué se hace si no se pasa la validación.

Con esto claro, paso a tus preguntas.

Cita:
Iniciado por agcforos Ver Mensaje
Lo que no veo es una vez dentro del php que contiene el formulario, ¿donde meto estas validaciones para que la llamada dentro del submit no la realice si existen errores en los campos del formulario?
Si lo que quieres es que la petición HTTP no se envíe, hay que validar con JS y en el post que se pasé viene cómo llamar a la función. Se llama desde el evento onsubmit del tag del form. Es decir:
<form name="nombre_del_form" action="loquesea" onsubmit="return validateForm()" method="post">
Dónde validateForm() es una función JS que valida todos los campos del formulario y devuelve true si pasó la validación y false en caso contrario.

Pero esto no es completo, por qué? Sencillo, un usuario puede desactivar JS en su navegador y si sólo tienes validación con JS se la saltaría y podría enviarte al servidor datos basura que no han pasado la validación, con la consecuente catástrofe que esto significa. Hay que validar en JS y en PHP siempre.

Cita:
Iniciado por agcforos Ver Mensaje
¿Tengo que meter estas validaciones dentro del formulario para cada campo?, ¿tengo que hacerlo posteriormente al formulario?, entiendo que esto no porque sería enviado antes de validar.
Ya has visto cómo se valida desde JS. Para validar en PHP lo que hay que hacer es, en el php que recibe los datos del formulario, tienes que añadir las siguientes líneas:
Código PHP:
Ver original
  1. if ($message = ValidateForm()) {
  2.     // Aquí todo ha ido bien
  3. } else {
  4.     // Aquí no se ha pasado alguna validación y en $message tienes un mensaje que te dice qué ha pasado.
  5. }

En tu caso, si lo que quieres es que si no valida le vuelva a reenviar a la página del formulario, tendrás que ponerlo en el else.

Cita:
Iniciado por agcforos Ver Mensaje
Y en cualquier caso, ¿puedo de alguna manera devolver un php al de llamada sin perder los datos previamente introducidos en el de llamada?
Gracias, saludos y perdonad mi ignorancia.
Puedes, como ya te he indicado, redirigir desde el PHP a al misma página en la que está el formulario. Pero los campos no se van a rellenar por arte de magia, tendrás que extraer sus valores del $_POST y rellenarlos tú.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?