verán en mi web en la sección de opiniones se pueden subir opiniones e imágenes,
http://www.buzonxalapa.com/opiniones...ar_opinion.php
esto funciona bien en chrome pero en ie y mozilla pasa algo raro,
cuando capturo bien todo el form, incluyendo el captcha, si guarda la opinion,
pero si dejo el espacio vacio del captcha o lo pongo mal se queda la imagen de loading, es decir, se queda en el ajax.readyState 1
en cambio en chrome si me dice que el captcha esta mal.
aca esta el script ajax:
Código:
y el php que valida es este:function ajaxFunction(){ var xmlHttp; try{ xmlHttp=new XMLHttpRequest(); return xmlHttp; } catch (e){ try{ xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); return xmlHttp; } catch (e){ try{ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); return xmlHttp; } catch (e) { alert("Su navegador no soporta AJAX!"); return false; } } } } function procesar_opinion(){ //recibo variables var autor_opinion= document.getElementById('autor_opinion').value; var email_opinion= document.getElementById('email_opinion').value; var fecha_opinion= document.getElementById('fecha_opinion').value; //estas son las correspondientes al captcha var desafio = Recaptcha.get_challenge(); var solucion = Recaptcha.get_response(); var ajax; ajax= ajaxFunction(); ajax.open("GET", "procesar_opinion.php?recaptcha_challenge_field="+desafio+"&recaptcha_response_field="+solucion+"&autor_opinion="+autor_opinion+"&email_opinion="+email_opinion+"&fecha_opinion="+fecha_opinion, true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.onreadystatechange = function() { if (ajax.readyState == 1){ //si el captcha esta mal o vació de aquí no pasa (mozilla o ie) document.getElementById('form_opinion').innerHTML= "<center><img src='loader.gif' alt='Procesando'><br><br> Procesando opinión, espere por favor...</center>"; } if (ajax.readyState==4){ if(ajax.status==200){ var respuesta = ajax.responseText; //retorno incorrecto si el captcha es erroneo, aqui tambien puede estar el error, que no retorne bien esta variable en mozilla o ie if (respuesta.length == 0 || respuesta == null){ //si no hay respuesta error alert("Ocurrio un error en el envío, por favor contacte al administrador. Disculpe las Molestias"); } else{ if(respuesta=="incorrecto"){ //si el captacha esta mal el php devuelve incorrecto alert("Captcha incorrecto"); Recaptcha.reload(); } else{ //si todo salio bien $('#form_opinion').hide(1000); $('#uploadify').show(1000); } } } } ajax.send(null); }
Código PHP:
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_GET["recaptcha_challenge_field"],
$_GET["recaptcha_response_field"]);
if(!$resp->is_valid){
echo "incorrecto"; //si esta mal el captcha devuelve error
exit();
}
else{ //si no inserta a la bd
$autor_opinion=trim($_GET['autor_opinion']);
$email_opinion=trim($_GET['email_opinion']);
$fecha_opinion=trim($_GET['fecha_opinion']);
$sql_insert="Insert into opiniones (autor_op, email_op, fecha_op) values ('$autor_opinion', '$email_opinion', '$fecha_opinion')";
mysql_query($sql_insert) or die('Error en la inserción: '.mysql_error());
echo "ok"; //imprime ok para que no caiga en respuesta vacia y sea error
exit();
}
les agradezco sus observaciones