Xwab
Форумыnavigate_nextПрограммирование на PHP

Не работает метод в классе
Сообщения
Istsam

<?php
if(!defined('COPY')){exit('Верни копирайт');}

class Main extends Template
{
   function __construct($Template,$db)
      {
         $this -> db = $db;
      
      }
      
   function open_site($value,$text_close_site,$title,$exit)
      {
         $Template = Registry::get('Template');
         if($value == 0)
         {
            $Template -> set('{title}','Сайт закрыт');
            $Template -> header();
            $Template -> remove('{title}');
            $Template -> set('{message}', $text_close_site);
            $Template -> set('{title}', $title);
            $Template -> view(TEMP.'/other/message.tpl');
            $Template -> remove('{message}');
            $Template -> remove('{title}');
            $Template -> footer($exit);
         }
      }
         
      function upload($file,$dir,$extension,$size,$name,$system)
         {
         $db = Registry::get('db'); // PDO
         $Template = Registry::get('Template'); // шаблонизатор
            if(!empty($file))
               {
                  if(in_array($extension, explode(',', $system['true_extension'])))
                     {
                        $Template -> set('{error}','Не допустимое расширение');
                        $Template -> view(TEMP.'/other/error.tpl');
                        $Template -> footer('yes');
                     }
                  
                  if($size > $system['max_size'])
                     {
                        $Template -> set('{error}','Не допустимый размер');
                        $Template -> view(TEMP.'/other/error.tpl');
                        $Template -> footer('yes');                           
                     }
                  $stmt = $this -> db -> query("SELECT COUNT(*) as `count` FROM `files` WHERE `name` = '".$name."'");
                  $result = $stmt->fetch(PDO::FETCH_ASSOC);
                  if($result['count']>0)
                  //   if($this -> db -> query("SELECT COUNT(*) FROM `files` WHERE `name` = '".$name."'", PDO::FETCH_ASSOC)->fetchAll() > 0)
                     {
                        $Template -> set('{error}','Такой файл уже существует');
                        $Template -> view(TEMP.'/other/error.tpl');
                        $Template -> footer('yes');      
                     }   
                     
                  $insert = $this -> db -> prepare("INSERT INTO `files` (`name`,`time`,`size`) VALUES(?,?,?)");
                  $insert -> execute(array($name, time(), $size));
                  if($insert == true)
                     {
                        $patch = $dir.$name.'_'.$db -> lastInsertId().'.'.$extension;
                        move_uploaded_file($file, $patch);
                        chmod($patch, 0666);
                        $Template -> set('{title}','Файл успешно добавлен');
                        
                        foreach($db -> query("SELECT * FROM `files` WHERE `id`='".$db -> lastInsertId()."'") as $sql)
                     
                        $Template -> set('{message}','
                        Информация о файле:<br/>
                        Название: '.Anti_Xac::output($sql['name']).'<br/>
                        Вес: '.size($sql['size']).'<br/>
                        Ссылка на файл: <input "type"="text" value="'.URL.'/?m=file&amp;id='.Anti_Xac::num($sql['id']).'"><br/>
                        &raquo; <a href="'.URL.'/?m=file&amp;id='.Anti_Xac::num($sql['id']).'">К Файлу</a>
                        ');
                        $Template -> view(TEMP.'/other/message.tpl');
                        $Template -> footer('yes');
                     }
                     else
                     {
                        $Template -> set('{error}','Произошла ошибка при записи');
                        $Template -> view(TEMP.'/other/error.tpl');
                        $Template -> footer('yes');   
                     }                          
               }
         }

}

$Main = new Main($Template,$db);
?>


__________
посл.ред. 31 Авг 2011, 11:09; всего 2 раз(а) 31 Авг 2011, 10:22
manyrus

Istsam, а зачем модель, вид, контроллер иметь сразу в 1 классе? Трудно разделить? Сори, но не выдержался.

31 Авг 2011, 10:27
Istsam

manyrus,
это всё в разных файлах.
Контроллер: upload.php
Модель: Main.php
Отображение: message.tpl

31 Авг 2011, 10:29
deadline404

$this->templates а разве ты её обьявил что бы наследовать?
так же и с бд которую ты потом хочешь применить


__________
посл.ред. 31 Авг 2011, 10:33; всего 1 раз 31 Авг 2011, 10:32
Istsam

D.T.S, не совсем понял про что ты

31 Авг 2011, 10:33
manyrus

Istsam, тебе же написано, php не может конвертировать в int. Просто ты выполнил query, но не обработал запрос. И, надеюсь, ты фильтруешь всё. А то сомневаюсь я, что переменная $name обработана.
Кинь сюда, что выведет данный код.

$stmt = $this -> db -> query("SELECT COUNT(*) FROM `files` WHERE `name` = '".$name."'");
var_dump($stmt->execute());

31 Авг 2011, 10:34
Istsam

manyrus, Уведомление

Undefined property: Main::$db
Файл: Main.php, строка 27

Fatal error: Call to a member function query() on a non-object in X:\home\test1.ru\www\common\autoload\Main.php on line 27

31 Авг 2011, 10:36
manyrus

Istsam, нед, в данный момент у тебя ттук(толсты тупой уродливый контролер.)
А именно:
Модель:

$result -> $db -> prepare("INSERT INTO `files` (`name`,`time`,`size`) VALUES(?,?,?)");
                     $result -> execute(array($name, time(), $size));
//////////////////
$this -> db -> query("SELECT COUNT(*) FROM `files` WHERE `name` = '".$name."'")

Контроллер вообще не должен знать, работает он с дб или на файлах - это дело модели.
view:
$this -> Template -> set('{message}','
                           Информация о файле:<br/>
                           Название: '.Anti_Xac::output($sql['name']).'<br/>
                           Вес: '.size($sql['size']).'<br/>
                           Ссылка на файл: <input "type"="text" value="'.URL.'/?m=file&amp;id='.Anti_Xac::num($sql['id']).'"><br/>
                           &raquo; <a href="'.URL.'/?m=file&amp;id='.Anti_Xac::num($sql['id']).'">К Файлу</a>
                           ');
Запомни, разметки в контроллере не должно быть разметки.


__________
посл.ред. 31 Авг 2011, 10:38; всего 1 раз 31 Авг 2011, 10:37
deadline404

5,
а.., только заметил, у тебя же класс наследуется. извиняюсь.

31 Авг 2011, 10:37
manyrus

Istsam, var_dump($this -> db); что выведет?


__________
посл.ред. 31 Авг 2011, 10:39; всего 1 раз 31 Авг 2011, 10:39
Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.