0

Здраствуйте, коллеги. Только изучаю разработку и столкнулась с проблемой. Делала по примеру, по которому все работало ранее, но теперь возникают ошибки. Данные не передаются в БД.

Суть задания: нужно создать регистрацию на главной странице на php c MVC и ООП.

Буду благодарна, если подскажите в чем дело.

Файл views/home/index.php

    <div class="main">
    &lt;div class=&quot;container main&quot;&gt;
    &lt;h1&gt;Сокра.тим&lt;/h1&gt;
    &lt;p&gt;Вам нужно сократить ссылку? Прежде чем это сделать зарегистрируйтесь на сайте&lt;/p&gt;
    &lt;form action=&quot;/&quot; method=&quot;post&quot; class=&quot;form-control&quot;&gt;
        &lt;input type=&quot;email&quot; name=&quot;email&quot; placeholder=&quot;Введите email&quot; value=&quot;&lt;?=$_POST['email']?&gt;&quot;&gt;&lt;br&gt;
        &lt;input type=&quot;text&quot; name=&quot;login&quot; placeholder=&quot;Введите логин&quot; value=&quot;&lt;?=$_POST['login']?&gt;&quot;&gt;&lt;br&gt;
        &lt;input type=&quot;password&quot; name=&quot;pass&quot; placeholder=&quot;Введите пароль&quot; value=&quot;&lt;?=$_POST['pass']?&gt;&quot;&gt;
        &lt;div class=&quot;error&quot;&gt;&lt;?=$data['message']?&gt;&lt;/div&gt;
        &lt;button class=&quot;btn&quot; id=&quot;send&quot;&gt;Зарегистрироваться&lt;/button&gt;
        &lt;p&gt;Есть аккаунт? Тогда вы можете &lt;a href=&quot;/user/auth&quot;&gt;авторизоваться&lt;/a&gt;&lt;/p&gt;
    &lt;/form&gt;
    &lt;/div&gt; 
    &lt;?php print_r($_POST['email']); ?&gt;

&lt;/div&gt;

Файл controller/User.php

<?php
    class User extends Controller {
        public function reg() {
        $data = [];
        if(isset($_POST['email'])) {
            $user = $this-&gt;model('UserModel');
            $user-&gt;setData($_POST['email'], $_POST['login'], $_POST['pass']);

            $isValid = $user-&gt;validForm();
            if($isValid == &quot;Верно&quot;){
                $user-&gt;addUser();
                print_r($_POST['email']);}
            else
                $data['message'] = $isValid;
        }

        $this-&gt;view('/', $data);

    }

Файл models/DB.php

<?php
    class DB {
        private static $_db = null;
    public static function getInstence() {
        if(self::$_db == null)
            self::$_db = new PDO('mysql:host=localhost;dbname=diplome;', 'root', 'root');

        return self::$_db;

    }

    private function __construct() {}
    private function __clone() {}
    private function __wakeup() {}

}

Файл models/UserModel.php

    require 'DB.php';
class UserModel {
    private $email;
    private $login;
    private $pass;

    private $_db = null;

    public function __construct() {
        $this-&gt;_db = DB::getInstence();
    }

    public function setData($email, $login, $pass) {
        $this-&gt;email = $email;
        $this-&gt;login = $login;
        $this-&gt;pass = $pass;
    }

    public function validForm() {

        $result = $this-&gt;_db-&gt;query(&quot;SELECT * FROM `users` WHERE `login` = ' $this-&gt;login'&quot;);
        //$result = $this-&gt;_db-&gt;query(&quot;SELECT COUNT(`id`) AS `count` FROM `users` WHERE `name` = &quot;. $this-&gt;_db-&gt;quote($this-&gt;login) );
         $user = $result-&gt;fetch(PDO::FETCH_ASSOC);

        if(strlen($this-&gt;email) &lt; 3)
            return &quot;Email слишком короткий&quot;;
        else if($user['count'] != 0) 
            return &quot;Пользователь с таким логином уже существует&quot;;
        else if(strlen($this-&gt;pass) &lt; 3)
            return &quot;Пароль не менее 3 символов&quot;;
        else
            return &quot;Верно&quot;;
    }

    public function addUser() {
        $sql = 'INSERT INTO `users`(email, login, pass) VALUES(:email, :login, :pass)';
        $query = $this-&gt;_db-&gt;prepare($sql);

        $pass = password_hash($this-&gt;pass, PASSWORD_DEFAULT);
        $query-&gt;execute(['email' =&gt; $this-&gt;email, 'login' =&gt; $this-&gt;login, 'pass' =&gt; $pass]);

        $this-&gt;setAuth($this-&gt;login);
    }

    public function getUser() {
        $login = $_COOKIE['login'];
        $result = $this-&gt;_db-&gt;query(&quot;SELECT * FROM `users` WHERE `login` = '$this-&gt;login'&quot;);
        return $result-&gt;fetch(PDO::FETCH_ASSOC);
    }

BlaFla
  • 1
  • 1
  • 1
    Предполагается, что коллеги обладают телепатией и угадывают ошибки, не запуская код? – u_mulder Jun 06 '23 at 09:27
  • Что вы имели ввиду? – BlaFla Jun 06 '23 at 09:32
  • 1
    "возникают ошибки" У ошибок есть тексты? – u_mulder Jun 06 '23 at 09:34
  • У ошибки нет текста. Она заключается в том, что данные не передаются в базу данных. – BlaFla Jun 06 '23 at 09:35
  • 1
    Тогда изучай методы в этом вопросе ^ – u_mulder Jun 06 '23 at 09:42
  • Если используете MVC значит <form action="/" method="post" class="form-control"> - должен быть какой-то action для обработки данных формы, сомнительно что это "текущая страница" (/) а так же, для отправки формы кнопка <button class="btn" id="send">Зарегистрироваться</button> должны быть type="submit" – InDevX Jun 06 '23 at 09:42
  • скорее всего action в форме неправильный.... сейчас он ведёт на корень сайта, а должен на метод контроллера – Алексей Шиманский Jun 06 '23 at 11:03
  • Сезон дипломов на SO открыт) – lezhni Jun 06 '23 at 12:35

0 Answers0