Estoy intentando mediante Ajax
mostrar si el usuario existe en la base de datos para no tener dos usuarios registrados con el mismo nombre. Lo que hago es mediante el evento change
de jQuery
mostrar con un span
si existe o no el usuario en la base de datos.
El problema es que todo el tiempo me devuelve que el usuario ya existe en la base de datos aún no estando registrado.
HTML
<form method="post" onsubmit="return validateRegister()">
<label for="user_register">Usuario<span></span></label><br />
<input type="text" placeholder="Maximo 6 caracteres" name="user_register" id="user_register" required><br /><br />
<label for="pass_register">Password</label><br />
<input type="password" placeholder="Minimo 6 caracteres" name="pass_register" id="pass_register" required><br /><br />
<label for="email_register">E-mail</label><br />
<input type="text" placeholder="E-mail" name="email_register" id="email_register" required><br />
<p><input type="checkbox" id="terms_register"><a href="#">Acepta condiciones</a></p>
<input type="submit" value="Enviar">
</form>
JavaScript
/*===============================================
Validar Usuario Existente con Ajax
===============================================*/
$('#user_register').change(function() {
var user = $("#user_register").val();
var datas = new FormData();
datas.append("validateuser", user);
$.ajax({
url: "views/modules/ajax.php",
method: "POST",
data: datas,
cache: false,
contentType: false,
processData: false,
success: function(query) {
if(query == 0) {
$("label[for='user_register'] span").html('<p>Este usuario ya existe en la base de datos</p>');
} else {
$("label[for='user_register'] span").html('No detecto usuario registrado');
}
}
});
});
Ajax
require_once "../../controllers/controller.php";
require_once "../../models/crud.php";
class Ajax {
public $validateuser;
public function validateUserAjax() {
$data = $this->validateuser;
$return = MvcController::validateUserController($data);
echo $return;
}
}
$a = new Ajax();
$a->validateuser = $_POST['validateuser'];
$a->validateUserAjax();
Controller
# Validar el usuario que ha seleccionado el usuario y comprobar que no exista ya en la base de datos
# -----------------------------------------------
public static function validateUserController($user) {
$datacontroller = $user;
$return = Data::validateUserModel($datacontroller, "usuarios");
if(count($return['user'] > 0)) {
echo 0;
} else {
echo 1;
}
}
Model
# Validar el usuario y que no haya dos repetidos
public static function validateUserModel($datamodel, $table) {
$sql = "SELECT user FROM $table WHERE user = :user";
$stmt = Conection::connect()->prepare($sql);
$stmt->bindParam(':user', $datamodel, PDO::PARAM_STR);
$stmt->execute();
return $stmt->fetch();
$stmt->close();
}
¿Qué he intentado?
He cambiado el método del controlador validateUserController
de estático a no estático y lo único que he conseguido es que cambie el valor de 0 a 1 y por lo tanto que cambie el mensaje que se muestra en el formulario. Pero en cualquier caso no está funcionando bien.
Si pongo un usuario que existe muestra que el usuario existe, pero si pongo un usuario que no existe, entonces muestra que el usuario existe. He revisado una y otra vez la query no veo nada raro.
La tabla en MySQL
es la siguiente
Tabla: usuarios
Campo: user, tipo VARCHAR
¿Qué estoy haciendo mal?