Андрей добрый день! подскажите пожалуйста , после того как данные прошли валидацию valitron\validate как дальше их отправить в бд, как составить sql запрос, почемуто не получается, я смотрел видео с другого вашего канала, но там нет про это, а на этом канале тут с ооп , это пока сложно))
@matroskin978Ай бұрын
Добрый день! В исходниках к этому уроку я смотрю есть сохранение в БД. В файле app/controllers/post-create.php. Вот такой код: if (!$validation->hasErrors()) { if ($db->query("INSERT INTO posts (`title`, `content`, `excerpt`) VALUES (:title, :content, :excerpt)", $data)) { $_SESSION['success'] = 'OK'; } else { $_SESSION['error'] = 'DB Error'; } redirect(); } В нем проверяется, что если нет ошибок валидации, тогда просто выполняется запрос INSERT. В качестве параметров передаются данные, которые находятся в массиве $data. Без ООП - это нужно использовать mysqli, но я даже и не подскажу сейчас, как это написать, поскольку mysqli уже 100 лет не использовал)) Примерно так как-то должно быть по идее: $stmt = mysqli_prepare($db, "INSERT INTO posts (`title`, `content`, `excerpt`) VALUES (?,?,?)"); mysqli_stmt_execute($stmt, [$data['title'], $data['content'], $data['excerpt']]); Само собой, у вас должно быть подключение mysqli в переменной $db. Вообще, все очень зависит от вашего проекта, сложно дать конкретное решение без привязки к проекту.
@ТОЛЬКОПОБЕЗДОРОЖЬЮАй бұрын
@@matroskin978 спасибо)) буду пробовать)
@matroskin978 Жыл бұрын
Исходники к уроку - github.com/matroskin978/phpbeginners/tree/08a76fb382771b52d95e20ab0e99472b20bfef8c
@НикитаМоржевский Жыл бұрын
Здравствуйте , а почему у меня не выводит ошибки как у вас на 10:50. Заметил что в переменной output, когда html-код ей присваиваем у меня не подсвечиваются классы, все одним цветом, хотя кавычки правильно расставил. Пробовал просто строку ей присвоить, ее выводит, а ошибки нет
@НикитаМоржевский Жыл бұрын
Может ли это быть из-за версии php. Моя 7.2.34
@НикитаМоржевский Жыл бұрын
Разобрался, точку не ставил перед равно
@matroskin978 Жыл бұрын
@@НикитаМоржевский здравствуйте! 🙂 Отлично, что получилось найти ошибку самостоятельно) А теперь представьте, как бы я мог Вам подсказать, что именно не так с Вашим кодом, если я с ним не работаю?))) Ответ - никак. Что-то более-менее конкретное можно подсказать в том случае, если при выполнении Вашего кода возникает какая-то ошибка и Вы ее показываете. В этом случае по ошибке можно предположить, чем она вызвана. В Вашем случае никакой ошибки выполнения кода нет. Код выполняется нормально. Просто есть неточность в логике. А подобные проблемы можно решить только при непосредственной работе с кодом. На всякий случай напомню, что в описании урока есть ссылка на исходники, которые можно использовать для сравнения Вашего кода с моим, чтобы искать как раз такие "ошибки".
@niks1302 Жыл бұрын
Выходит ошибка: Parse error: syntax error, unexpected 'PDOStatement' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST) in C:\OSPanel\domains\localhost\vendor\myfrm\core\classes\Db.php Подскажите пжл в чем может быть проблема.
@matroskin978 Жыл бұрын
Проблема в какой-то синтаксической ошибке. Не видя кода, конкретнее сказать сложно. Также Вы не указываете строку, в которой произошла ошибка (в тексте ошибки строка должна быть). Все же рискну предположить, что Вы используете старую версию PHP. Скорее всего, PHP < 7.4. Поэтому проверьте этот момент и, если это так, тогда повысьте ее хотя бы до 7.4, а лучше используйте уже 8-ю версию. Вообще странно, что эта ошибка возникла у Вас в 13-уроке, а не раньше, когда писался класс Db.
@niks1302 Жыл бұрын
@@matroskin978 Показывает ошибка здесь private PDOStatement $stmt;
@matroskin978 Жыл бұрын
@@niks1302 ну так я же не только за строку спрашивал)) Вы версию PHP проверили? В Open Server это можно сделать, кликнув по флажку сервера и перейти в Настройки - Модули. В комментарии выше еще раз прочтите рекомендации по версии языка.
@niks1302 Жыл бұрын
@@matroskin978 Спасибо.
@matroskin978 Жыл бұрын
@@niks1302 пожалуйста)
@soversus53749 ай бұрын
$_SESSION['error'] ?: ''
@niks1302 Жыл бұрын
Обновил PHP до версии 8.1 теперь выходит ошибка Warning: require(C:\OSPanel\domains\localhost/app/views/errors/500.tpl.php): Failed to open stream: No such file or directory in C:\OSPanel\domains\localhost\vendor\myfrm\core\funcs.php on line 30 Fatal error: Uncaught Error: Failed opening required 'C:\OSPanel\domains\localhost/app/views/errors/500.tpl.php' (include_path='.') in C:\OSPanel\domains\localhost\vendor\myfrm\core\funcs.php:30 Stack trace: #0 C:\OSPanel\domains\localhost\vendor\myfrm\core\classes\Db.php(50): abort() #1 C:\OSPanel\domains\localhost\public\index.php(22): myfrm\Db->getConnection() #2 {main} thrown in C:\OSPanel\domains\localhost\vendor\myfrm\core\funcs.php on line 30 эта строка require VIEWS . "/errors/{$code}.tpl.php";
@matroskin978 Жыл бұрын
В тексте ошибки сообщается, что не находит файл для подключения app/views/errors/500.tpl.php. Если Вы его создадите, тогда он будет подключен без ошибки. Файл пытается подключить, как я понял, из-за ошибки подключения к БД. Поэтому проверьте настройки подключения к БД и проверьте, включен ли сам модуль БД в настройках сервера. Настройки подключения могут отличаться в зависимости от версии Open Server. Например, в моей версии логин и пароль - это строка root. А в новой версии root используется только для логина, а для пароля используется пустая строка. Т.е. настройки в файле config/db.php могут быть такими: 'username' => 'root', 'password' => '',