Salve a tutti.
Sto realizzando un form di registrazione nel quale tramite AJAX voglio verificare che l'email inserita dall'utente non risulti già registrata.
Per farlo ho utilizzato i seguenti sorgenti:
All'interno del form:
codice:
<input type="email" name="email" pattern="[a-z0-9._-]+@[a-z0-9.-_]+\.[a-z]{2,3}$" title="Indirizzo email non valido." maxlength="255" onblur="emailGiaInUso(this.value);" required />
Script ajax
codice:
function emailGiaInUso(email)
{
function assegnaXMLHttpRequest()
{
var XHR = null, browserUtente = navigator.userAgent.toUpperCase();
if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object")
XHR = new XMLHttpRequest();
else if(window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0)
{
if(browserUtente.indexOf("MSIE 5") < 0)
XHR = new ActiveXObject("Msxml2.XMLHTTP");
else
XHR = new ActiveXObject("Microsoft.XMLHTTP");
}
return XHR;
}
myRequest = assegnaXMLHttpRequest();
if( myRequest )
{
myRequest.open("POST","email_esistente.php", true);
myRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded");
//myRequest.setRequestHeader("connection", "close");
alert("Readystate prima di send: " +myRequest.readyState);
alert("Status prima di send: " +myRequest.status);
myRequest.send("email="+email); //fa passare $_POST['regione']=valore al file carica_regione.php
alert("Readystate post send: " +myRequest.readyState);
alert("Status post send: " +myRequest.status);
if(myRequest.readyState==4 && myRequest.status==200)
{
/* CODICE ANCORA DA SCRIVERE */
}
}
}
Script email_esistente.php che interroga il db
codice:
<?php
if( isset($_POST['email']) )
{
include_once("db.php");
$pst = $dbCon->prepare("SELECT * FROM utenti WHERE email = ?");
// variabili per la sostituzione dei placeholder
$pst->bind_param('s', $email);
// variabili per l’esecuzione
$email = $_POST['email'];
// esecuzione dell’istruzione
$pst->execute();
// chiusura dello statement
$pst->close();
}
?>
Il problema nasce dal fatto che la richiesta, anche dopo il send, resti in readystate 1 (stato di open) e in status 0, stato che evidentemente segnala un qualche errore a cui non riesco a risalire.