La mia ultima domanda non era chiara, quindi la sto postando con tutti i chiarimenti qui. Nel codice qui sotto voglio mostrare i messaggi di errore usando jQuery per gli errori del modulo di registrazione. Il problema qui è che questo codice inserisce semplicemente i dati nel database senza verificare errori o mostrando messaggi di errore e reindirizzamenti alla pagina di accesso. Quindi dove sto andando male?Utilizzare jQuery per mostrare errori durante l'invio del modulo di registrazione
ora ho aggiornato il mio codice, i dati non è sottoposto a meno che tutte le condizioni sono soddisfatte come avrei voluto, ma gli errori vengono visualizzati sul clic sul pulsante di invio, register.php
pagina viene ricaricata dove ora vengono visualizzati solo i messaggi di errore e nessuna forma di registrazione come se non ci fosse jQuery. Non voglio che la pagina sia ricaricata Dovrebbe mostrare i messaggi di errore proprio lì.
<?php
if(isset($_POST['reg'])){
$fn = ucfirst($_POST['fname']);
$ln = ucfirst($_POST['lname']);
$un = $_POST['username'];
$em = $_POST['email'];
$pswd = $_POST['password'];
$pswd2 = $_POST['password2'];
$sql=$db->prepare("SELECT username FROM users WHERE username=:username");
$sql->execute(array(':username'=>$un));
$row = $sql->fetch(PDO::FETCH_ASSOC);
$db_username = $row['username'];
$usernames = $db_username;
$data = array();
if(isset($fn) && isset($ln)) {
if($fn != "" && $ln!="" && $fn == $ln) {
$data["flname"] = "cntbempty";
}
}
if(isset($un)) {
if $un == $usernames) {
$data["username"] = "inuse";
}
}
if(isset($pswd) && isset($pswd2)) {
if($pswd2 != "" && $pswd != $pswd2) {
$data["password"] = "missmatch";
}
}
if(isset($em)) {
if($em != "" && !preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST["email"])) {
$data["email"] = "notvalid";
}
}
if(!empty($data))
{
echo json_encode($data);
die;
}
else{
$pswd = password_hash($pswd, PASSWORD_DEFAULT);
$pswd2 = password_hash($pswd2, PASSWORD_DEFAULT);
$stmt = $db->prepare("INSERT INTO users (username,first_name,last_name,email,password,password2,) VALUES (:username,:first_name,:last_name,:email,:password,:password2,)");
$stmt->execute(array(':username'=>$un,':first_name'=>$fn,':last_name'=>$ln,':email'=>$em,':password'=>$pswd,':password2'=>$pswd2));
}
if ($stmt->rowCount() == 1) {
header("Location: login.php");
}
else {
echo "error";
}
}
?>
jquery
codice
$(document).ready(function(){
$("form.register").change(function() {
$.post("register.php", $("form.register").serialize(), function(data) {
if(data.flname == "cntbempty")
$("p#name_error").slideDown();
else
$("p#name_error").hide();
if(data.username == "inuse")
$("p#username_error").slideDown();
else
$("p#username_error").hide();
if(data.password == "missmatch")
$("p#password_error").slideDown();
else
$("p#password_error").hide();
if(data.email == "notvalid")
$("p#email_error").slideDown();
else
$("p#email_error").hide();
}, "json");
});
});
Si potrebbe essere meglio utilizzare una libreria di convalida ed evitare il fastidio, .EG http://jqueryvalidation.org (semplice) o http://parsleyjs.org (un po 'più avanzato) –
È possibile raggruppare il tuo 'isset()' e '$ foo! = ''' se le istruzioni su una riga. Inoltre, alcuni dei tuoi errori di controllo php sembrano strani. Il tuo controllo se i valori sono impostati e se non sono vuoti, allora stai segnalando e errore se è vero. Sicuramente vuoi solo segnalare l'errore se i valori non sono impostati o * sono * uguale a una stringa vuota ... Infine, non stai facendo nulla con il tuo errore di controllo in php per fermare l'inserimento nel database, cosa ti ha fatto pensare non si inserirà nel database? – Novocaine
Dove hai messo la logica per la convalida del modulo. Devi metterlo prima di $ .post (metodo 0. Ma quali sono le condizioni if dopo la presentazione del modulo con successo? –