@bitande
PHP

Почему при добавлении записи в БД запись добавляется три раза?

Пытаюсь сделать регистрацию. Почему-то при отправке формы, запись добавляется не один раз, а три. Думаю проблема в роутере, так как он выводит сообщение три раза, но не могу понять в чем проблема. В контроллере просто создается объект Register, метод регистрации, и подключается шаблон.

И mysql почему то медленно грузится, из-за pdo, xdebug ? после того как включил xdebug все стало работать как-то медленней.

Код класса регистрации

<?php

class Register extends Db{

    protected $table = 'user';

    private $name;
    private $login;
    private $email;
    private $password;
    private $submit;

    public function __construct() {
        $this->name = $_POST['name'];
        $this->login = $_POST['login'];
        $this->email = $_POST['email'];
        $this->password = password_hash($_POST['password'], PASSWORD_BCRYPT);
        $this->submit = $_POST['submit'];

        parent::__construct();
    }

    public function register() {

        if(isset($this->submit)) {

            $query = "INSERT INTO `$this->table` (`name`, `login`, `email`, `pass`) VALUES(:name, :login, :email, :password)";
            $stmt = $this->db->prepare($query);
            $stmt->bindParam(':name', $this->name);
            $stmt->bindParam(':login', $this->login);
            $stmt->bindParam(':email', $this->email);
            $stmt->bindParam(':password', $this->password);
            $stmt->execute();

            
        } else {
            echo 'error';
        }

    }

}


Роутер
class Router {

    private $routes;

    public function __construct() {

        $this->routes = include(ROOT.'/components/routes.php');

    }

    public function start()
    {

        $url = $_SERVER['REQUEST_URI']; // get the current url

        foreach ($this->routes as $pattern => $value) {
            if (preg_match("~$pattern~", $url)) {
                if (array_key_exists(trim($url, '/'), $this->routes) || is_int($url)) {

                    $path = explode('/', $this->routes[trim($url, '/')]); // thim(url) it is the key for array
                    $controller = $path[0];
                    $action = $path[1];

                    //view action and controller name
                    echo $controller . '<br>';
                    echo $action . '<br>';
                    echo "<hr>";

                    $obj = new $path[0];
                    $obj->$action;

                    call_user_func([$obj, $action]);


                } else {
                    $postId = explode('/', $url);
                    $id = $postId[1];

                    $obj = new NewsController();
                    $obj->actionOne($id);
                }
            }
        }
    }
}
  • Вопрос задан
  • 243 просмотра
Пригласить эксперта
Ответы на вопрос 1
SagePtr
@SagePtr
Еда - это святое
Подозреваю, что после совпадения любого шаблона все последующие шаблоны проверять и дёргать не надо. Не знаю, что у вас там в ROOT.'/components/routes.php', но вполне вероятно, что запрос попадает сразу под несколько шаблонов и для каждого совпадения создаётся и дёргается отдельный экземпляр контроллера.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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