0 / 0 / 0
Регистрация: 03.01.2020
Сообщений: 5

Метод возвращает null

03.01.2020, 23:51. Показов 1173. Ответов 5
Метки php (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь сделать простую регистрацию, написал класс, знаю что говнокод, но всё же
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
 
namespace Model\Registration;
 
require_once 'Db.php';
use Model\Database\Db;
 
class Registration {
 
    public $connection;
 
    public function __construct() {
        $this->connection = Db::Connect();
    }
 
    public function Registr() {
        if(isset($_POST['btn'])) {
            if(isset($_POST['email']) && $_POST['login'] && $_POST['password'] !== "") {
                $dbh = $this->connection;
                $sql = 'INSERT INTO users(email, login, password) VALUES (:email, :login, :password)';
                $sqlParams = [':email' => $_POST['email'], ':login' => $_POST['login'], ':password' => $_POST['password']];
                $sth = $dbh->prepare($sql);
                $result = $sth->execute($sqlParams);
                header('Location: /');
            } else {
                echo 'Заполните все поля <a href="../View/registration.php"><b>Registration</b></a>';
            }
        }
    }
 
}
Есть у меня так же, что то типа контроллера, из которого я пытаюсь дернуть метод Registr
PHP
1
2
3
4
5
6
7
8
9
<?php 
 
require 'Model/Registration.php';
use Model\Registration\Registration;
 
$registration = new Registration();
$a = $registration->Registr();
 
require 'View/index.php';
В итоге Registr выдаёт null, и соответственно ничего не работает, Но, если я создаю объект и вызываю метод из того файла, в котором написан класс, метод успешно обрабатывает POST данные и отправляет их в БД, хотя при попытке вар дампа метода так же null, но данные как я уже сказал в бд лежат. Подскажите пожалуйста где я накосячил, никак не пойму.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.01.2020, 23:51
Ответы с готовыми решениями:

SoapCall возвращает null
Здравствуйте! Помогите пожалуйста разобраться почему __soapCall возвращает ответ null ? В SoapUI видно что есть ответ от вебсервиса. ...

Функция возвращает NULL
Доброго времени суток. Имеется скрипт: &lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt; &lt;html&gt; ...

Php json_decode() возвращает NULL
Начну с того, что у меня есть массив чисел (они каждый раз разные от 1 до 400) на php: $GLOBALS = array(6, 26, 46, 66, 75, 95, 115, 135,...

5
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
04.01.2020, 00:03
Tundra444, Что бы метод что-либо возвращал нужно использовать return.
1
0 / 0 / 0
Регистрация: 03.01.2020
Сообщений: 5
04.01.2020, 08:31  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
Что бы метод что-либо возвращал нужно использовать return.
А что мне тут возвращать? Там же просто по сути проверка на нажатие кнопки и заполненность полей.
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
04.01.2020, 13:32
Tundra444, Тут не нужно ничего возвращать. Тут операция либо выполняется, либо кидает исключения. Так же не нужно обращаться напрямую к POST, делать редиректы и что-либо выводить через echo. Это задача контроллера.
1
 Аватар для wwowa
308 / 261 / 70
Регистрация: 01.12.2008
Сообщений: 1,031
04.01.2020, 16:53
Цитата Сообщение от Tundra444 Посмотреть сообщение
соответственно ничего не работает
У вас вся работа метода основана на проверке $_POST, значит класс не видит его. Попробуйте передать в конструктор класса вместе с базой данных еще и $_POST.
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
04.01.2020, 17:57
Tundra444, Вот накидал такой примерчик.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
 
$service = new SignUpService(new UserRepository());
 
$signUpType = new SignUpType();
$commonError = '';
 
if(!empty($_POST)) {
    $signUpType->load($_POST);
    if ($signUpType->validate()) {
        try {
            $user = $service->signUp($signUpType);
            header('Location: /user.php?id=' . $user->id); die();
        } catch (DomainException $e) {
            $commonError = $e->getMessage();
        }
    }
}
 
?>
 
<h1>Регистрация</h1>
<div style="color: red"><?= $commonError ?></div>
<form method="POST">
    <div>
        <label> Логин:
            <input name="login" value="<?= htmlspecialchars($signUpType->login) ?>">
            <span style="color:red"><?= $signUpType->getError('login') ?></span>
        </label>
    </div>
    <div>
        <label> Пароль:
            <input name="password" type="password" value="<?= htmlspecialchars($signUpType->password) ?>">
            <span style="color:red"><?= $signUpType->getError('password') ?></span>
        </label>
    </div>
    <div>
        <label> Повторите пароль:
            <input name="passwordRepeat" type="password" value="<?= htmlspecialchars($signUpType->passwordRepeat) ?>">
            <span style="color:red"><?= $signUpType->getError('passwordRepeat') ?></span>
        </label>
    </div>
    <div>
        <label> email:
            <input name="email" value="<?= htmlspecialchars($signUpType->email) ?>">
            <span style="color:red"><?= $signUpType->getError('email') ?></span>
        </label>
    </div>
    <input type="submit">
</form>
Первым шагом мы заполняем и валидируем вод данных (SignUpType). Это простая валидация, проверка на число, email, кол-ва символов и т.д.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
 
class SignUpType {
 
    public $email;
    public $login;
    public $password;
    public $passwordRepeat;
 
    private $errors = [];
 
    public function load(array $data): void
    {
        $this->email = trim($data['email'] ?? '');
        $this->login = trim($data['login'] ?? '');
        $this->password = $data['password'] ?? '';
        $this->passwordRepeat = $data['passwordRepeat'] ?? '';
    }
 
    public function validate(): bool
    {
        if (empty($this->email)) {
            $this->addError('email', 'Введите email');
        } elseif (!filter_var($this->email, FILTER_VALIDATE_EMAIL)) {
            $this->addError('email', 'Некорректный email');
        }
 
        if (empty($this->login)) {
            $this->addError('login', 'Введите логин');
        } elseif (strlen($this->login) < 3) {
            $this->addError('login', 'Минимум 3 символа');
        }
 
        if (empty($this->password)) {
            $this->addError('password', 'Введите пароль');
        } elseif (strlen($this->password) < 6) {
            $this->addError('password', 'Минимум 6 символов');
        } elseif (empty($this->passwordRepeat)) {
            $this->addError('passwordRepeat', 'Введите пароль повторно');
        } elseif ($this->password !== $this->passwordRepeat) {
            $this->addError('passwordRepeat', 'Пароли не совпадают');
        }
 
        return empty($this->getErrors());
    }
 
    public function getErrors(): array
    {
        return $this->errors;
    }
 
    public function getError($name): string
    {
        return $this->errors[$name] ?? '';
    }
 
    private function addError($name, $message): void
    {
        $this->errors[$name] = $message;
    }
}
А такие проверки типа уникальности логина, которые относятся в вариантам использования мы выносим в сам сервис. Который в случае чего выкидывает исключения.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
 
class SignUpService
{
    private $users;
 
    public function __construct(UserRepositoryInterface $users)
    {
        $this->users = $users;
    }
 
    public function signUp(SignUpType $dto): User
    {
        if ($this->users->isLoginExist($dto->login)) {
            throw new DomainException('Пользователь с таким логином уже зарегистрирован');
        }
 
        $user = User::create($dto->login, $dto->password, $dto->email);
        $this->users->insert($user);
 
        return $user;
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.01.2020, 17:57
Помогаю со студенческими работами здесь

Функция рекурсивного поиска файлов возвращает null
добрый вечер, из __autoload вызываю функцию рекурсивного поиска файлов, а она почему-то возвращает null, т.е. переменная $file = null....

Update возвращает true при выборке по ключу по значению null )
public function trainingHandler($training) { if (in_array($training, ) &amp;&amp; !$this-&gt;step_1_2_3_5_6_7()) { return...

Дебагинг var dump возвращает еще и NULL, а так же совет по валидации
Здравствуйте. Собственно первый вопрос: Есть некий класс, в котором есть метод. При &quot;дебагинге&quot; с var_dump добавляется в конце...

Запись происходит в БД но метод возвращает false
Здравствуйте, не могу понять почему $result = $stmt-&gt;fetch(PDO::FETCH_ASSOC);возвращает false когда запись проходит нормально и все данные...

Строку "NULL" к типу NULL
Как строку &quot;NULL&quot; привести к типа NULL? $var = &quot;NULL&quot;; // Надо привести к типа NULL if ($var === NULL) print &quot;Yes&quot;; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru