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]   

> Описание: Написал небольшой скрип, немоглибы оставить рекомендации по коду.
Okula
Отправлено: 11 Декабря, 2011 - 12:09:02
Post Id



Участник


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


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




Написал небольшой скрипт прокрутки рекламмы, немогли бы гуруоставить рекомендации по коду, подталкнуть в развитии, может я не так что делаю в програмировании.
Вобщем интересно знать авторитетное мнение. Улыбка
Просмотреть архив со скриптом онлайн можно тут: http://dzwap[dot]ru/down/ziprar.php?id=3465
Сам архив прикреплю ниже
Скачать файл: Advt_control_(alfa).zip
Скачан раз: 67
 
 Top
russia.semenov
Отправлено: 11 Декабря, 2011 - 12:20:06
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Сент. 2011  
Откуда: Красноярск, Россия


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




прикрепи код сюда посмотрю.


-----
Бесплатные уроки по созданию сайта.
http://roosny[dot]ru/
 
 Top
Okula
Отправлено: 11 Декабря, 2011 - 12:24:01
Post Id



Участник


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


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




Я прикрепил архив со скриптом к первому посту.
Прикреплю сдесь ещё класс вывода рекламы из архива:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. /**
  4.  * Advt control [alfa]
  5.  * Автор скрипта: Okula (Александр Третьяков)
  6.  * Дата нипасания скрипта: 11.12.2011г.
  7.  * Сайт: http://dzwap.ru
  8.  * ICQ: 8322665
  9.  *
  10.  * Скрипт распространяется на бесплатной основе. Продажа скрипта запрещена.
  11.  */
  12.  
  13. class Reclama {
  14.    
  15.     private $db;
  16.     private $separate = '<br />'; // Разделитель между ссылками в блоке
  17.  
  18.     /**
  19.      * Открытие соединения с базой данных SQLite
  20.      *
  21.      * @param string $filename путь до файла базы данных
  22.      * @param int $mode права доступа к файлу базы (идентично функции chmod() )
  23.      */
  24.     function __construct($filename, $mode=0666) {
  25.         try {
  26.             $this->db = new SQLiteDatabase($filename, $mode, $error_message);
  27.             if(!empty($error_message)) throw new SQLiteException($error_message);
  28.            
  29.             $this->deleteOldLinks();
  30.         } catch (SQLiteException $error) {
  31.             $this->printError($error);
  32.         }
  33.     }
  34.  
  35.  
  36.     /**
  37.      * Вывод одной ссылки
  38.      *
  39.      * @param int $int Номер ссылки по порядку убывания (по умолчанию 0 - первая ссылка)
  40.      * @return string Возвращает HTML код одной ссылки указанной в порядке убывания из списка
  41.      */
  42.     public function getOneLink($int=0) {
  43.         $int = abs((int)$int);
  44.         $col = (int)$this->db->singleQuery("SELECT COUNT(*) FROM links WHERE real_time>".TIME);
  45.         if($col == 0) return FALSE;
  46.        
  47.         if($col < $int) $int = $col;
  48.         $result = $this->db->query("SELECT * FROM links WHERE ".TIME."<real_time ORDER BY id ASC LIMIT $int, 1", SQLITE_ASSOC);
  49.         $info = $result->fetch();
  50.         $names = unserialize($info['names']);
  51.        
  52.         return '<a href="'.$info['addres'].'">'.escapeHTML($this->getRandomName($names)).'</a>';
  53.     }
  54.    
  55.     /**
  56.      * Вывод блока ссылок
  57.      *
  58.      * @return string Вывод блока ссылок разделённых между собой разделителем $separate
  59.      */
  60.     public function getBlockLinks() {
  61.         $col = (int)$this->db->singleQuery("SELECT COUNT(*) FROM links WHERE real_time>".TIME);
  62.         if($col !== 0) {
  63.             $result = $this->db->query("SELECT * FROM links WHERE real_time>".TIME." ORDER BY id ASC", SQLITE_ASSOC);
  64.             $block = '';
  65.             while($info = $result->fetch()) {
  66.                 $names = unserialize($info['names']);
  67.                 $block .= '<a href="'.$info['addres'].'">'.escapeHTML($this->getRandomName($names)).'</a>';
  68.                 if($col > 1) $block .= $this->separate;
  69.             }
  70.             return $block;
  71.         } else {
  72.             return FALSE;
  73.         }
  74.     }
  75.  
  76.     /**
  77.      * Печатает ошибку SQLite
  78.      *
  79.      * @param SQLiteException $error сгенерированное сообщение об ошибке в HTML форме
  80.      */
  81.     public function printError(SQLiteException $error) {
  82.         echo '<p><strong>Ошибка:</strong> '.$error->getMessage().'            <strong>Файл:</strong> '.$error->getFile().'            <strong>Строка:</strong> '.$error->getLine().'</p>';
  83.     }
  84.    
  85.     /**
  86.      * Выбор рандомного названия ссылки из массива
  87.      *
  88.      * @param array $array Массив с название сылки
  89.      * @return string Возвращает одно название из массива
  90.      */
  91.     private function getRandomName($array) {
  92.         $col = count($array)-1;
  93.         if($col > 1) $key = mt_rand(0, $col); else $key[0];
  94.         return $array[$key];
  95.     }
  96.    
  97.     /**
  98.      * Удаление просроченных ссылок
  99.      */
  100.     private function deleteOldLinks() {
  101.         $col = $this->db->singleQuery("SELECT COUNT(*) FROM links WHERE real_time<".TIME);
  102.         if($col !== 0) {
  103.             $this->db->queryExec("BEGIN;
  104.                DELETE FROM links WHERE real_time<".TIME.";
  105.                COMMIT;");
  106.         }
  107.     }
  108.    
  109. }
  110.  
  111. ?>
  112.  

(Отредактировано автором: 11 Декабря, 2011 - 12:24:43)

 
 Top
z1o
Отправлено: 11 Декабря, 2011 - 12:55:44
Post Id


Новичок


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


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




Возможен подбор пароля в админку.

(Отредактировано автором: 11 Декабря, 2011 - 12:59:14)

 
 Top
Okula
Отправлено: 11 Декабря, 2011 - 13:13:05
Post Id



Участник


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


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




Да, с созданием хеша я не заморачивался, добавить соль туде дело минутное. Интересует сама организация кода, есть ли какие серьёзные недочёты или недороботки? То что обычно говнокодом называют Улыбка
P.S. скрипт работает в режиме E_ALL не создавая никаких ошибок.
 
 Top
z1o
Отправлено: 11 Декабря, 2011 - 13:26:01
Post Id


Новичок


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


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




Если будет включен параметр magic_quotes_qpc, реклама может неправильно добавиться в БД.
(Добавление)
PHP:
скопировать код в буфер обмена
  1. function escapeSTR($value)
  2. {
  3.     // если magic_quotes_gpc включена - используем stripslashes
  4.     if (get_magic_quotes_gpc())  $value = stripslashes($value);
  5.  
  6.     // Если переменная - число, то экранировать её не нужно
  7.     // если нет - то окружем её кавычками, и экранируем
  8.     if (!is_numeric($value))  $value = "'" . sqlite_escape_string($value) . "'";
  9.     return $value;
  10. }
 
 Top
Okula
Отправлено: 11 Декабря, 2011 - 13:42:43
Post Id



Участник


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


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




Спасибо, учту. Но не проще ли просто отключить magic_quotes_gpc в .htaccess и знать наверняка что ошибок не будет Улыбка
 
 Top
z1o
Отправлено: 11 Декабря, 2011 - 15:01:14
Post Id


Новичок


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


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




Okula пишет:
Спасибо, учту. Но не проще ли просто отключить magic_quotes_gpc в .htaccess и знать наверняка что ошибок не будет


Не всегда и не везде можно отключать magic_quotes_gpc в .htaccess.
 
 Top
Okula
Отправлено: 11 Декабря, 2011 - 15:17:31
Post Id



Участник


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


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




Задался таким вопросом: Разьве функция sqlite_escape_string() не экранирует кавычки как это, например, делает функция mysqli_real_escape_string() или метод класса MySQLi real_escape_string() ??? Непонял!
 
 Top
z1o
Отправлено: 11 Декабря, 2011 - 15:22:11
Post Id


Новичок


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


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




Okula пишет:
Задался таким вопросом: Разьве функция sqlite_escape_string() не экранирует кавычки как это, например, делает функция mysqli_real_escape_string() или метод класса MySQLi real_escape_string()


Для этих всех функций нужны разные расширения. Да и экранирования который требует MYSQL и SQLite разные.
 
 Top
Okula
Отправлено: 11 Декабря, 2011 - 15:28:59
Post Id



Участник


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


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




Спасибо, буду знать. Это просто мой первый опыт работы со SQLite, а литература по которой я изучал это расширенеие не очень новое ( 2006г. издания ).
 
 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