Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с выводом контента в MVC 
:(
    Опции темы
parnasmi
Дата 13.4.2013, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.4.2013

Репутация: нет
Всего: нет



Всем привет. Я - новичок, к тому же чайник 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";

Тут и начинается проблема. Менюшки выводятся , а вот с контентом беда
user posted image

Надпись вывода "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";
        }

Выводиться это:
user posted image

Если набирать сам 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>';


Пожалуйста, покажите "таракана", где мог ошибиться. И, как делать так, чтобы контенты при нажатие на ссылки меню выводились по очереди.Заранее спасибо за помощь.

PM MAIL   Вверх
Sanchezzz
Дата 13.4.2013, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Ошибка в SQL запросе  для mysql  пхшный NULL не совсем NULL для мускула иначе говоря нужно было его передать как строку примерно так 
Код

"WHERE ". (is_null($id) ? 'null' : $id ). " AND ";


Это сообщение отредактировал(а) Sanchezzz - 13.4.2013, 17:43


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
baLamooot
Дата 13.4.2013, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 29.8.2004

Репутация: нет
Всего: нет



Не ясно, где тут MVC, какая-то странная мешанина. Вроде есть что-то, что автор курса считает моделью, контроллером и видом, но чтобы контроллер наследовал модель а get-параметры принимались видом - попахивает клиникой smile

По вопросу. В общем случае если $_GET['id'] не определен или равен нулю (т.е. vcontent.php?id=0 или просто vcontent.php без id), то будет выводиться эта ошибка, поскольку следующие условия срабатывают всегда
Код

if (! '0') { /* код сработает*/}
if (! 0) { /* код сработает*/}
if (! NULL) { /* код сработает*/}


В остальном хорошо бы проверять вообще наличие ключа id у $_GET массива, в случае присутствия приводить к ожидаемому типу (в данном случае к int), а в случае отсутствия заменять своим значением. Если не проверять наличие ключа, при настройке ошибок E_ALL будет еще больше ошибок (верней нотисов). Вообще странно, что расчитанный на девелоперсий инвайронмент Денвер имеет такие щадящие настройки ошибок.

Судя по коду, курс ничему путному не учит. Первый же sql-запрос шлет приветы инъекциям

Это сообщение отредактировал(а) baLamooot - 13.4.2013, 18:02
--------------------
Я не спятил, это мир сошел с ума
PM MAIL   Вверх
parnasmi
Дата 14.4.2013, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.4.2013

Репутация: нет
Всего: нет



Всем спасибо. Сейчас попробую переделать. Отпишусь.
PM MAIL   Вверх
parnasmi
Дата 14.4.2013, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.4.2013

Репутация: нет
Всего: нет



To SanchezzzbaLamooot, спасибо за помощь и наводки  , но, к сожалению таки не смог решит проблему. Нашёл исходные файлы автора.  Покопаюсь там, можно кое - что найду.
PM MAIL   Вверх
baLamooot
Дата 15.4.2013, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 29.8.2004

Репутация: нет
Всего: нет



parnasmi, в классе Mcontent поменяйте декларацию метода 
Код

function return_content($id = NULL)
 на 
Код

function return_content($id = 'null')

Обе указанные ошибки должны исчезнуть.
--------------------
Я не спятил, это мир сошел с ума
PM MAIL   Вверх
parnasmi
Дата 15.4.2013, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.4.2013

Репутация: нет
Всего: нет



Цитата(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
user posted image

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

user posted image

Почему при нажатии на ссылки в адресном строке появляються "http://kostix.loc/?id%20=%201" а не "http://kostix.loc/?id=1"? Вот и мучаюсь. Как переделать так чтобы через меню выводились соответствующие контенты из базы? Исходники прикрепил на всякий случай.

Это сообщение отредактировал(а) parnasmi - 15.4.2013, 16:28

Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  www.rar 4,67 Kb
PM MAIL   Вверх
parnasmi
Дата 19.4.2013, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.4.2013

Репутация: нет
Всего: нет



Проблема решена. Тему можно закрыт. Ошибка был в синтаксисе PHP. И ешё кое-где. Всем спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.