Foros del Web » Programando para Internet » Javascript » Frameworks JS »

problemas con el formulario....

Estas en el tema de problemas con el formulario.... en el foro de Frameworks JS en Foros del Web. Buenas, es la segunda vez que hago algo con ajax... y me está volviendo loco. Tengo un formulario de contacto bastante simple, pide 4 datos ...
  #1 (permalink)  
Antiguo 27/08/2010, 14:56
FDA
 
Fecha de Ingreso: agosto-2010
Mensajes: 99
Antigüedad: 14 años, 3 meses
Puntos: 2
problemas con el formulario....

Buenas, es la segunda vez que hago algo con ajax... y me está volviendo loco.

Tengo un formulario de contacto bastante simple, pide 4 datos y manda los campos aun mail que le especifico en el archivo .php

Con Safari no hace nada (bueno si, me pone los _POST en la URL), ademas parece como si no le gustara el document.getElementById...

Con Firefox si que parece k funciona, solo que no envia el mail.

Llevo un rato buscando por todas partes (tanto en el codigo como por internet) y no consigo ver una solucion. De hecho ese codigo està reciclado de otra web, aunk cambiando algunas cosas que no deberian molestar....

Mi codigo:

HTML:
Código:
<div id="caixa_contacte">
			<div id="tancar_contacte"><a href="#">Tancar [X]</a></div>	
			<h1>Contacte</h1>
			<p>
			<form onsubmit="enviarMail(); return false" action="" name="form_contacte">
           
   <p>Nom: <input name="name" type="text" size="16" maxlength="16" /> </p>
   <p>Assumpte: <input name="subject" type="text" id="subject"size="32" maxlength="32" /></p>
   <p>e-mail: <input name="mail" type="text" id="mail" size="32" maxlength="32" /> </p>
   <p>Missatge: <br /> <textarea name="missatge" cols="40" rows="24" id="missatge"></textarea></p>
   <p><input type="submit" value="Enviar" />
	</form></p></p>
	<div id="resultado_mensaje" style="width:300px; height:30px; border:1px solid gray;">Resultado aqui.</div>
			
								
    </div>
ajax:
Código:
function nuevoAjax(){
        var xmlhttp=false;
        try{
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
                try {
                        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }catch(E){
                        xmlhttp = false;
                }
        }       
        if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
                xmlhttp = new XMLHttpRequest();
        }
        return xmlhttp;
}
function enviarMail(){
       c = document.getElementById('resultado_mensaje');
   
       //variable=documenet.nombre_del_form.nombre_del_control.value
       name=document.form_contacte.name.value;
       subject=document.form_contacte.subject.value;
       mail=document.form_contacte.mail.value;
       missatge=document.form_contacte.missatge.value;
   
       ajax=nuevoAjax();
       c.innerHTML = '<p style="text-align:center;"><img src="esperando.gif"/></p>'; 
       ajax.open("POST", "sendform.php",true);
       ajax.onreadystatechange=function() {
       if (ajax.readyState==4) {
       c.innerHTML = ajax.responseText
       }
       borrarCampos()
       }
       ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
       ajax.send("nom="+name+"&subject="+subject+"&mail="+mail+"&missatge="+missatge)
}
function borrarCampos(){
       document.form_contacte.name.value="";
       document.form_contacte.subject.value="";
       document.form_contacte.mail.value="";
	   document.form_contacte.missatge.value="";
       document.form_contacte.name.focus();
}
Y por ultimo el php:
Código:
<?php
        $name=$_POST['name'];
        $subject=$_POST['subject'];
        $mail=$_POST['mail'];
        $missatge=$_POST['missatge'];
        $header = 'From: ' . $mail . " \r\n";
		$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
		$header .= "Mime-Version: 1.0 \r\n";
		$header .= "Content-Type: text/plain";

		//Estoy recibiendo el formulario, compongo el cuerpo
        $missatge = "Missatge enviat per " . $name . ", amb el tema " . $subject . " \r\n";
		$missatge .= "El seu e-mail es: " . $mail . " \r\n";
		$missatge .= "Missatge: " . $_POST['missatge'] . " \r\n";
		$missatge .= "Enviat el " . date('d/m/Y', time());
        //mando el correo...
		$pera = '[email protected]'; //la direccion que tengo en el script funciona, comprobado.
		
		mail($pera, $subject, utf8_decode($missatge), $header);
        //doy las gracias por el envio
        echo "<div style="background-color:green;color:white;padding:4px;text-align:center;">Gracias por rellenar el formulario. Se ha enviado correctamente. Enviale a otros contactos</div>";
?>
Tambien aceptaria amablemente cualquier referencia a alguna pàgina con un script que pueda adaptar y funcione....

grácias de antemano.
  #2 (permalink)  
Antiguo 27/08/2010, 16:01
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: problemas con el formulario....

Has mirado la consola de errores de javascript? Estás depurando el código de algún modo? Conoces si se envían o reciben los datos? ¿Qué es lo que has modificado del código reciclado "que no debería molestar"? Tu servidor acepta envío de emails mediante php? ¿Puede ser cualquier otra cosa?

Y otra cosa, esto está mal:
Código PHP:
Ver original
  1. $name=$_POST['name'];

Debería ser:
Código PHP:
Ver original
  1. $name=$_POST['nom'];

Según los parámetros que le envías por ajax.

Y esta función:
Código Javascript:
Ver original
  1. function borrarCampos(){
  2.        document.form_contacte.name.value="";
  3.        document.form_contacte.subject.value="";
  4.        document.form_contacte.mail.value="";
  5.        document.form_contacte.missatge.value="";
  6.        document.form_contacte.name.focus();
  7. }

La puedes optimizar:
Código Javascript:
Ver original
  1. function borrarCampos(){
  2.        document.form_contacte.reset();
  3.        document.form_contacte.name.focus();
  4. }

Y también es posible que name esté interfiriendo como palabra reservada de javascript.
Por el resto no tengo más ideas.

Un saludo
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #3 (permalink)  
Antiguo 27/08/2010, 19:00
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 16 años, 5 meses
Puntos: 0
Sonrisa Q tal

algo rapido, para q sepas cual es exactamente el error, si usas firefox instalate el firebug(una extension para debug de javascipt y ajax), lo habilitas y cualquier error q surga te lo mostrara.
  #4 (permalink)  
Antiguo 28/08/2010, 04:38
FDA
 
Fecha de Ingreso: agosto-2010
Mensajes: 99
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: problemas con el formulario....

bieeeen!!!! he corregido eso del name, no creo que tenga conflictos con palabras reservadas pq lo usaba en otro script hace tiempo, pero por si acaso las he cambiado todas a nom y listos.

Ahora lo que me da es otro problema.
Cuando en el mensaje le entras algun salto de linea me devuelve este warning:
Warning: mail() [function.mail]: SMTP server response: 451 See http://pobox.com/~djb/docs/smtplf.html. in D:\Hosting\6253971\html\sendform.php on line 19

Por lo que he visto eso pasa en servidores windows (si, no lo elegí yo...) por poner el salto de linea como /n y no como /r/n, pero como puedo controlar eso dentro del textarea???

Por cierto, muchas grácias!!!
  #5 (permalink)  
Antiguo 28/08/2010, 05:58
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: problemas con el formulario....

Lo controlas luego. Es decir, cuando recojas los datos con php haces un str_replace()

Código PHP:
Ver original
  1. <?php
  2. $mensaje = str_replace("\n", "\r\n" , $_POST['mensaje']);

Otra opción es enviar el email en html en lugar de texto plano y reemplazarlos por <br>

Código PHP:
Ver original
  1. <?php
  2. $mensaje = str_replace("\r\n", "<br>" , $_POST['mensaje']);

Puedes hacer lo mismo con javascript si te apetece:

Código Javascript:
Ver original
  1. var campo = document.form.mensaje.value;
  2. campo = campo.replace("\r\n", "<br>");
ó
Código Javascript:
Ver original
  1. var campo = document.form.mensaje.value;
  2. campo = campo.replace(/^\r\n/g, "<br>");

Saludos
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #6 (permalink)  
Antiguo 28/08/2010, 07:21
FDA
 
Fecha de Ingreso: agosto-2010
Mensajes: 99
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: problemas con el formulario....

jajajaj vale, mira que era simple todo al fin i al cabo....

muchas gracias!!!, creo que poco a poco voy pillando ajax....

Etiquetas: ajax, 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 18:15.