Moje ostatnie pytanie nie było jasne, dlatego zamieszczam tutaj wszystkie wyjaśnienia. W poniższym kodzie chcę wyświetlać komunikaty o błędach za pomocą jQuery w przypadku błędów formularza rejestracji. Problem polega na tym, że ten kod po prostu wstawia dane do bazy danych bez sprawdzania błędów lub pokazując komunikat o błędzie i przekierowuje do strony logowania. Więc gdzie idę źle?Użyj jQuery, aby wyświetlać błędy podczas przesyłania formularza rejestracyjnego.
Teraz zaktualizowaniu mojego kodu, dane te nie zostały złożone, chyba że wszystkie warunki są spełnione, jak chciałem, ale błędy są wyświetlane po kliknięciu przycisku Prześlij, register.php
strona jest przeładowana, gdzie teraz wyświetla tylko komunikaty o błędach i nie formularz rejestracyjny tak jak nie ma zastosowania jQuery. Nie chcę, aby strona została ponownie załadowana. Powinien pojawić się komunikat o błędzie.
<?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
kod
$(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");
});
});
może być lepiej przy użyciu biblioteki walidacji i unikanie kłopotów, .eg http://jqueryvalidation.org (proste) lub http://parsleyjs.org (nieco bardziej zaawansowany) –
Można grupa twoje 'isset()' i '$ foo! = ''' if instrukcje na jednej linii. Dodatkowo, niektóre z twoich błędów php sprawdzają się dziwnie. Sprawdzanie, czy wartości są ustawione i czy nie są puste, to zgłaszanie i błąd, jeśli to prawda. Na pewno chcesz zgłosić błąd tylko wtedy, gdy wartości nie są ustawione lub * są * równe pustemu ciągowi znaków ... Na koniec, nie robisz nic ze sprawdzaniem błędów w php, aby zatrzymać wstawianie bazy danych, co spowodowało, że pomyślałeś nie wstawiłoby się do bazy danych? – Novocaine
Gdzie umieściłeś logikę do sprawdzania formularza. Musisz umieścić go przed $ .post (metoda 0. Ale jaki jest warunek if po przesłaniu formularza zakończony sukcesem? –