PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 13
Pavl Отправлено: 28 Июля, 2020 - 18:52:44 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
miketomlin пишет:
define('TEMPLATE_PATH',__DIR__.'/tmpl/');

Да, так код работает, спасибо.
Pavl Отправлено: 28 Июля, 2020 - 17:57:43 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
miketomlin пишет:
например extra/httpd-vhosts.conf,

Заменил строки в этом файле, только не очень понял необходимость в этом, учитывая то, что код заработал (в файле start.php уже есть строка define('DIR_TMPL', 'C:/OSPanel/domains/test/www/tmpl/');).
Если я. предположим, захочу сделать сайт в другой директории, то в файле extra/httpd-vhosts.conf нужно будет добавлять ещё один путь или прежний удалять и писать новый за место него?
(Добавление)
Pavl пишет:
Good. Но больше постарайся нам ЭТО не показывать.

Ладно, постараюсь!
Pavl Отправлено: 28 Июля, 2020 - 16:20:47 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
miketomlin пишет:
Походу слеш после tmpl удалили. Или подключайте мозги или завязывайте с программированием

Слеш удалил. И ещё слеши в обратную сторону были. Когда указывал путь, то его скопировал, а слеши не развернул.
Код работает, всем спасибо.
Pavl Отправлено: 28 Июля, 2020 - 15:27:32 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
В прикреплённом файле конфигурация сервера Apache.
Pavl Отправлено: 28 Июля, 2020 - 15:10:03 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
Добрый день!
Прислушиваясь к вашим советам, сначала переместил все файлы относящиеся к данному уроку из папки rusakov в папку www. В результате чего, вообще ничего не изменилось.
Я вспомнил, что есть скаченные исходники автора этого видеоурока. Их разместил в папке www. Теперь, в браузере, кроме ошибок ничего не выводится:

Warning: include(C:\OSPanel\domains\test\www\tmplmain.tpl): failed to open stream: No such file or directory in C:\OSPanel\domains\test\www\core\view_class.php on line 15

Warning: include(): Failed opening 'C:\OSPanel\domains\test\www\tmplmain.tpl' for inclusion (include_path='.;c:/ospanel/modules/php/PHP_7.2-x64;c:/ospanel/modules/php/PHP_7.2-x64/PEAR/pear;core;controllers') in C:\OSPanel\domains\test\www\core\view_class.php on line 15


Файлы исходники:
Pavl Отправлено: 27 Июля, 2020 - 15:10:53 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
Вы убедили меня в том, что эти видеоуроки не очень хорошие, хотя сам автор пишет, что у него есть курс, конкретно по паттерну MVC по времени на несколько десятков часов. И я хотел, через некоторое время поизучать его. А теперь не знаю, стоит ли?
Текущий вопрос всё-таки, хотелось бы закончить. Ещё раз подчеркну, что писал код точь-в-точь, как у автора. И у него он работает. Только с одним отличием - в жёстком диске размещал файлы не совсем так, как у него. Может я с путями, что-то напутал? Посмотрите, пожалуйста, в прикреплённом файле скриншот жёсткого диска. Может, быть там, что-то не так? Я сам не вижу ошибки (если она там есть).
Pavl Отправлено: 26 Июля, 2020 - 19:22:08 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
Вырезал следующие строки из класса Route, но оставив в этом же файле:
PHP:
скопировать код в буфер обмена
  1.  
  2. $uri = $_SERVER['REQUEST_URI'];
  3. $uri = substr($uri, 1);
  4. if ($uri)
  5. {
  6.     $action_name = $uri;
  7. }
  8.  

Стало отображаться содержимое файла index.tpl.
Исходный код:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. string(5) "index"
  3. string(14) "MainController"
  4. string(11) "actionindex"
  5. object(MainController)#1 (4) {
  6.   ["title":protected]=>
  7.   NULL
  8.   ["meta_desc":protected]=>
  9.   NULL
  10.   ["meta_keywords":protected]=>
  11.   NULL
  12.   ["view":protected]=>
  13.   object(View)#2 (1) {
  14.     ["dir_tmpl":"View":private]=>
  15.     string(41) "C:/OSPanel/domains/test/www/rusakov/tmpl/"
  16.   }
  17. }
  18. <!DOCTYPE_html>
  19. <html lang="ru">
  20. <head>
  21.     <title>Главная страница</title>
  22.     <meta http-equiv="Content-Type" content="Описание главной страницы">
  23.     <meta name="description" content="Описание главной страницы">
  24.     <meta name="keywords" content="<b>Notice</b>:  Undefined variable: meta_keyword in <b>C:\OSPanel\domains\test\www\rusakov\tmpl\main.tpl</b> on line <b>7</b>">
  25. </head>
  26. <body>
  27.     <header>
  28.         <h1>Добро пожаловать!</h1>
  29.     </header>
  30.     <hr />
  31.     <div id="content"><h1>Главная страница</h1>
  32. <p>Наш сайт только разрабатывается</p>
  33. <p><a href="/page">Внутренняя страница</a></p></div>
  34.     <hr />
  35.     <footer>С уваженем, команда нашего сайта.</footer>
  36. </body>
  37. </html>
  38.  

Возникла следующая проблема. Когда нажимаешь на ссылку "Внутренняя страница", то не подгружается содержимое файла page.tpl. Происходит переход по адресу http://test/page и в браузере выводится "Объект не найден!". Не понимаю, почему?
Pavl Отправлено: 26 Июля, 2020 - 18:00:58 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
LIME пишет:
ох уж эти видеоуроки
ох уж эти сказасьники

судя по стилю урок либо мегадревний либо от не особо качественного учителя
но для начала сойдет

По-правде говоря не слышал ни разу положительных отзывов, как о каких-либо видеоуроках, так и об учебниках! Хотя я согласен, что видеоуроки вырабатывают дурную привычку - сначала, что-то делать, потом думать! А не наоборот! Радость
Урок 2017 года (не слишком, наверное, старый?) от Михаила Русакова. Он и сам пишет, что
это самый простой вариант паттерна MVC, чтобы был понятен принцип работы MVC. Не знаю, хороший Михаил Русаков учитель или плохой, но на просторах интернета его видеоуроки популярны. То тут, то там постоянно на них натыкаешься.

LIME пишет:
http://phpfaq[dot]ru/debug
- мне кажется эта статья всё-таки уже для более-менее профессионалов, чем новичков (или ошибаюсь?). Хотя, всё-равно, спасибо, буду изучать.

Попробовал, с помощью функции var_dump посмотреть код, как Вы предложили. Вот, что вывелось:
string(13) "rusakov/index" string(14) "MainController" string(19) "actionrusakov/index" object(MainController)#1 (4) { ["title":protected]=> NULL ["meta_desc":protected]=> NULL ["meta_keywords":protected]=> NULL ["view":protected]=> object(View)#2 (1) { ["dir_tmpl":"View":private]=> string(41) "C:/OSPanel/domains/test/www/rusakov/tmpl/" } }


В коде задействован класс MainController, который находится в файле maincontroller_class.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. class MainController extends AbstractController{
  5.  
  6.     protected $title;
  7.     protected $meta_desc;
  8.     protected $meta_keywords;
  9.  
  10.     public function __construct(){
  11.         parent::__construct(new View(DIR_TMPL));
  12.     }
  13.  
  14.     public function action404() {
  15.         parent::action404();
  16.         $this->title = 'Страница не найдена - 404';
  17.         $this->meta_desc = 'Запрошенная страница не существует.';
  18.         $this->meta_keywords = 'страница не найдена, страница не существует, 404';
  19.  
  20.         $content = $this->view->render('404', [], true);
  21.         $this->render($content);
  22.     }
  23.  
  24.     public function actionIndex(){
  25.         $this->title = 'Главная страница';
  26.         $this->meta_desc = 'Описание главной страницы';
  27.         $this->meta_keywords = 'описание, главная страница';
  28.  
  29.         $content = $this->view->render('index', [], true);
  30.         $this->render($content);
  31.     }
  32.  
  33.     public function actionPage(){
  34.         $this->title = 'Внутренняя страница';
  35.         $this->meta_desc = 'Описание внутренней страницы';
  36.         $this->meta_keywords = 'описание, внутренняя страница';
  37.         $email = 'abc@mail.ru'; //Допустим получено из базы с помощью Model
  38.         $content = $this->view->render('page', ['email' => $email], true);
  39.         $this->render($content);
  40.     }
  41.  
  42.     protected function render($content) {
  43.         $params = [];
  44.         $params['title'] = $this->title;
  45.         $params['meta_desc'] = $this->meta_desc;
  46.         $params['meta_keywords'] = $this->meta_keywords;
  47.         $params['content'] = $content;
  48.         $this->view->render(MAIN_LAYOUT, $params);
  49.     }
  50.  
  51. }
  52.  
  53. ?>
  54.  

При наведении на extends AbstractController появляется Undefined class AbstractController . Класс не найден. Интересный вопрос - почему класс не найден? Этот класс содержится в файле abstractcontroller_class.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. abstract class AbstractController {
  5.  
  6.     protected $view;
  7.  
  8.     public function __construct($view) {
  9.         $this->view = $view;
  10.     }
  11.  
  12.     public function action404() {
  13.         header('HTTP/1.1 404 Not Found');
  14.         header('Status: 404 Not Found');
  15.  
  16.     }
  17.  
  18.     abstract protected function render($str);
  19.  
  20. }
  21.  
  22. ?>
  23.  

В файле start.php есть такие строки:
PHP:
скопировать код в буфер обмена
  1.  
  2. set_include_path(get_include_path().PATH_SEPARATOR.'core'.PATH_SEPARATOR.'controllers');
  3.     spl_autoload_extensions('_class.php');
  4.  

И файл abstractcontroller_class.php находится в папке core.
Почему же, тогда появляется сообщение, что этот класс не найден?
Pavl Отправлено: 26 Июля, 2020 - 15:16:20 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
При заходе на index.php, если нажать ctrl+U, то выводится:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE_html>
  3. <html lang="ru">
  4. <head>
  5.     <title>Страница не найдена - 404</title>
  6.     <meta http-equiv="Content-Type" content="Запрошенная страница не существует.">
  7.     <meta name="description" content="Запрошенная страница не существует.">
  8.     <meta name="keywords" content="<b>Notice</b>:  Undefined variable: meta_keyword in <b>C:\OSPanel\domains\test\www\rusakov\tmpl\main.tpl</b> on line <b>7</b>">
  9. </head>
  10. <body>
  11.     <header>
  12.         <h1>Добро пожаловать!</h1>
  13.     </header>
  14.     <hr />
  15.     <div id="content"><h1>Страница не найдена</h1>
  16. <p>Запрошенной страницы не существует!</p>
  17. <p><a href="index">Главная страница</a></p></div>
  18.     <hr />
  19.     <footer>С уваженем, команда нашего сайта.</footer>
  20. </body>
  21. </html>
  22.  

Класс Route находится в файле route_class.php и выглядит следующим образом:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Route
  3. {
  4.  
  5.     public static function start()
  6.     {
  7.         $controller_name = 'Main';
  8.         $action_name = 'index';
  9.  
  10.         $uri = $_SERVER['REQUEST_URI'];
  11.         $uri = substr($uri, 1);
  12.         if ($uri) $action_name = $uri;
  13.         $controller_name = $controller_name . 'Controller';
  14.         $action_name = 'action' . $action_name;
  15.         $controller = new $controller_name();
  16.         if (method_exists($controller, $action_name)) $controller->$action_name();
  17.         else $controller->action404();
  18.     }
  19.  
  20. }
  21.  

В этом файле метод action404() подсвечен в PhpShtorm и при наведении курсора появляется: Method 'action404' not found in

Этот код я пишу точь-в-точь, как у автора в видеоуроке, который нашёл в интернете. Только , у него всё работает, а у меня нет.
Pavl Отправлено: 25 Июля, 2020 - 13:23:34 • Тема: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов! • Форум: Вопросы новичков

Ответов: 21
Просмотров: 1476
Добрый день!
Есть файл index.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.     require_once 'start.php';
  4.     Route::start();
  5.  

который ссылается на файл start.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.     set_include_path(get_include_path().PATH_SEPARATOR.'core'.PATH_SEPARATOR.'controllers');
  4.     spl_autoload_extensions('_class.php');
  5.  
  6.     define('DIR_TMPL', 'C:/OSPanel/domains/test/www/rusakov/tmpl/');
  7.     define('MAIN_LAYOUT', 'main');
  8.  

При заходе на index.php отображается содержимое двух файлов.
main.tpl:
PHP:
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE_html>
  3. <html lang="ru">
  4. <head>
  5.     <title><?=$title?></title>
  6.     <meta http-equiv="Content-Type" content="<?=$meta_desc?>">
  7.     <meta name="description" content="<?=$meta_desc?>">
  8.     <meta name="keywords" content="<?=$meta_keyword?>">
  9. </head>
  10. <body>
  11.     <header>
  12.         <h1>Добро пожаловать!</h1>
  13.     </header>
  14.     <hr />
  15.     <div id="content"><?=$content?></div>
  16.     <hr />
  17.     <footer>С уваженем, команда нашего сайта.</footer>
  18. </body>
  19. </html>
  20.  

и 404.tpl:
PHP:
скопировать код в буфер обмена
  1.  
  2. <h1>Страница не найдена</h1>
  3. <p>Запрошенной страницы не существует!</p>
  4. <p><a href="index">Главная страница</a></p>
  5.  

Вопрос - почему браузер не находит и не выводит на экран содержимое файла index.tpl? Ведь этот файл лежит в одной папке с main.tpl и 404.tpl.
То есть, по идее, когда открываешь index.php, вместо содержимого 404.tpl, должно выводиться содержимое index.tpl, но так почему-то не происходит.
Файл index.tpl:
PHP:
скопировать код в буфер обмена
  1.  
  2. <h1>Главная страница</h1>
  3. <p>Наш сайт только разрабатывается</p>
  4. <p><a href="/page">Внутренняя страница</a></p>
  5.  

Файлов больше, чем я выложил, поэтому, если необходимо, то ещё выложу.
Содержимое папки tmpl:
Pavl Отправлено: 28 Июня, 2020 - 17:16:51 • Тема: Не работает библиотека для парсинга сайтов - "phpQuery"! • Форум: Вопросы новичков

Ответов: 3
Просмотров: 394
Строитель пишет:
Pavl, а что вы ожидали от кривой установки? - Устанавливайте композером, подключайте автозагрузчик, и пользуйтесь.

Установил композером, подключил автозагрузчик.
Результат - "PhpShtorm", по-прежнему ругается на эту строку.
Но, код стал работать. Поэтому, спасибо - Ваш совет помог.
Pavl Отправлено: 25 Июня, 2020 - 16:20:53 • Тема: Не работает библиотека для парсинга сайтов - "phpQuery"! • Форум: Вопросы новичков

Ответов: 3
Просмотров: 394
Добрый день!
Изучаю парсинг сайтов.
Есть библиотека для парсинга сайтов - "phpQuery". Я её скачал, установил на компьютере.
Создаю файл с подключением "phpQuery".
Пишу такую строку в "PhpShtorm":
PHP:
скопировать код в буфер обмена
  1.  
  2. require_once('phpQuery.php');
  3.  

"PhpShtorm" на эту строку не ругается - то есть, библиотека (насколько я понимаю) успешно подключена.
Далее ниже в коде доходит до строки::
PHP:
скопировать код в буфер обмена
  1.  
  2. $pq = phpQuery::newDocument($curl);
  3.  

И появляется подсветка на "phpQuery". А при наведении курсора на неё - "Undefined class phpQuery ".
Что я делаю неправильно?
Pavl Отправлено: 04 Мая, 2020 - 19:03:29 • Тема: Создание счётчика галереи изображений. • Форум: SQL и Архитектура БД

Ответов: 0
Просмотров: 656
Добрый день!
В общем, изрядно изменил код и таблицы в БД, но, что удивительно, ключевая проблема всё также, не пропала.
Одна из идей кода заключается в том, чтобы при двух условиях происходила запись в базу данных. А именно нужно, чтобы в промежуточную таблицу ip_id_address заносилось кол-во уникальных посетителей (hosts + 1) и выводилось потом на экран, для каждой картинки по отдельности с условием, что это новый пользователь (ip_address).
Есть файл index.php, в котором находится галерея с картинками. С index.php идёт переход в файл page3.php, в котором происходит запись в БД, выборка из Бд и вывод на экран кол-ва уникальных посетителей.
Файл page3.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. // Работа с адресной строкой
  4. $id = intval($_GET['id']);
  5. if (!$id) {
  6.     die('Хьюстон, у ас проблемы');
  7. }
  8. // Кофигурация подключения к СУБД
  9. define("DB_SERVER", "localhost");
  10. //define("DB_PORT", "3306");
  11. define("DB_USERNAME", "root");
  12. define("DB_PASSWORD", "");
  13. define("DB_BASE", "images");
  14. define("DB_CHARSET", "utf-8");
  15. // Подключение к БД
  16. $link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_BASE);
  17. mysqli_set_charset($link, DB_CHARSET);
  18. if (!$link) {
  19.     die('Хьюстон, у ас проблемы');
  20. }
  21. // Работаем с данными полученными от пользователя
  22. // Проверяем есть ли такой IP в таблице, можно просто повесить уникальный индекс на колонку :)
  23. $host = $_SERVER['REMOTE_ADDR'];
  24. $result = mysqli_query($link, "SELECT ip_address FROM id_ip_address WHERE ip_address = '" . $host . "'");
  25. if (!mysqli_num_rows($result)) {
  26.     $result = mysqli_query($link, "INSERT INTO id_ip_address SET ip_address = '" . $host . "' ");
  27. }
  28. $user = mysqli_query($link, "SELECT COUNT(ip_address) FROM id_ip_address WHERE ip_address = '" . $host . "' ");
  29.  
  30. // Автоинкремент статистики просмотров
  31. $statistic = mysqli_query($link, "SELECT hosts FROM img WHERE id = " . $id);
  32. if (!mysqli_num_rows($statistic)) {
  33.     $statistic = mysqli_query($link, "INSERT INTO id_ip_address SET hosts = 1");
  34. } else {
  35.     $statistic = mysqli_query($link, "UPDATE id_ip_address SET hosts = hosts + 1");
  36. }
  37. $count = mysqli_query($link, "SELECT SUM(hosts) FROM id_ip_address");
  38. // Необходимо позаботится о безопасности и сделать обработку ошибок :)
  39. $sum = mysqli_fetch_row($count);
  40. echo "Уникальных посетителей: " . mysqli_num_rows($user);
  41. echo "<br />";
  42. echo "Просмотров: " . $sum[0];
  43. mysqli_close($link);
  44. ?>
  45. Я пробую связать два условия в одно (id картинки + ip_address ), например в строку
  46. [PHP]
  47. $user = mysqli_query($link, "SELECT COUNT(ip_address) FROM id_ip_address WHERE ip_address = '" . $host . "' ");
  48.  

Пробую,добавить AND id = '$id' в строку:
PHP:
скопировать код в буфер обмена
  1. $user = mysqli_query($link, "SELECT COUNT(ip_address) FROM id_ip_address WHERE ip_address = '" . $host . "' ");
  2.  

но ничего не получается.

То есть, если я, например, вручную меняю ip_address в таблице (то есть, их становится 2), то и выводится на экран уникальных посетителей должно 2, а этого не происходит. Выводится, по-прежнему Уникальных посетителей: 1.
Как связать эти два условия?
Есть 3 таблицы в БД:

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB