Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите. Не могу разобарться с классами.

 PHP.SU

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


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

> Описание: Помогите. Не могу разобарться с классами.
onix-la2
Отправлено: 22 Июня, 2015 - 16:16:07
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Я пока только обучаюсь, стараюсь обучиться, добрался до темы ООП, но столкнулся с проблемамы в самом начале уже (( Прошу помочь разобраться.

Браузер выдает такую ошибку: Notice: Undefined variable: articles in C:\xampp\htdocs\www\mysite\dz2\dz4\v\v_index.php on line 2

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\www\mysite\dz2\dz4\v\v_index.php on line 2

и так файл c_model.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include_once('c/Controller.php');
  3. //include_once('m/startup.php');
  4.  
  5.  
  6.  function articles_all()
  7.         {
  8.         // Запрос.
  9.         $query = "SELECT * FROM articles ORDER BY id_article DESC";
  10.         $result = mysql_query($query);
  11.                                                        
  12.         if (!$result)
  13.                 die(mysql_error());
  14.        
  15.         // Извлечение из БД.
  16.         $n = mysql_num_rows($result);
  17.         $articles = array();
  18.  
  19.         for ($i = 0; $i < $n; $i++)
  20.         {
  21.                 $row = mysql_fetch_assoc($result);             
  22.                 $articles[] = $row;
  23.         }
  24.                 return $articles;
  25.         }
  26.  
  27.          function articles_intro($article)
  28.         {
  29.         if (strlen($article['content'])>13)
  30.                 return substr($article['content'],0,13);
  31.         else
  32.                 return $article ['content'];
  33.         }
  34. function articles_get($id_article)
  35. {
  36.         $result = mysql_query('SELECT * FROM articles WHERE id_article =' . $_GET['id']);
  37.  
  38.         if (!$result)
  39.                 die(mysql_error());
  40.                
  41.                
  42.         $row = mysql_fetch_assoc($result);             
  43.  
  44.         return $row;
  45.                
  46.  
  47. }
  48.  
  49. //
  50. // Добавить статью
  51. //
  52. function articles_new($title, $content)
  53. {
  54.         // Подготовка.
  55.         $title = trim($title);
  56.         $content = trim($content);
  57.  
  58.         // Проверка.
  59.         if ($title == '')
  60.                 return false;
  61.                
  62.        
  63. // Запрос.
  64.         $t = "INSERT INTO articles (title, content) VALUES ('%s', '%s')";
  65.        
  66.         $query = sprintf($t,
  67.                          mysql_real_escape_string($title),
  68.                          mysql_real_escape_string($content));
  69.        
  70.         $result = mysql_query($query);
  71.                                                
  72.         if (!$result)
  73.                 die(mysql_error());
  74.                
  75.         return true;
  76. }
  77.  
  78. //
  79. // Изменить статью
  80. //
  81.  
  82.  


файл Controller.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //
  3. // Базовый класс контроллера.
  4. //
  5. abstract class Controller
  6. {
  7.         //
  8.        
  9.         // Конструктор.
  10.         //
  11.         function __construct()
  12.         {              
  13.         }
  14.        
  15.         //
  16.         // Полная обработка HTTP запроса.
  17.         //
  18.         public function Request()
  19.         {
  20.                 $this->OnInput();
  21.                 $this->OnOutput();
  22.         }
  23.        
  24.         //
  25.         // Виртуальный обработчик запроса.
  26.         //
  27.         protected function OnInput()
  28.         {
  29.         }
  30.        
  31.         //
  32.         // Виртуальный генератор HTML.
  33.         //     
  34.         protected function OnOutput()
  35.         {
  36.         }
  37.        
  38.         //
  39.         // Запрос произведен методом GET?
  40.         //
  41.         protected function IsGet()
  42.         {
  43.                 return $_SERVER['REQUEST_METHOD'] == 'GET';
  44.         }
  45.  
  46.         //
  47.         // Запрос произведен методом POST?
  48.         //
  49.         protected function IsPost()
  50.         {
  51.                 return $_SERVER['REQUEST_METHOD'] == 'POST';
  52.         }
  53.  
  54.         //
  55.         // Генерация HTML шаблона в строку.
  56.         //
  57.         public function view_include($fileName, $vars = array())
  58.         {
  59.                 // Установка переменных для шаблона.
  60.                
  61.                 /*
  62.                 foreach ($vars as $k => $v)
  63.                 {
  64.                         $$k = $v;
  65.                 }
  66.                 */
  67.                 extract($vars);
  68.  
  69.                
  70.                 // Генерация HTML в строку.
  71.                 ob_start();
  72.                 include $fileName;
  73.                 return ob_get_clean(); 
  74.         }      
  75.        
  76. }
  77.  


файл index.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include_once('c/c_index.php');
  3. include_once('v/v_index.php');
  4. include_once('m/startup.php');
  5.  
  6.  
  7.  
  8.  
  9.  
  10. $controller = new c_index();
  11. $controller->Request();
  12.  
  13. ?>


файл v_inex.php
PHP:
скопировать код в буфер обмена
  1. <ul>
  2. <?var_dump($articles)?>
  3. <?die()?>
  4.                 <?foreach($articles as $article):?>
  5.                         <li>
  6.                                 <?=$article['id_article']?>.
  7.                                 <a href="article.php?id=<?=$article['id_article']?>">
  8.                                         <?=$article['title']?>
  9.                                 </a>
  10.                                 </br>  
  11.                                         <?=$article['content']=articles_intro($article)?>
  12.                         </li>
  13.                         <?endforeach?>         
  14.         </ul>


файл c_base.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include_once('c/Controller.php');
  3.  
  4. // Базовый контроллер сайта.
  5. //
  6. abstract class c_base extends Controller
  7. {
  8.         protected $title;               // заголовок страницы
  9.         protected $content;    
  10.         public $articles;
  11.        
  12.         //
  13.         // Конструктор.
  14.         //
  15.         function __construct()
  16.         {              
  17.         }
  18.        
  19.         //
  20.         // Виртуальный обработчик запроса.
  21.         //
  22.         protected function OnInput()
  23.         {
  24.                 startup();
  25.         }
  26.        
  27.         //
  28.         // Виртуальный генератор HTML.
  29.         //     
  30.         protected function OnOutput()
  31.         {
  32.                 $vars = array('title' => $this->title, 'content' => $this->content);   
  33.                 $page = $this->view_include('v/v_main.php', $vars);                            
  34.                 echo $page;
  35.         }      
  36. }
  37.  
  38.  


файл c_index.php

PHP:
скопировать код в буфер обмена
  1. <?
  2. include_once('c/c_model.php');
  3. include_once('c/c_base.php');
  4. include_once('m/startup.php');
  5.  
  6. class c_index extends c_base{
  7.                                
  8.         function __construct()
  9.         {              
  10.         }
  11.        
  12.                
  13.        
  14.         protected function OnInput()
  15.         {
  16.                 parent::OnInput();
  17.                 $this->articles = articles_all();
  18.        
  19.                
  20.                
  21.                
  22.         }
  23.        
  24.         //
  25.         // Виртуальный генератор HTML.
  26.         //     
  27.         protected function OnOutput()
  28.         {
  29.                
  30.                 $vars = array('articles' => $this->articles);
  31.                 $articles = $this->view_include('v/v_index.php', $vars);
  32.                        
  33.                 parent::OnOutput();
  34.                
  35.                
  36.         }      
  37.        
  38. }
  39.  
  40.  
 
 Top
Alex_dark74
Отправлено: 22 Июня, 2015 - 18:40:01
Post Id


Частый гость


Покинул форум
Сообщений всего: 210
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Не приходит переменная в foreach. Проверь что в переменной? Articles.
 
 Top
bezverkhy
Отправлено: 22 Июня, 2015 - 18:46:33
Post Id



Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Я возможно ошибаюсь, но разве не нужно ещё ; поставить?

Поэтому он и выдает ошибку
 
My status
 Top
Bio man
Отправлено: 22 Июня, 2015 - 20:51:51
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




bezverkhy пишет:
Я возможно ошибаюсь
да, ошибаетесь.
Ошибка из-за того, что в момент использования переменной она не определена.
(Добавление)
onix-la2 пишет:
include_once('v/v_index.php');
Зачем эта строчка? Удали её и возможно ошибка пропадёт.
 
 Top
bezverkhy
Отправлено: 22 Июня, 2015 - 21:03:09
Post Id



Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Да, я прочел причину ошибки, в первой теме)
 
My status
 Top
onix-la2
Отправлено: 22 Июня, 2015 - 21:46:53
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Alex_dark74 пишет:
Не приходит переменная в foreach. Проверь что в переменной? Articles.

сдела вар дамп, пишет NULL
(Добавление)
Bio man пишет:
include_once('v/v_index.php');
Зачем эта строчка? Удали её и возможно ошибка пропадёт.


Сделал как вы сказали и добавил в c_index.php
PHP:
скопировать код в буфер обмена
  1. protected function OnOutput()
  2.         {
  3.                
  4.                 $vars = array('articles' => $this->articles);
  5.                 $articles = $this->view_include('v/v_index.php', $vars);
  6.                 print $articles;
  7.                 parent::OnOutput();
  8.                
  9.                
  10.         }      


строчку


ошибка ушла, понял, что с глупил с инклюдом, но теперь немного другая проблема
Прикреплено изображение (Нажмите для увеличения)
1.png

(Отредактировано автором: 22 Июня, 2015 - 21:50:33)

 
 Top
onix-la2
Отправлено: 22 Июня, 2015 - 21:52:07
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




а должно быть вот так


добавлю ещё файл v_main.php, который подключается с c_base.php

PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3.         <title>PHP. Уровень 2</title>
  4.         <meta content="text/html; charset=Windows-1251" http-equiv="content-type">     
  5.         <link rel="stylesheet" type="text/css" media="screen" href="theme/style.css" />
  6. </head>
  7. <body>
  8.         <h1>PHP. Уровень 2</h1>
  9.         <br/>
  10.         <a href="index.php">Главная</a> |
  11.         <a href="editor.php?page=edit">Консоль редактора</a>
  12.         <hr/>
  13.         <?=$content?>
  14.         <hr/>
  15.         <small><a href="http://prog-school.ru">Школа Программирования</a> &copy;</small>                       
  16. </body>
  17. </html>
  18.  



подскажите пожалуйста, где косяк ?((
(Добавление)
ошибка найдена)

PHP:
скопировать код в буфер обмена
  1. $this->content = $this->view_include('v/v_index.php', $vars);


все заработало, спасибо за помощь )
Прикреплено изображение (Нажмите для увеличения)
2.png
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB