Foros del Web » Programando para Internet » Jquery »

Problema con php cargado en un div de forma dinámica con jquery

Estas en el tema de Problema con php cargado en un div de forma dinámica con jquery en el foro de Jquery en Foros del Web. hola, muy buenas.. Os cuento: Estoy con una página en la que tengo un menú (que no se mueve nunca) y un div central donde ...
  #1 (permalink)  
Antiguo 25/08/2012, 11:44
 
Fecha de Ingreso: junio-2012
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 0
Problema con php cargado en un div de forma dinámica con jquery

hola, muy buenas..

Os cuento:
Estoy con una página en la que tengo un menú (que no se mueve nunca) y un div central donde se carga todo el contenido, todas las páginas, hasta ahí, todo bien.

Cargo el contenido con jquery, y las páginas cargadas que llevan jquery a su vez, funcinan de maravilla... el PROBLEMA viene.. cuando estas páginas algo de php (ej: mandar un email) o son enteras con php... cuando doy al submit, lo que me pasa es: o me lleva directamente al index... ó no hace nada...

Estas páginas funcionan perfectamente cargadas ellas solas en el navegador.

Alguien tiene alguna idea de que me puede pasar???

por favor por favor... una ayudita...
  #2 (permalink)  
Antiguo 25/08/2012, 12:48
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

Hola, lógicamente en el action de form tendrás puesto index.php o similar. Al hacer click estás recargando la ventana entera y entonces se carga en el div el contenido que tengas por defecto.
Por un lado no es muy recomendable cargar todos los contenidos con jquery ya que los buscadores no los indexan, aún así si quieres enviar el form, puedes enviarlo tambien con jquery sin tener que recargar la pagina.
Un ejemplo en: http://loquenecesita.com/2010/03/jqu...gar-la-pagina/
  #3 (permalink)  
Antiguo 25/08/2012, 13:05
 
Fecha de Ingreso: junio-2012
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

pues va a ser que no

se carga el formulario en el div.. (es un html) se valida con jquery (en un js) y ese mismo js llama a un php que envia.. y al final en el hmtl se muestra si ha ido bien o no...
  #4 (permalink)  
Antiguo 25/08/2012, 13:09
 
Fecha de Ingreso: junio-2012
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

esa pagina que me has dicho... vale.. muy bueno.. pero sigue ocurriendo lo mismo.. en el momento que lo pongo en el div... surgen los problemas...

por cierto.. el codigo que utilizo para cargar la página dinamicamente es:

$(document).ready(function(){
$("#nav li").each(function(event){
$(this).on('click','ul a',function(event){
event.preventDefault();
var href = $(this).attr("href");
$("#centro").load(href);
return false;
});
});
});
  #5 (permalink)  
Antiguo 25/08/2012, 13:10
 
Fecha de Ingreso: junio-2012
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

ah.. y decir.. que las demas páginas cargadas que contienen jquery se ven fenomenal, el problema viene con el php
  #6 (permalink)  
Antiguo 25/08/2012, 13:18
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

No sé si lo he entendido muy bien. Sería más fácil viéndolo.
Si envías un formulario lógicamente la recogida de datos debería estar en el index, ya que estas cargando la página del formulario en el div una vez se haya cargado la pagina entera, es decir, que no va a recoger los datos el codigo de enviar mail.
  #7 (permalink)  
Antiguo 25/08/2012, 13:50
 
Fecha de Ingreso: junio-2012
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

hola...
mirad.. este es un ejemplo.. sencillo.. que tambien estoy probando:

<html>
<head>
<title>Contacto</title>
<link rel='stylesheet' href='estilos22.css'>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
<script src='funciones22.js'></script>
</head>
<body>
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$error1 = '<span class="error">Ingrese su nombre</span>';
}else if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$error2 = '<span class="error">Ingrese un email correcto</span>';
}else if($_POST['asunto'] == ''){
$error3 = '<span class="error">Ingrese un asunto</span>';
}else if($_POST['mensaje'] == ''){
$error4 = '<span class="error">Ingrese un mensaje</span>';
}else{
$dest = "[email protected]"; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto']; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
//Cabeceras del correo
$headers = "From: $nombre $email\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //

if(mail($dest,$asunto,$cuerpo,$headers)){
$result = '<div class="result_ok">Email enviado correctamente :)</div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '<div class="result_fail">Hubo un error al enviar el mensaje :(</div>';
}
}
}
?>
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input type='text' class='nombre' name='nombre' value='<?php echo $_POST['nombre']; ?>'><?php echo $error1 ?></div>
<div><label>Tu Email:</label><input type='text' class='email' name='email' value='<?php echo $_POST['email']; ?>'><?php echo $error2 ?></div>
<div><label>Asunto:</label><input type='text' class='asunto' name='asunto' value='<?php echo $_POST['asunto']; ?>'><?php echo $error3 ?></div>
<div><label>Mensaje:</label><textarea rows='6' class='mensaje' name='mensaje'><?php echo $_POST['mensaje']; ?></textarea><?php echo $error4 ?></div>
<div><input type='submit' value='Envia Mensaje' class='boton' name='boton'></div>
<?php echo $result; ?>
</form>
</body>
</html>



Si esto lo pruebo en una página única.. y sola en el navegador.. perfecto!

En el momento que lo cargo en un div.. ya no me funciona..
  #8 (permalink)  
Antiguo 25/08/2012, 13:54
 
Fecha de Ingreso: junio-2012
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

explico un poco:

es una página con un menú lateral que no se mueve, cargo las páginas dentro de un div contenedor usando:

$(document).ready(function(){
$("#nav li").each(function(event){
$(this).on('click','ul a',function(event){
event.preventDefault();
var href = $(this).attr("href");
$("#centro").load(href);
return false;
});
});
});


las otras páginas asi cargadas, y con jquery en ellas, me funcionan muy bien.. el tema está en el php...
  #9 (permalink)  
Antiguo 25/08/2012, 14:06
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

Es lo que te decía, al enviar el formulario lo que estas haciendo realmente es enviar los datos a la pagina que contiene el div donde lo cargas. Una vez enviado, los $_POST NO son recibidor por la página que se carga dinamicamente en el div.

Como soluciones:
-Creas una página enviar.php y pones en el action de form 'enviar.php'.
-Una vez que se envíe el mail enviar.php puedes redirigir a la pagina que quieras con header('location:tupagina.php') o mostrar el mensaje de que el mail ha sido enviado.

Otra solucion sería enviar el formulario con jquery a enviar.php y que mostraras el resultado en el div #centro
Pondrias un id al formulario y pondrias en el archivo del form
Código Javascript:
Ver original
  1. $(document).ready(function (){
  2.    $('.boton').click(function(){
  3.       $.ajax({
  4.           type: "POST",
  5.           url: "enviar.php",
  6.           data: $('#id_formulario').serialize(),
  7.           success: function(datos) {
  8.             $('#centro').html(datos);
  9.           }
  10.       });
  11.    })
  12. })
  #10 (permalink)  
Antiguo 25/08/2012, 14:24
 
Fecha de Ingreso: junio-2012
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

gracias gracias.. voy a probarlo ahora mismo... (ya verás como pongo el código del reves.. tengo puntitos ya el los ojos jeje)
  #11 (permalink)  
Antiguo 25/08/2012, 16:56
 
Fecha de Ingreso: junio-2012
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

:(.. me sigue enviando al index
  #12 (permalink)  
Antiguo 25/08/2012, 18:50
 
Fecha de Ingreso: junio-2012
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con php cargado en un div de forma dinámica con jquery

...he conseguido que me carge en el div....PEROOOOOO....

me funciona solo en el chrome en ie de momento no (aunque igual se le ha ido temporalmente... ..) en fin... y lo que me pasa es que siempre me sale mensaje enviado, cuando no me lo esta enviando (trabajo en local, y no lo he configurado para mandar con la funcion mail()...

Dejo los codigos.. si algún alma muy caritativa los ve y me orienta un poco donde puede estar el fallo... no veais como lo agradeceria.. de verdad que si...

codigo del formulario (correo.php)

Código HTML:
<html>
	<head>
		<title>Contacto</title>
		<link rel='stylesheet' href='css/estilos.css'>
		<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
		<script type="text/javascript">  
		$(document).ready(function (){
		  var emailreg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;	
	$(".boton").click(function(){ 
	        var nombre = $(".nombre").val();
			email = $(".email").val();
			asunto = $(".asunto").val();
			mensaje = $(".mensaje").val();
		$(".error").fadeOut().remove();
		
        if ($(".nombre").val() == "") {  
			$(".nombre").focus().after('<span class="error">Ingrese su nombre</span>');  
			return false;  
		}  
        if ($(".email").val() == "" || !emailreg.test($(".email").val())) {
			$(".email").focus().after('<span class="error">Ingrese un email correcto</span>');  
			return false;  
		}  
        if ($(".asunto").val() == "") {  
			alert("estoy en asunto"); 
			$(".asunto").focus().after('<span class="error">Ingrese un asunto</span>'); 
			return false;  
		}  
        if ($(".mensaje").val() == "") {  
			$(".mensaje").focus().after('<span class="error">Ingrese un mensaje</span>');   
			return false; 
		}else{
		   alert( "dentro");
		  var datos = '$nombre='+ nombre + 
						'&email=' + email + 
						'&telefono=' + telefono + 
						'&mensaje=' + mensaje;
		      $.ajax({
			        type: "POST",
				    url: "proceso.php",
					data: datos,
	    		    success: function() {
					
	      			$('#formu332').text('Mensaje enviado!').addClass('msg_ok').animate({ 'right' : '130px' }, 300);	
	    		},
				error: function() {
					
	      			$('#formu332').text('Hubo un error!').addClass('msg_error').animate({ 'right' : '130px' }, 300);					
				}
	   		});
	 		return false;	
		}
	});
});
			</script>
			
	</head>
	<body>
	
	<div id="formu332">
		<form  method='POST' action='correo.php'>
			<div><label>Tu Nombre:</label><input type='text' class='nombre' name='nombre' value='<?php echo $_POST['nombre']; ?>'><?php echo $error1 ?></div>
			<div><label>Tu Email:</label><input type='text' class='email' name='email' value='<?php echo $_POST['email']; ?>'><?php echo $error2 ?></div>
			<div><label>Asunto:</label><input type='text' class='asunto' name='asunto' value='<?php echo $_POST['asunto']; ?>'><?php echo $error3 ?></div>
			<div><label>Mensaje:</label><textarea rows='6' class='mensaje' name='mensaje'><?php echo $_POST['mensaje']; ?></textarea><?php echo $error4 ?></div>
			<div><input type='submit' value='Envia Mensaje' class='boton' name='boton'></div>
			<?php echo $result; ?>
			
		</form>
		</div>
	</body>
</html> 

Este es el codigo de proceso.php:

Código HTML:
<?php
// Guardar los datos recibidos en variables:
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto'];
$mensaje = $_POST['mensaje'];
// Definir el correo de destino:
$dest = "[email protected]"; 
 
// Estas son cabeceras que se usan para evitar que el correo llegue a SPAM:
$headers = "From: $nombre $email\r\n";
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 
// Aqui definimos el asunto y armamos el cuerpo del mensaje
$asunto = "Contacto";
$cuerpo = "<strong>Nombre:</strong> ".$nombre."<br>";
$cuerpo .= "<strong>Email:</strong> ".$email."<br>";
$cuerpo .= "<strong>Asunto:</strong> ".$asunto."<br>";
$cuerpo .= "<strong>Mensaje:</strong> ".$mensaje;
 
// Esta es una pequena validación, que solo envie el correo si todas las variables tiene algo de contenido:
if($nombre != '' && $email != '' && $asunto != '' && $mensaje != ''){
    mail($dest,$asunto,$cuerpo,$headers); //ENVIAR!
}
?> 

le voy dando tantas vueltas al código que lo estaré estropeando mas... estoy escribiendo a la vez que le doy vueltas al código.. y lo que habia conseguido (que me cargase en el div ya no lo hace.... )

Si se os ocurre algo.. lo agradeceria mucho de verdad..

muchas gracias

Etiquetas: cargado, php, formulario
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 20:40.