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. Okula - 11 Декабря, 2011 - 12:09:02 - перейти к сообщению
Написал небольшой скрипт прокрутки рекламмы, немогли бы гуруоставить рекомендации по коду, подталкнуть в развитии, может я не так что делаю в програмировании.
Вобщем интересно знать авторитетное мнение. Улыбка
Просмотреть архив со скриптом онлайн можно тут: http://dzwap[dot]ru/down/ziprar.php?id=3465
Сам архив прикреплю ниже
2. russia.semenov - 11 Декабря, 2011 - 12:20:06 - перейти к сообщению
прикрепи код сюда посмотрю.
3. Okula - 11 Декабря, 2011 - 12:24:01 - перейти к сообщению
Я прикрепил архив со скриптом к первому посту.
Прикреплю сдесь ещё класс вывода рекламы из архива:
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.  
4. z1o - 11 Декабря, 2011 - 12:55:44 - перейти к сообщению
Возможен подбор пароля в админку.
5. Okula - 11 Декабря, 2011 - 13:13:05 - перейти к сообщению
Да, с созданием хеша я не заморачивался, добавить соль туде дело минутное. Интересует сама организация кода, есть ли какие серьёзные недочёты или недороботки? То что обычно говнокодом называют Улыбка
P.S. скрипт работает в режиме E_ALL не создавая никаких ошибок.
6. z1o - 11 Декабря, 2011 - 13:26:01 - перейти к сообщению
Если будет включен параметр 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. }
7. Okula - 11 Декабря, 2011 - 13:42:43 - перейти к сообщению
Спасибо, учту. Но не проще ли просто отключить magic_quotes_gpc в .htaccess и знать наверняка что ошибок не будет Улыбка
8. z1o - 11 Декабря, 2011 - 15:01:14 - перейти к сообщению
Okula пишет:
Спасибо, учту. Но не проще ли просто отключить magic_quotes_gpc в .htaccess и знать наверняка что ошибок не будет


Не всегда и не везде можно отключать magic_quotes_gpc в .htaccess.
9. Okula - 11 Декабря, 2011 - 15:17:31 - перейти к сообщению
Задался таким вопросом: Разьве функция sqlite_escape_string() не экранирует кавычки как это, например, делает функция mysqli_real_escape_string() или метод класса MySQLi real_escape_string() ??? Непонял!
10. z1o - 11 Декабря, 2011 - 15:22:11 - перейти к сообщению
Okula пишет:
Задался таким вопросом: Разьве функция sqlite_escape_string() не экранирует кавычки как это, например, делает функция mysqli_real_escape_string() или метод класса MySQLi real_escape_string()


Для этих всех функций нужны разные расширения. Да и экранирования который требует MYSQL и SQLite разные.
11. Okula - 11 Декабря, 2011 - 15:28:59 - перейти к сообщению
Спасибо, буду знать. Это просто мой первый опыт работы со SQLite, а литература по которой я изучал это расширенеие не очень новое ( 2006г. издания ).

 

Powered by ExBB FM 1.0 RC1