Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] No recargar pagina al enviar formulario

Estas en el tema de No recargar pagina al enviar formulario en el foro de PHP en Foros del Web. Hola a todos, tengo un problema con el comprtamiento de un formulario de contacto que tengo que añadir a una web. El formulario esta en ...
  #1 (permalink)  
Antiguo 02/11/2013, 16:07
 
Fecha de Ingreso: noviembre-2013
Mensajes: 2
Antigüedad: 10 años, 5 meses
Puntos: 0
No recargar pagina al enviar formulario

Hola a todos, tengo un problema con el comprtamiento de un formulario de contacto que tengo que añadir a una web.
El formulario esta en un fichero .php en un directorio includes, distinto a la ubicación del fichero que lo llama... es decir el fichero index.php que llama al fomulario esta en el directorio raiz y el form.php esta en la carpeta "includes" que cuelga de la raiz.
Desde el index.php lo llamo con un include.
El formulario funciona correctamente, me envia el correo, me muestra los mensajes de error o de confirmación, al pie del formulario.
El problema es que cuando le doy al botón de enviar me recarga la pagina index.php y me vuelve al principio de la pagina... el formulario esta casi en el pie de la página,por lo que es un incordio ya que tienes que volver a bajar para ver el mensaje que nos devuelve el formulario.

os copio el contenido del fichero form.php.

Código:
<br />
<form id="form2" method="post"  >
                  <fieldset>
                                    
                  <table width="100%">
  <tr>
    <td width="auto"><label><strong class="text-2">Nombre:<em>*</em></strong></label>
    </td>
  </tr>
  <tr>
  <td ><input type="text" value="" id="nombre" name="nombre">
  </tr>
    <tr>
    <td ><label><strong class="text-2">Email:<em>*</em></strong></label></td>
    
  </tr>
  <tr>
  <td><input type="text" value="" id="email" name="email"><strong class="clear"></strong></td>
  </tr>
    <tr>
    <td ><strong class="text-2">Mensaje:<em>*</em></strong></label></td>
  </tr>
  <tr>
    <td><textarea name="mensaje" id="mensaje"></textarea></td>
  </tr>
  
  <tr>
  
  <td id="errores"><center><span class="text-2"><font color="#FF0000">
  <?php
  if (isset($_POST['nombre']) && isset($_POST['email']) && isset($_POST['mensaje']))
  {
	$name = $_POST['nombre'];
	$email = $_POST['email'];
	$mensaje = $_POST['mensaje'];
	
	if (!empty($name) && !empty($email) && !empty($mensaje)){
		
		$to= '[email protected]';
		$subject = 'Formulario de Contacto';
		$body = '<h2><strong>Solicitud de Información</strong></h2><strong>Nombre:</strong> '.$name.'. <br><br>
	
	<strong>Dirección Email:</strong> '.$email.'<br><br>
	
	<strong>Mensaje:</strong><br><br>'
	.$mensaje;

		$headers = "From: ".$email."\r\nMime-Version: 1.0\r\nContent-type: text/html\r\n";
		
		if (mail($to, $subject, $body, $headers)) {
			echo 'Formulario enviado. En breve contactaremos con usted';
		} else {
			echo 'Ha habido un error en el envío. Intentelo de nuevo más tarde.';
		}
	}else{
		
		echo 'Por favor rellene todos los campos...';
	
	}
  }
  ?></font></span></center></td>
  </tr>
  <tr><td>&nbsp;</td></tr>
  <tr>
    <td colspan="2" align="center"><a class="link-1" onClick="document.getElementById('form2').reset()">Borrar</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class="link-1" onClick="document.getElementById('form2').submit()">Enviar</a></td>
  </tr>
</table>
         <script type="text/javascript">
        $(document).ready(function() {
            $("#errores").delay(3000).fadeOut('slow');
        });
    </script>           
                    
                                   
                    
                    
                    
                    
                    
  </fieldset>  
                </form> 
                <br>
Lo que necesito es que cuando le de al botón enviar no se recargue la pagina y siga en la posición que estoy para poder ver que ocurre con el formulario.

Espero haberme explicado bien y a ver si alguno me podeis echar una mano... os lo agradeceria ya que estoy totalmente atascado con esto.
  #2 (permalink)  
Antiguo 02/11/2013, 17:10
Avatar de Crazylegs  
Fecha de Ingreso: septiembre-2013
Ubicación: Barcelona
Mensajes: 74
Antigüedad: 10 años, 6 meses
Puntos: 14
Respuesta: No recargar pagina al enviar formulario

Pues para que no recargue la página podrías usar Ajax.

Aquí te dejo unos artículos que escribí en mi blog de como realizar peticiones Ajax:

Ajax con Javascript
Ajax con JQuery (Si usas la libreria de javascript JQuery)

Si no lo ves claro, también puedes buscar en google: ajax javascript o ajax jquery.

La cuestión, que tal y como lo tienes montado, con una petición ajax deberás modificar algunas cosas, como por ejemplo que el formulario lo gestione otro archivo php que devuelva una respuesta, porque de la manera que lo tienes puesto, envía toda la página entera, con Ajax solo te interesa la respuesta.

Otra posible solución sería recargando la página pero al formulario:

Código HTML:
Ver original
  1. <form id="form2" method="post" action="#form2" >
__________________
¡Mira mis tutoriales web!
  #3 (permalink)  
Antiguo 02/11/2013, 17:19
 
Fecha de Ingreso: noviembre-2013
Mensajes: 2
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: No recargar pagina al enviar formulario

Esto es un lujazo.. muchisimas gracias por tu pronta respuesta...
Ya esta solucionado... con el action="#form2". Por ahora me vale eso.
Voy a estudiarme tus artículos para aprender más sobre Ajax.

De nuevo muchísimas gracias.....

Etiquetas: formulario, html
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 02:50.