Necesitas realizar una petición asíncrona (Ajax).
La comprobación del dato puede realizarse ya sea mientras el usuario ingresa datos en la caja de texto, cuando pulse una tecla en particular (por ejemplo, la tecla ENTER), cuando pierda el enfoque (el cursor ya no parpadea en la caja de texto) o cuando se envían los datos para ser procesados (cuando pulsas el botón "Enviar")
Una de las formas que he visto que utilizan en muchas páginas y que es la que más me agrada es la de validar el dato cuando la caja de texto pierde el enfoque, indicando mediante un mensaje al costado de la caja que el dato se encuentra registrado o que aún no lo está.
Te mostraré un pequeño ejemplo con la forma que menciono.
Código HTML:
Ver original<form id = "datos" action = "registrar.php" method = "post"> <label for = "correo">Ingrese su correo electrónico para suscribirse a nuestras noticias:
</label> <input type = "email" name = "correo" id = "correo" required /> <input type = "submit" value = "Suscribirse" />
Código CSS:
Ver original.valid{
background: green;
}
.invalid{
background: red;
}
.valid, .invalid{
color: white;
}
Código Javascript
:
Ver originalvar form = document.querySelector("#datos"),
input = document.querySelector("#correo"),
span = document.querySelector("#mensaje"),
ajax, envio;
input.addEventListener("blur", function(){
ajax = new XMLHttpRequest();
ajax.open("GET", "comprobar.php?correo=" + this.value, true);
ajax.send();
ajax.addEventListener("load", function(){
if (this.status == 200){
if (this.responseText == "yes"){
span.innerHTML = "El correo electrónico ingresado ya está registrado. Ingrese otro.";
span.className = "invalid";
envio = false;
}
else{
span.innerHTML = "Continúe con el ingreso de datos.";
span.className = "valid";
envio = true;
}
}
}, false);
}, false);
form.addEventListener("submit", function(event){
event.preventDefault();
if (envio){
this.submit();
}
else{
alert("Debe de ingresar otro correo electrónico");
input.value = "";
input.focus();
}
}, false);
Código PHP:
Ver original$conexion = mysqli_connect('servidor', 'usuario_bd', 'clave_bd', 'nombre_bd');
$consulta = "SELECT correo FROM suscripciones WHERE correo = '$correo'";
El proceso es simple.
En el archivo HTML, hay un formulario que contiene a un campo de texto en el cual se ingresará el correo electrónico, además, hay un
<span>
en el cual se mostrará el mensaje del resultado de la validación. El
<label>
es solo para mostrar el texto que le indicará al usuario qué debe de ingresar en la caja de texto.
En la hoja de estilos, hay dos clases las cuales se aplicarán al
<span>
para cuando se le asigne la respuesta del proceso de validación.
En el archivo JavaScript, tomamos al formulario, la caja de texto y al
<span>
, además, declaramos dos variables que se utilizarán más adelante. Cuando se produzca el evento
blur
(cuando la caja de texto pierda el enfoque), se ejecutará una función en la cual realizaremos la petición asíncrona (Ajax). En dicha petición, envío el dato escrito en la caja de texto hacia el archivo que realizará la comprobación en la base de datos y una vez que se obtenga una respuesta, mostraremos un mensaje en el
<span>
indicando el resultado del proceso de validación y le aplicaremos una de las dos clases creadas en la hoja de estilos, pero además, estableceremos un valor en la variable
envio
para determinar si se realizará o no el envío de los datos.
En el archivo PHP, realizamos la conexión a la base de datos, limpiamos el dato recibido de posible contenido no deseado, elaboramos la consulta SQL y la ejecutamos. Con la función
mysqli_num_rows()
, obtenemos el total de resultados devueltos por la consulta a la base de datos y según sea dicha cantidad, imprimiremos un mensaje que será la respuesta a la petición realizada con Ajax.
Como
plus, cuando se produzca el evento
submit
en el formulario (cuando se envíen los datos a procesarse), cancelamos el envío y verificamos el valor de la variable
envio
para saber si el correo electrónico ingresado se encuentra o no registrado y, de acuerdo a este criterio, proceder a registrarlo o no.
NOTA: Para que no tengas problemas con la ejecución del código JavaScript, colócalo después de todos los elementos del documento, justo antes de la etiqueta
</body>
para que así pueda surtir efecto o, si deseas colocarlo en la cabecera del documento, ejecútalo dentro de esto:
Código Javascript
:
Ver originaldocument.addEventListener("DOMContentLoaded", function(){
/* Aquí va el código */
}, false);
Saludos