Проблема с выводом контента в MVC

 
0
 
PHP
ava
parnasmi | 13.04.2013, 18:28
Всем привет. Я - новичок, к тому же чайник smile  Изучаю азы PHP по курсу 3х летный давности PHP: объектно-ориентированный подход(от K0stix). остановился на 9-м уроке где vmenu.php и vcontent.php инклудиться в index.php  Вот так:


        require_once "config/config.php";
    require_once "views/vmenu.php";
    require_once "views/vcontent.php";

Тут и начинается проблема. Менюшки выводятся , а вот с контентом беда
[img]http://s1.ipicture.ru/uploads/20130413/thumbs/h2R6KMGV.jpg[/img]

Надпись вывода "There is problem with ID " прописано в моделе mcontent.php в случае отсуствие id Думаю вот тут причина ошибки. Вот
содержимое mcontent.php:


    require_once $_SERVER['DOCUMENT_ROOT']. "/config/db.php";
    //require_once 'Z:/home/kostix.uz/www/config/db.php';
    
    Class Mcontent extends Db{
        function return_content($id = NULL){
            $sql = "SELECT description, keywords, title, content, created, lastmod
            FROM pages WHERE id = {$id} and visible = '1' LIMIT 1";
            if(!$id){
            die("There is problem with ID " . mysql_error());
            //$sql = "SELECT content FROM pages ORDER BY position ASC limit 1";
        }
            $result = $this -> sql($sql);
            return $result;
        }
    }
     


Если уберем



if(!$id){
            die("There is problem with ID " . mysql_error());
            //$sql = "SELECT content FROM pages ORDER BY position ASC limit 1";
        }

Выводиться это:
[img]http://s1.ipicture.ru/uploads/20130413/thumbs/g22Aj7gJ.jpg[/img]

Если набирать сам vcontent.php на браузере(http://kostix.loc/views/vcontent.php):

Ошибка:


Database query failed:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and visible = '1' LIMIT 1' at line 2


С id(http://kostix.loc/views/vcontent.php?id=1(или 2)) контент уже нормально выводиться.

Содержимое vcontent.php


require_once $_SERVER['DOCUMENT_ROOT'] . "/controllers/ccontent.php";
    //require_once "../controllers/ccontent.php";
    
    $id = $_GET['id'];
    $vcontent = new Ccontent();
    echo $vcontent -> print_content($id);


Что странно в скринкасте у самого K0stix а все нормально работает. Тоесть при нажатие на менюшки по id выводяться соотвествующие контенты.
Хотя, преверил код на последном уроке где мы писали эти меню и контент. Все идентичны. Кажеться после записи он что-то переделал, но забыл это объеснить на следуюшем уроке.

Дальше привожу все php файлы:

ccontent.php


require_once $_SERVER['DOCUMENT_ROOT']. "/models/mcontent.php";
    //require_once "Z:/home/kostix.uz/www/models/mcontent.php";
    
    Class Ccontent extends Mcontent{
        function print_content($id){
            //settype($id, 'integer');
            $res = $this -> return_content($id);
            $row = mysql_fetch_assoc($res);// массив
            //$page = array();
            //foreach($row as $key => $value){
        //        $page[$key] = $value;}
        //    return $page;
            $val = $row['content'];            
            //$this -> k_debug($row);
            return $val;
            
            
        }
    }
    
    //$obj = new Ccontent();
    //$obj -> print_content();


mmenu.php


  require_once $_SERVER['DOCUMENT_ROOT']. "/config/db.php";
    //require_once "Z:/home/kostix.uz/www/config/db.php";
    class Mmenu extends Db{
        function return_menu(){
            $sql = "select id, menu_name from pages";
            $res = $this -> sql($sql);
            return $res;
        }
        
    }



cmenu.php


    require_once $_SERVER['DOCUMENT_ROOT']. "/models/mmenu.php";
//    require_once "Z:/home/kostix.uz/www/models/mmenu.php";
    class Cmenu extends Mmenu{
        function print_menu(){
            $res = $this -> return_menu();// возвращаем ссылку на резултат запроса.
            while($row = mysql_fetch_array($res)){
            //$this -> k_debug($row); Просто для дебаггинга
             $mname[$row['id']] = $row['menu_name'];//Забиваем в массив результат заявки
            }
            return $mname;
            
        }
    }
    
$aux_vmenu = new Cmenu();
$vmenu = $aux_vmenu -> print_menu();



vmenu.php


     require_once $_SERVER['DOCUMENT_ROOT']. "/controllers/cmenu.php";
    //require_once "../controllers/cmenu.php";
    
    echo '<ul>';
    foreach($vmenu as $uri => $link){
        echo "<li><a href = '?id = {$uri}'>{$link}</a></li>";
        //echo "<li><a href = '?id = {$uri}'>{$link}</a></li>";
            }
    echo '</ul>';


Пожалуйста, покажите "таракана", где мог ошибиться. И, как делать так, чтобы контенты при нажатие на ссылки меню выводились по очереди.Заранее спасибо за помощь.
Comments (8)
ava
Sanchezzz | 13.04.2013, 17:42 #
Ошибка в SQL запросе  для mysql  пхшный NULL не совсем NULL для мускула иначе говоря нужно было его передать как строку примерно так

"WHERE ". (is_null($id) ? 'null' : $id ). " AND ";
ava
baLamooot | 13.04.2013, 17:43 #
Не ясно, где тут MVC, какая-то странная мешанина. Вроде есть что-то, что автор курса считает моделью, контроллером и видом, но чтобы контроллер наследовал модель - это уже признак клиники smile
В зависимости от настроек сервера, важно что передается в $_GET['id']. В общем случае если $_GET['id'] не определен или равен нулю (т.е. vcontent.php?id=0 или просто vcontent.php без id), то будет выводиться эта ошибка.

Судя по коду, курс ничему путному не учит. Первый же sql-запрос шлет приветы инъекциям
ava
parnasmi | 14.04.2013, 05:28 #
Всем спасибо. Сейчас попробую переделать. Отпишусь.
ava
parnasmi | 14.04.2013, 14:16 #
To SanchezzzbaLamooot, спасибо за помощь и наводки  , но, к сожалению таки не смог решит проблему. Нашёл исходные файлы автора.  Покопаюсь там, можно кое - что найду.
ava
baLamooot | 15.04.2013, 01:02 #
parnasmi, в классе Mcontent поменяйте декларацию метода 

function return_content($id = NULL)
 на 

function return_content($id = 'null')

Обе указанные ошибки должны исчезнуть.
ava
parnasmi | 15.04.2013, 09:30 #
Цитата (baLamooot @ 15.4.2013,  01:02)
parnasmi, в классе Mcontent поменяйте декларацию метода 


function return_content($id = NULL)

 на 


function return_content($id = 'null')



Обе указанные ошибки должны исчезнуть.

Спасибо. Вероятно, проблема не в 'null' . Результат тот же и в NULL и в 'null'. Различие кодов у автора и моего не много.  все равно все переделал как у автора. Но все равно у меня контента не выводиться. Выводятся только если прописать полный путь до id. При нажатии на ссылки меню ничего не происходить. Домен на локалке - kostix.loc. Вот что выходит через index.php
[img]http://s2.ipicture.ru/uploads/20130415/thumbs/y6a7thkj.jpg[/img]

Вывод надпись а "Привет. Это, я, таракан." происходить автоматически если при выводе vcontent.php не сушествует id. Вот что происходит при нажатии на ссылки меню

[img]http://s1.ipicture.ru/uploads/20130415/thumbs/2IPYnRxb.jpg[/img]

Вот и мучаюсь. Как делать так чтобы через меню выводились соответствующие контенты из базы? Исходники прикрепил на всякий случай.
ava
Gannibal | 15.04.2013, 20:21 #
Вроде ка у тебя ID выводится с двумя пробелами, они могут эту ошибку и обрабатывать, %20 означает в url_encode пробел.
ava
parnasmi | 19.04.2013, 21:29 #
Проблема решена. Тему можно закрыт. Ошибка был в синтаксисе PHP. И ешё кое-где. Всем спасибо.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit