@Lavrov95

Почему не работает сообщение и страница перезагружается?

index.php

<?php include 'User.php'; ?>

    <form method="post" class="mt-2">
        <div class="form-group">
            <input type="text" name="name" class="form-control" placeholder="Name">
        </div>
        <div class="form-group">
            <input type="text" name="surname" class="form-control" placeholder="Surname">
        </div>
        <div class="form-group">
            <input type="email" name="email" class="form-control" aria-describedby="emailHelp" placeholder="Email">
        </div>
        <div class="form-group">
            <input type="text" name="phone" class="form-control" placeholder="Phone Number">
        </div>
        <div class="form-group">
            <input type="password" name="password" class="form-control" placeholder="Password">
        </div>
        <div class="form-group">
            <input type="password" name="reTypePassword" class="form-control" placeholder="Re-Type Password">
        </div>
        <button id="sign-up" type="submit" name="signUp" class="btn btn-primary btn-block">Sign Up</button>
    </form>
    
    <script>
        $(document).on('click', '#sign-up', function(){
            {
                $.ajax({
                    url:<?php
                    $user = new User();
                    if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['signUp'])) {
                        $userRegistration = $user->userRegistration($_POST);
                    }
                    ?>,
                   
                    method:"POST",
                    dataType:"text",
                    success:function(){
                        alert(<?= $userRegistration ?>);
                    }
                });
            }
        });
    </script>


User.php
<?php
include 'Database.php';

include_once 'Session.php';

class User
{
    private $db;

    public function __construct()
    {
        $this->db = new Database();
    }

    public function userRegistration($data)
    {
        $name = htmlspecialchars($data['name']);
        $surname = htmlspecialchars($data['surname']);
        $email = htmlspecialchars($data['email']);
        $password = htmlspecialchars($data['password']);
        $reTypePassword = htmlspecialchars($data['reTypePassword']);
        $phone = htmlspecialchars($data['phone']);
        $chk_email = $this->emailCheck($email);
        
        if ($name == "" || $surname == "" || $email == "" || $password == "" || $phone == "") {
            $message = "<div class='alert alert-danger'>բոլոր դաշտերը պետք է լինեն լրացված:</div>";
            return $message;
        }

        if (strlen($surname) < 3) {
            $message = "<div class='alert alert-danger'>օգտագործողի անունը պետք է լինի բաղկացած առնվազն 3 տառից:</div>";
            return $message;
        } elseif (preg_match('/[^a-z0-9_-]+/i', $surname)) {
            $message = "<div class='alert alert-danger'>Օգտագործողի անունը պետք է պարունակի միայն տառեր, թվեր կամ գիծ:</div>";
            return $message;
        }

        if(!is_numeric($phone)){
            $message = "<div class='alert alert-danger'>Հեռախոսահմարը պետք է պարունակի պարունակի միայն թվեր:</div>";
            return $message;
        }

        if($password !== $reTypePassword){
            $message = "<div class='alert alert-danger'>Գաղտնաբարերը չեն համընկնում:</div>";
            return $message;
        }

        if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
            $message = "<div class='alert alert-danger'>Էլեկտրոնային հացեն հիմնավոր չէ:</div>";
            return $message;
        }
        if ($chk_email == true) {
            $message = "<div class='alert alert-danger'>Էլեկտրոնային հացեն արդեն զբաղված է:</div>";
            return $message;
        }

        $sql = "INSERT INTO users(name, surname, email, password, phone) VALUES(:name, :surname, :email, :password, :phone)";
        $query = $this->db->pdo->prepare($sql);
        $query->bindValue(':name', $name);
        $query->bindValue(':surname', $surname);
        $query->bindValue(':email', $email);
        $query->bindValue(':password', $password);
        $query->bindValue(':phone', $phone);
        $result = $query->execute();

        if ($result) {
            $message = "<div class='alert alert-success'>Շնորհակալություն, դուք գրանցվեցիք Color School կայքում:</div>";
            return $message;
        } else {
            $message = "<div class='alert alert-danger'>կներեք, առաջացավ խնդիրներ ձեր տվյալները տեղադրելուց:</div>";
            return $message;
        }
    }



    public function emailCheck($email)
    {
        $sql = "SELECT email FROM users WHERE email = :email";
        $query = $this->db->pdo->prepare($sql);
        $query->bindValue(':email', $email);
        $query->execute();
        if ($query->rowCount() > 0) {
            return true;
        } else {
            return false;
        }
    }
}
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 3
@BorisKorobkov Куратор тега PHP
Web developer
Почему ... страница перезагружается?

Потому что срабатывает submit формы.
Если хотите ее обрабатывать с помощью js - https://developer.mozilla.org/ru/docs/Web/API/Even...

P.S. Правильнее ловить не только клик на кнопку, но и Enter в инпутах. То есть надо ловить form.submit, а не button.click.
Ответ написан
Комментировать
OKyJIucT
@OKyJIucT
Sunshine reggae
У вас в параметре url аякса ничего не возвращается из PHP. Указывайте там URL, куда должен отправляться запрос. Что-то типа

url: 'user/emailCheck',

ну или как там у вас URL формируется, из этого кода непонятно.

И в методе emailCheck вам скорее всего надо сделать

if ($query->rowCount() > 0) {
            echo json_encode(['status' => 'error']);
        } else {
            echo json_encode(['status' => 'success']);
        }


и в ajax проверять ответ вот так

success:function(answer){
    if(answer.status == 'success') alert('Логин свободен для регистрации');
    else alert('Данный логин уже занят');
}


и в параметр data надо передавать значение поля email, а не то, что вы пытаетесь передать.
Ответ написан
Комментировать
AK-VoronM
@AK-VoronM
"Мало-мало программист"
Господа программисты, что вы прям накинулись на человека?
Добавь в конце JS функции return false; или preventDefault(); чтобы отменить отправку формы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы