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]   

> Без описания
foozzi
Отправлено: 07 Мая, 2013 - 23:58:09
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


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




Это мой один из первых классов, хотелось бы услышать ошибки, которые я допустил.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. Class Upload extends SimpleImage
  4. {
  5.  
  6.     private $text;
  7.     private $filename;
  8.     private $filesize;
  9.     private $filetmp;
  10.     private $link;
  11.     private $thumb_link;
  12.     private $err;
  13.  
  14.     public $valid_extensions;
  15.  
  16.     public function __construct($text, $name, $size, $tmp)
  17.     {
  18.  
  19.         $this->err = array();
  20.  
  21.  
  22.         $valid_extensions = array('gif', 'jpg', 'png', 'GIF', 'JPG', 'PNG');
  23.  
  24.  
  25.         /**
  26.          * file data array
  27.          */
  28.  
  29.         $this->text = $text;
  30.         $this->filename = $name;
  31.         $this->filesize = $size;
  32.         $this->filetmp = $tmp;
  33.  
  34.         $this->valid_extensions = $valid_extensions;
  35.  
  36.         /**
  37.          * Clean text
  38.          */
  39.  
  40.         $this->text = preg_replace("/[^\\w\\x7F-\\xFF\\s]+/s", "", $this->text);
  41.         $this->text = xss(trim($this->text));
  42.  
  43.         if($this->filesize == 0)
  44.         {
  45.             var_dump($this->valid_extensions);
  46.             $this->err[] = display_msg("Ошибка", "alert-error", "Файл не выбран");
  47.         }
  48.  
  49.         /**
  50.          * get ext file
  51.          */
  52.  
  53.         $this->ex = pathinfo($this->filename, PATHINFO_EXTENSION);
  54.  
  55.         /**
  56.          * unick name for image
  57.          */
  58.  
  59.         $this->new_img_name = uniqid() . '.' . $this->ex;
  60.  
  61.         if (isset($valid_extensions))
  62.         {
  63.             $allowed = 0;
  64.             foreach ($valid_extensions as $ext)
  65.             {
  66.                 if(substr($this->filename, (0 - (strlen($ext) + 1))) == ".".$ext)
  67.                 $allowed = 1;
  68.             }
  69.             if ($allowed == 0)
  70.             {
  71.                 $this->err[] = display_msg('Ошибка', 'alert-error', 'Неверный формат изображения');
  72.             }
  73.         }
  74.  
  75.         /**
  76.          * path for upload and write table
  77.         */
  78.  
  79.         $this->link = UPLOAD_DIR . $this->new_img_name;
  80.         $this->link_thumb = UPLOAD_DIR_THUMB . $this->new_img_name;
  81.  
  82.         if($this->Check_Image($this->filetmp, $valid_extensions))
  83.         {
  84.             $this->err[] = 'Это не картинка';
  85.         }
  86.  
  87.         /**
  88.          * default value for text
  89.          */
  90.  
  91.         if(empty($this->text))
  92.         {
  93.             $this->text = '<span class="label label-success"> Подписи нет </span>';
  94.         }
  95.  
  96.         /**
  97.          * Echo error msg
  98.          */
  99.  
  100.         $this->Error_Count1();
  101.  
  102.         /**
  103.          * start upload and insert data
  104.          */
  105.  
  106.         $this->Uploading();
  107.  
  108.     }
  109.  
  110.     /**
  111.      * anti-upload for other files
  112.      */
  113.  
  114.     private function Check_Image()
  115.     {
  116.         if(!$image_info = get_image_info($this->filetmp) or !in_array($image_info['extension'], $this->valid_extensions))
  117.         {
  118.             return false;
  119.         }
  120.     }
  121.  
  122.     /**
  123.      * function uploading file and insert data to table
  124.      */
  125.  
  126.     private function Uploading()
  127.     {
  128.  
  129.         /**
  130.          * start upload
  131.          */
  132.  
  133.         if(move_uploaded_file($this->filetmp, $this->link))
  134.         {
  135.             /**
  136.              * get size images
  137.              */
  138.  
  139.             list($width, $height) = getimagesize($this->link);
  140.  
  141.             /**
  142.              * if width > thumbnail size
  143.              */
  144.  
  145.             if($width > MAX_FILE_SIZE)
  146.             {
  147.                 $this->load($this->link);
  148.                 $this->resizeToHeight(MAX_FILE_SIZE);
  149.                 $this->save($this->link_thumb);
  150.             }
  151.             else
  152.             {
  153.                 $this->link_thumb = $this->link;
  154.             }
  155.  
  156.             /**
  157.              * if image very small
  158.              */
  159.  
  160.             if($width < MIN_SIZE_FILE || $height < MIN_SIZE_FILE)
  161.             {
  162.                 $this->err[] = display_msg('Ошибка', 'alert-error', 'Пикча маловата');
  163.             }
  164.  
  165.             /**
  166.             * check errors and msg
  167.             */
  168.  
  169.             $this->Error_Count1();
  170.  
  171.             /**
  172.              * connect db
  173.              */
  174.  
  175.             db::connect(HOST, USER, PASSWD, DB);
  176.  
  177.             db::setCharset(CHARSET);
  178.  
  179.             /**
  180.              * insert data to table
  181.              */
  182.  
  183.             db::set("INSERT INTO post (
  184.                id_post,
  185.                text_post,
  186.                img_large,
  187.                img_mini,
  188.                date_post
  189.                ) VALUES (
  190.                '%s',
  191.                '%s',
  192.                '%s',
  193.                '%s',
  194.                NOW()
  195.                )",
  196.                 NULL, $this->text, $this->link, $this->link_thumb
  197.             );
  198.  
  199.             /**
  200.              * Good upload
  201.              */
  202.  
  203.             $this->err[] = display_msg('Сообщение', 'alert-info', 'Сообщение добавлено на проверку');
  204.         }
  205.         else
  206.         {
  207.             /**
  208.              * truble upload
  209.              */
  210.  
  211.             $this->err[] = display_msg('Ошибка', 'alert-error', 'При загрузке возникли какие-то неполадки');
  212.         }
  213.  
  214.         /**
  215.          * echo msg or error
  216.          */
  217.  
  218.             $this->Error_Count1();
  219.  
  220.             exit;
  221.     }
  222.  
  223.     /**
  224.      * function count and return errors and msg
  225.      */
  226.  
  227.     private function Error_Count1()
  228.     {
  229.         if(count($this->err) != 0)
  230.         {
  231.             foreach($this->err as $display_error)
  232.             {
  233.                 $this->error_dis = $display_error;
  234.                 echo $this->error_dis;
  235.                 exit;
  236.             }
  237.         }
  238.     }
  239.  
  240. }


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
caballero
Отправлено: 08 Мая, 2013 - 00:09:57
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




а смысл этого класса если весь функционал выщ\зывается в конструкторе - можно просто одной функцией заменить.

во первых конструктор служит для инициализации объекта а не для выполнения логики и тем более работы с БД

во вторых какой смысл проверять на ошибки если потом все равно вызывается uploading()

в третих клас ничего не инкапсулирует - на фига он тогда? можно просто вызывать статические методы.

разберись сначала с процедурным програмированием
надергать с инета тупо функции в один класс к ООП никакого отношения не имеет


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DelphinPRO
Отправлено: 08 Мая, 2013 - 00:16:57
Post Id



Активный участник


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


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




Зависимый, не мобильный. Хотя, судя по назначению, лучше было бы сделать класс максимально независимым от других частей системы.
О чем я: использование констант, использование внутри посторонней функциии, использование внутри постороннего класса.
Если я возьму ваш класс для использования в своей системе, он не заработает, потому что у меня нет функции display_msg(), нет константы UPLOAD_DIR и т.д., ну вы поняли.

как сделать: необходимые данные передавать в объект класса при создании (в конструктор), либо определить статические поля (для значений, вместо которых вы используете константы).
Базу данных не использовать вообще. Это класс загрузки файлов. Он должен загружать файлы, возвращать путь к загруженному файлу (например), и более ничего. Запись в БД должен делать тот, кто вызвал этот класс.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Мая, 2013 - 16:40:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Ну вот, foozzi получил конкретную критику. С чем и поздравляю.
 
 Top
foozzi
Отправлено: 10 Мая, 2013 - 21:39:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


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




DeepVarvar пишет:
Ну вот, foozzi получил конкретную критику. С чем и поздравляю.

не страшно, я работаю над кодом) пытаюсь оттачивать )


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
foozzi
Отправлено: 12 Мая, 2013 - 00:58:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


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




Вот еще пишу статичный класс авторизации, знаю что он убог и логика его убога, но хотелось бы спросить, есть ли возможность обхода авторизации по этому методу? то есть "нарисовать" куки и получить доступ?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class Auth {
  4.  
  5.     private static $username;
  6.     private static $password;
  7.  
  8.     protected static $user;
  9.     protected static $length = 6;
  10.     protected static $code = "";
  11.     protected static $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
  12.  
  13.     public static $msg;
  14.  
  15.  
  16.     /**
  17.      * Attempts to log a user in with the given credentials
  18.      *
  19.      * @param   string  $username
  20.      * @param   string  $password
  21.      * @return  bool
  22.      */
  23.  
  24.     public static function attempt($username, $password)
  25.     {
  26.  
  27.         $password = md5(md5(trim($password)));
  28.        
  29.         $Get_User = db::normalizeQuery("SELECT * FROM users WHERE name_user = '%s' AND passwd_user = '%s'", $username, $password);
  30.        
  31.         if ($user = $Get_User)
  32.         {
  33.             self::$user = $user;
  34.  
  35.             self::Login();
  36.  
  37.             return true;
  38.         }
  39.  
  40.         return false;
  41.     }
  42.  
  43.     /**
  44.      * login function
  45.      */
  46.  
  47.     protected static function Login()
  48.     {
  49.  
  50.         db::set("UPDATE users SET hash_user = '%s' WHERE id_user = '%s'", self::Ger_Hash(), self::$user['id_user']);
  51.  
  52.         setcookie("id_user", self::$user['id_user'], time()+60*60*24*30);
  53.  
  54.         setcookie("hash", self::Ger_Hash(), time()+60*60*24*30);
  55.  
  56.         $_SESSION['user_id'] = self::$user['id_user'];
  57.  
  58.         //$_SESSION['raw'] = 'юзер';
  59.         setcookie("guest", "");
  60.  
  61.         header("Location: /main");
  62.  
  63.     }
  64.  
  65.     /**
  66.      * get user info
  67.      */
  68.  
  69.     public static function info_user()
  70.     {
  71.         $Get_Ingo_User = db::normalizeQuery("SELECT * FROM users WHERE id_user = '%s'", $_SESSION['user_id']);
  72.     }
  73.  
  74.  
  75.     /**
  76.      * Generation hash!
  77.      */
  78.  
  79.     protected static function Ger_Hash()
  80.     {
  81.  
  82.         $clen = strlen(self::$chars) - 1;
  83.  
  84.         while (strlen(self::$code) < self::$length)
  85.         {
  86.  
  87.             self::$code .= self::$chars[mt_rand(0,$clen)];  
  88.         }
  89.  
  90.         return self::$code;
  91.     }
  92.  
  93.  
  94.  
  95.     /**
  96.      * Log out the current user
  97.      *
  98.      * @return  void
  99.      */
  100.  
  101.     public static function logout()
  102.     {
  103.         self::$user = null;
  104.  
  105.         $_SESSION = array();
  106.  
  107.         unset($_SESSION['user_id']);
  108.  
  109.         unset($_SESSION['raw']);
  110.  
  111.         session_destroy();
  112.  
  113.         setcookie("id_user", "", time() - 3600*24*30*12, "/");
  114.  
  115.         setcookie("hash", "", time() - 3600*24*30*12, "/");
  116.  
  117.         header("Location: /main");
  118.        
  119.         exit;
  120.     }
  121.  
  122.  
  123.     /**
  124.      * Checks if the current user is a guest
  125.      *
  126.      * @return  bool
  127.      */
  128.  
  129.     public static function guest()
  130.     {
  131.         setcookie("guest", self::Ger_Hash());
  132.         $_SESSION['raw'] = "Гость";
  133.     }
  134.  
  135.     public static function check_session()
  136.     {
  137.         if((empty($_COOKIE['hash'])) && (empty($_COOKIE['id_user'])))
  138.         {
  139.  
  140.             self::guest();
  141.  
  142.         }
  143.  
  144.         else
  145.         {
  146.  
  147.             $Check_cookie = db::normalizeQuery("SELECT * FROM users WHERE hash_user = '%s'", $_COOKIE['hash']);
  148.  
  149.             if($Check_cookie)
  150.  
  151.             {
  152.  
  153.                 $_SESSION['user_id'] = $Check_cookie['id_user'];
  154.                 $_SESSION['raw'] = $Check_cookie['name_user'];
  155.  
  156.             }
  157.             else
  158.             {
  159.                 setcookie("id_user", "", time() - 3600*24*30*12, "/");
  160.  
  161.                 setcookie("hash", "", time() - 3600*24*30*12, "/");
  162.             }
  163.  
  164.         }
  165.     }
  166. }
  167. ?>


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Мая, 2013 - 03:14:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Почему (зачем) одни св-ва приватные, а другие защищенные?
 
 Top
_Dark_
Отправлено: 12 Мая, 2013 - 09:03:14
Post Id


Частый гость


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


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

[+]


foozzi пишет:
Вот еще пишу статичный класс авторизации, знаю что он убог и логика его убога

Ну так не пишите так.
 
 Top
foozzi
Отправлено: 12 Мая, 2013 - 21:26:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


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




DeepVarvar пишет:
Почему (зачем) одни св-ва приватные, а другие защищенные?

Приватные используются только в том классе где они были объявлены, а защищенные могу использоватся в наледуемых и родительных классах


-----
90% ошибок находятся в полуметре от монитора...
 
 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