Cómo se puede procesar un formulario en la misma página en vez de usar una página de proceso separada. Ahora mismo para suscripciones, comentarios, etc. Uso una segunda página que verifica los datos y luego envía y vuelve a home.php. ¿Cómo puedo hacerlo para que, al enviar, la página verifique en lugar de usar una segunda página?Procesamiento de la misma página
Respuesta
Puede indicarle al formulario que lo envíe al auto de PHP, luego verifique las variables $_POST
para procesar el formulario. Este método es muy bueno para la comprobación de errores, ya que puede establecer un error y luego volver a cargar el formulario con toda la información que el usuario haya enviado previamente (es decir, no pierda su envío).
Cuando se hace clic en el botón "enviar", se ENVIARÁ la información a la misma página, ejecutando el código PHP en la parte superior. Si se produce un error (en función de sus comprobaciones), el formulario se volverá a cargar para el usuario con los errores mostrados y cualquier información que el usuario haya proporcionado aún en los campos. Si no se produce un error, aparecerá una página de confirmación en lugar del formulario.
<?php
//Form submitted
if(isset($_POST['submit'])) {
//Error checking
if(!$_POST['yourname']) {
$error['yourname'] = "<p>Please supply your name.</p>\n";
}
if(!$_POST['address']) {
$error['address'] = "<p>Please supply your address.</p>\n";
}
//No errors, process
if(!is_array($error)) {
//Process your form
//Display confirmation page
echo "<p>Thank you for your submission.</p>\n";
//Require or include any page footer you might have
//here as well so the style of your page isn't broken.
//Then exit the script.
exit;
}
}
?>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>">
<?=$error['yourname']?>
<p><label for="yourname">Your Name:</label><input type="text" id="yourname" name="yourname" value="<?=($_POST['yourname'] ? htmlentities($_POST['yourname']) : '')?>" /></p>
<?=$error['address']?>
<p><label for="address">Your Address:</label><input type="text" id="address" name="address" value="<?=($_POST['address'] ? htmlentities($_POST['address']) : '')?>" /></p>
<p><input type="submit" name="submit" value="Submit" /></p>
</form>
Gracias Michael. Justo lo que estaba buscando. Sin embargo, en lugar de agradecerle por su envío, ¿cómo puedo actualizar esa página para que la página pueda cargar la nueva información? No puedo hacer Ajax en este punto, ¡nuevo en el juego de programación! – AAA
Si procesa el formulario antes de obtener los datos (como sugerí), los nuevos datos se tendrán en cuenta automáticamente. – Jonas
@AAA No entiendo tu pregunta. El método anterior es el modelo exacto que uso en el 90% de mis formularios y es más o menos un ejemplo extendido de lo que ha proporcionado @NeqO. ¿Qué estás tratando de lograr en términos de "actualizar" la página? –
La construcción es más fácil de detectar si la matriz $_POST
no está vacío
if(isset($_POST['myVarInTheForm'])) {
// Process the form
}
// do the regular job
se puede comprobar si se trataba de solicitud POST dentro del código de la página y luego comprueba los datos. Si se trata de una solicitud GET, simplemente muestre el formulario.
Pero recuerde que es una buena práctica mostrar los resultados de envío de formularios exitosos en una página diferente servida a través de la solicitud GET, es decir, cualquier formulario exitoso POST se debe responder con redirigir a la página de éxito.
¿Por qué lo recomienda como un buen proceso? – diagonalbatman
porque cuando se muestra una página normal en respuesta a POST, los datos se reenviarán al actualizar la página. La mayoría de los navegadores advertirán a los usuarios sobre eso (y la mayoría de los usuarios estarán realmente confundidos con esta advertencia), algunos, como Opera, reenviarán silenciosamente todos los datos POST. En cualquier caso, eso probablemente no sea el comportamiento deseado. Es por eso que recomiendo redirigir a la página de resultados si la solicitud fue exitosa. Está bien, sin embargo, mostrar resultados de validación inmediatamente después del POST, si hubo algún error con los datos y pedirle al usuario que corrija su entrada. –
:-) La única razón por la que pregunté es porque cuando estás aprendiendo, a menudo es útil entender por qué se hace un comentario en particular. – diagonalbatman
Por supuesto, puede explorar las solicitudes de AJAX, donde realizaría una llamada asíncrona a su secuencia de comandos del controlador y luego actualizar y luego actualizar la página de envío con un mensaje de éxito. Esto da la impresión de "Procesamiento de la misma página", es decir, la página no tiene que actualizarse.
Sin embargo, realmente depende del efecto que intenta lograr.
Gracias Andy. Intenté implementar Ajax. No pude entender mi cabeza. – AAA
Hay muchos recursos buenos en línea, un sitio que recomendaría sería http://net.tutsplus.com: montones de tutoriales en video para ayudarlo. – diagonalbatman
@ Michael Irigoyen: Funciona bien, pero en la primera rn/carga, se muestra:
"Aviso: Undefined variable: error en C: \ xampp \ htdocs \ same_page.php en línea 28 "
¿Cómo gestionar este aviso?
Conseguílo ahora: "isset usado, @ etc. para suprimir errores ..." "Funciona como un encanto!" "Ahora lo probaré en mi código ..."
He guardado un mensaje de agradecimiento y actualizado utilizando variables de sesión.
if(!is_array($error)){
$_SESSION['message'] = 'Thank You!';
header('Location: yourpage.php');
exit();
}
y luego usar esto en la parte superior de la forma:
if(isset($_SESSION['message'])){
echo $_SESSION['message'];
unset($_SESSION['message'];
}
debería Esto actualiza la página y mostrar el mensaje y si actualizar la página de la variable de sesión está vacía por lo que el agradecimiento no se mostrará Esto se llama un mensaje flash.
- 1. Cambiar la transición de la página en la misma página
- 2. GET y POST en la misma página?
- 3. Reutilizando la misma página varias veces
- 4. mediaelement.js ¿Varios videos en la misma página?
- 5. Múltiple content_for en la misma página
- 6. Dos ValidationSummary en la misma página
- 7. ¿Cómo debería estructurar varias instancias de la misma subclase de Ember.Application en la misma página?
- 8. estilo 2do elemento en la página con la misma clase
- 9. Uso de JQuery y Prototype en la misma página
- 10. ¿Cómo crear galerías separadas de Fancybox en la misma página?
- 11. ¿Cómo ejecuto diferentes versiones de jQuery en la misma página?
- 12. Devise. Registro e inicio de sesión en la misma página
- 13. Dos versiones diferentes de JQuery en la misma página HTML
- 14. Plugin de Will_paginate en dos objetos en la misma página
- 15. cuota de este múltiplo en la misma página
- 16. Múltiples elementos de iScroll en la misma página
- 17. Dos versiones de jQuery en la misma página
- 18. Cómo redirigir a la misma página después de iniciar sesión
- 19. redirigir a misma página para anclar
- 20. Múltiples formularios en la misma página con rieles
- 21. Varios remote_form_for en la misma página causa identificaciones duplicadas
- 22. Cómo mostrar múltiples widgets en la misma página usando MVC
- 23. Cómo redirigir a la misma página en PHP
- 24. ¿Debo usar Modernizrjs + YepNopejs + Requirejs en la misma página?
- 25. Múltiples formularios en la misma página ASP.NET MVC
- 26. ¿Es posible tener dos contextos WebGL en la misma página?
- 27. Enrutamiento Asp.net MVC ambiguo, dos rutas para la misma página
- 28. ¿Redirigir/regresar a la misma página (anterior) en Django?
- 29. Error CodeIgniter AJAX que devuelve la misma página
- 30. Javascript: abrir nueva página en la misma ventana
¿por qué no solo incluye esa segunda página? –
es un tipo de trabajo sucio, ¿no crees? Se verá limpio si está en la misma página. – AAA