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
Форумы портала PHP.SU :: Версия для печати :: Один из первых классов
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Один из первых классов

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

1. foozzi - 07 Мая, 2013 - 23:58:09 - перейти к сообщению
Это мой один из первых классов, хотелось бы услышать ошибки, которые я допустил.
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. }
2. caballero - 08 Мая, 2013 - 00:09:57 - перейти к сообщению
а смысл этого класса если весь функционал выщ\зывается в конструкторе - можно просто одной функцией заменить.

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

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

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

разберись сначала с процедурным програмированием
надергать с инета тупо функции в один класс к ООП никакого отношения не имеет
3. DelphinPRO - 08 Мая, 2013 - 00:16:57 - перейти к сообщению
Зависимый, не мобильный. Хотя, судя по назначению, лучше было бы сделать класс максимально независимым от других частей системы.
О чем я: использование констант, использование внутри посторонней функциии, использование внутри постороннего класса.
Если я возьму ваш класс для использования в своей системе, он не заработает, потому что у меня нет функции display_msg(), нет константы UPLOAD_DIR и т.д., ну вы поняли.

как сделать: необходимые данные передавать в объект класса при создании (в конструктор), либо определить статические поля (для значений, вместо которых вы используете константы).
Базу данных не использовать вообще. Это класс загрузки файлов. Он должен загружать файлы, возвращать путь к загруженному файлу (например), и более ничего. Запись в БД должен делать тот, кто вызвал этот класс.
4. DeepVarvar - 08 Мая, 2013 - 16:40:29 - перейти к сообщению
Ну вот, foozzi получил конкретную критику. С чем и поздравляю.
5. foozzi - 10 Мая, 2013 - 21:39:31 - перейти к сообщению
DeepVarvar пишет:
Ну вот, foozzi получил конкретную критику. С чем и поздравляю.

не страшно, я работаю над кодом) пытаюсь оттачивать )
6. foozzi - 12 Мая, 2013 - 00:58:31 - перейти к сообщению
Вот еще пишу статичный класс авторизации, знаю что он убог и логика его убога, но хотелось бы спросить, есть ли возможность обхода авторизации по этому методу? то есть "нарисовать" куки и получить доступ?
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. ?>
7. DeepVarvar - 12 Мая, 2013 - 03:14:45 - перейти к сообщению
Почему (зачем) одни св-ва приватные, а другие защищенные?
8. _Dark_ - 12 Мая, 2013 - 09:03:14 - перейти к сообщению
foozzi пишет:
Вот еще пишу статичный класс авторизации, знаю что он убог и логика его убога

Ну так не пишите так.
9. foozzi - 12 Мая, 2013 - 21:26:54 - перейти к сообщению
DeepVarvar пишет:
Почему (зачем) одни св-ва приватные, а другие защищенные?

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

 

Powered by ExBB FM 1.0 RC1