PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (7): « 1 2 3 4 [5] 6 7 »

> Найдено сообщений: 92
MrBeard Отправлено: 21 Сентября, 2011 - 11:27:41 • Тема: AJAX Events Calendar • Форум: JavaScript & VBScript

Ответов: 10
Просмотров: 4744
Uchenik пишет:
В этом архиве есть такой интересный календарь, при клике по дате, выскакивает окно, туда вбивается название события, и оно добавляется в нужный день. Вот как сделать чтобы это сохранялось?
Мне придётся полностью с нуля писать файл обработки события, так?

ну, в скачиваемом архиве только один пример с отправкой данных, так что да, тебе нужно будет написать свой код для работы с базой данных. сам календарь - чистый JS, ему фиолетово, откуда ты и как будешь данные слать=) а формат данных представлен
MrBeard Отправлено: 21 Сентября, 2011 - 09:18:08 • Тема: Вопрос к матерым об общей идее конструкторов • Форум: Объектно-ориентированное программирование

Ответов: 46
Просмотров: 8994
EuGen пишет:
Правильнее поручить валидацию специальному классу (валидатору), а непосредственно саму логику обработки оставить отдельно.
То есть алгоритмически:
0. Пользователь вводит данные
1. Создается объект-валидатор и проверяется корректность данных
2. Если (1) отвечает, что данные в порядке, то далее создается объект-обработчик, который что-то делает с данными. Если (1) отвечает, что есть ошибка - о ней сообщается и происходит возврат к (0)

вопрос по теме - а если существует некое большое количество классов с иерархией, входящие данные для которых различны, и проверки на валидность, соответственно, тоже, то на каждый такой класс нужно городить отдельный класс-валидатор, или создать царь-класс-валидатор, который будет иметь кучу методов проверки на каждый пользовательский класс, или всё же лучше в классах создать метод типа
PHP:
скопировать код в буфер обмена
  1. private function isValid($data)
  2. {
  3.     .....
  4.     return {true | false};
  5. }

я просто интересуюсь, потому что не соображу, какой вариант в PHP будет наиболее прозрачным и легко используемым...
MrBeard Отправлено: 20 Сентября, 2011 - 18:43:01 • Тема: Сохранение времени • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 130
vaam пишет:
А как быть с Zabbix?

Я скачал вот этот дистрибутив
http://prdownloads[dot]sourceforge[dot]n[dot][dot][dot][dot]tar[dot]gz?download

но там все файлы не имеют расширения и я понятия не имею как установить

Может я не то качаю?

http://www[dot]zabbix[dot]com/documentat[dot][dot][dot]ual/installation
=)
MrBeard Отправлено: 19 Сентября, 2011 - 16:55:51 • Тема: AJAX (динамическая форма) • Форум: Вопросы новичков

Ответов: 2
Просмотров: 148
если правильно понял, то что то вроде
CODE (html):
скопировать код в буфер обмена
  1. <input type="button" id="onprN" class="ajaxButton"/>


и скрипт для отправки
CODE (javascript):
скопировать код в буфер обмена
  1. $('.ajaxButton').click(function(){
  2.  
  3.     $.ajax({
  4.         type: "POST",
  5.         url: "action1.php",
  6.         data: "&id=" + $(this).attr("id"),
  7.         cache: false,
  8.         success: function()
  9.         {
  10.              alert ("action");
  11.         }
  12.     })
  13. })
  14.  

но я не проверял, правильно ли я помню)
MrBeard Отправлено: 19 Сентября, 2011 - 15:25:39 • Тема: Сохранение времени • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 130
vaam пишет:
Усё, вроде заработал

Спасибо)

я его чуть позже допилю для автоматического создания БД + добавления серверов и URL из веба, и выложу. авось кому ещё понадобится)))
MrBeard Отправлено: 19 Сентября, 2011 - 14:00:10 • Тема: создание базы и таблиц из SQL файла • Форум: Работа с СУБД

Ответов: 2
Просмотров: 17505
EuGen пишет:
PHP:
скопировать код в буфер обмена
  1. exec('mysql -uUSER -pPASSWORD < /path/to/file.sql');

а средствами самого PHP без вызова внешних утилит нельзя?(
в прочем, код выше уже заработал...
MrBeard Отправлено: 19 Сентября, 2011 - 13:45:41 • Тема: Сохранение времени • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 130
vaam пишет:
Ну у меня не совсем mon

У хостера такая фича, что название базы образуется посредством логина в ПУ+ _то что я добавлю сам

Т.е. если логин в ПУ у меня qwerty,а я пишу mon, то она создаться с названием qwery_mon

тогда в скрипте поменяйте
define("DB_MONITORING_TABLE", 'mon');
на
define("DB_MONITORING_TABLE", 'qwerty_mon');
и не забудьте в базе данных выполнить
GRANT ALL ON qwerty_mon.* TO 'monitor'@'localhost' IDENTIFIED BY 'monmon';
MrBeard Отправлено: 19 Сентября, 2011 - 13:07:56 • Тема: создание базы и таблиц из SQL файла • Форум: Работа с СУБД

Ответов: 2
Просмотров: 17505
для интереса решил добавить создание базы данных и таблиц из SQL скрипта.

Как это вообще через PHP реализуется? для начала я попробовал использовать запрос, как в клиенте делал - source monitoring.sql. нашло ошибки в SQL. после гугленья нашёл пример, где такой файл разбивался по точке с запятой и каждая команда запускалась отдельно, но у меня уже на строчке создания базы данных выпадает.

код -
PHP:
скопировать код в буфер обмена
  1.  
  2. $db = mysql_connect(DB_HOST, $dbUser, $dbPass);
  3. $fileContent = file_get_contents($sqlFile);
  4. $sqlArray = explode(';', $fileContent);
  5. foreach ($sqlArray as $sql)
  6. {
  7.     if (!mysql_query($sql,$db))
  8.         echo "Error creating database: " . mysql_
  9. }

ошибка -
CODE (htmlphp):
скопировать код в буфер обмена
  1. Error creating database: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '&#65279;CREATE DATABASE IF NOT EXISTS `mon` DEFAULT CHARACTER SET UTF8' at line 1


сам скрипт вот -
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE DATABASE IF NOT EXISTS `mon` DEFAULT CHARACTER SET UTF8 ;
  2. GRANT ALL ON mon.* TO 'monitor'@'localhost' IDENTIFIED BY 'monmon';
  3. USE `mon` ;
  4.  
  5. -- -----------------------------------------------------
  6. -- Table `mon`.`server_t`
  7. -- -----------------------------------------------------
  8. CREATE  TABLE IF NOT EXISTS `mon`.`server_t` (
  9.   `server_id` INT NOT NULL AUTO_INCREMENT ,
  10.   `server_name` VARCHAR(45) NOT NULL ,
  11.   PRIMARY KEY (`server_id`) )
  12. ENGINE = InnoDB;
  13.  
  14.  
  15. -- -----------------------------------------------------
  16. -- Table `mon`.`url_t`
  17. -- -----------------------------------------------------
  18. CREATE  TABLE IF NOT EXISTS `mon`.`url_t` (
  19.   `url_id` INT NOT NULL AUTO_INCREMENT ,
  20.   `server_id` INT NOT NULL ,
  21.   `host` VARCHAR(150) NOT NULL,
  22.   `port` INT NOT NULL,
  23.   `timeout` INT NOT NULL,
  24.   PRIMARY KEY (`url_id`) ,
  25.   INDEX `fk_url_t_server_t` (`server_id` ASC) ,
  26.   CONSTRAINT `fk_url_t_server_t`
  27.     FOREIGN KEY (`server_id` )
  28.     REFERENCES `mon`.`server_t` (`server_id` )
  29.     ON DELETE NO ACTION
  30.     ON UPDATE NO ACTION)
  31. ENGINE = InnoDB;
  32.  
  33.  
  34. -- -----------------------------------------------------
  35. -- Table `mon`.`state_t`
  36. -- -----------------------------------------------------
  37. CREATE  TABLE IF NOT EXISTS `mon`.`state_t` (
  38.   `state_id` INT NOT NULL AUTO_INCREMENT ,
  39.   `state_name` VARCHAR(45) NOT NULL ,
  40.   PRIMARY KEY (`state_id`) )
  41. ENGINE = InnoDB;
  42.  
  43.  
  44. -- -----------------------------------------------------
  45. -- Table `mon`.`monitoring_t`
  46. -- -----------------------------------------------------
  47. CREATE  TABLE IF NOT EXISTS `mon`.`monitoring_t` (
  48.   `monitoring_id` INT NOT NULL AUTO_INCREMENT ,
  49.   `server_id` INT NOT NULL ,
  50.   `state_id` INT NOT NULL ,
  51.   `date` TIMESTAMP NOT NULL,
  52.   PRIMARY KEY (`monitoring_id`) ,
  53.   INDEX `fk_monitoring_1` (`server_id` ASC) ,
  54.   INDEX `fk_monitoring_2` (`state_id` ASC) ,
  55.   CONSTRAINT `fk_monitoring_1`
  56.     FOREIGN KEY (`server_id` )
  57.     REFERENCES `mon`.`server_t` (`server_id` )
  58.     ON DELETE NO ACTION
  59.     ON UPDATE NO ACTION,
  60.   CONSTRAINT `fk_monitoring_2`
  61.     FOREIGN KEY (`state_id` )
  62.     REFERENCES `mon`.`state_t` (`state_id` )
  63.     ON DELETE NO ACTION
  64.     ON UPDATE NO ACTION)
  65. ENGINE = InnoDB;
  66.  
  67. INSERT INTO state_t VALUES
  68.         (1,"oK"),
  69.         (2,"have problems"),
  70.         (3,"offline");
  71.  


думал глянуть, как у других реализуется, там используется pear SqlParser, я с ними пока не сталкивался, стоит ли копать туда?
(Добавление)
по поводу ошибки разобрался - 'CREATE DATABASE IF NOT EXISTS `mon` DEFAULT CHARACTER SET UTF8' at line 1

чётров BOM=)
MrBeard Отправлено: 19 Сентября, 2011 - 12:57:55 • Тема: Сохранение времени • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 130
vaam пишет:
Удачно выполнил все SQL запросы, закинул скрипт, но на страничке со скриптом висит надпись Can't change DB

Куда копать?

проверить, точно ли создалась база mon.
MrBeard Отправлено: 19 Сентября, 2011 - 10:27:14 • Тема: Сохранение времени • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 130
vaam пишет:
хмм..

У меня вот например нет консольного клиента, я попробовал импортировать первый код через пхпмайадмин, но он мне ошибку доступа выбивал.

Мог бы дать ссылочу на путёвый консольный клиент для мускула?


ну, я использую обычно тупо консоль. на сервере наверняка есть mysql-client
работает так - из консоли вводишь mysql -uroot -p
дальше пароль рута и всё, ты в мускуле
если неудобно, есть и графические клиенты ,
к примеру - http://dev[dot]mysql[dot]com/downloads/w[dot][dot][dot]rkbench/5[dot]2[dot]html

а ошибка доступа через phpmyadmin... не знаю, почти не пользовался им, попробуй без первых и последних трёх строк им воспользоваться...
и проверь, что есть права для пользователя, под которым ты заходишь)
MrBeard Отправлено: 19 Сентября, 2011 - 08:31:31 • Тема: Сохранение времени • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 130
vaam пишет:
Не совсем понял, как эта штука работает
Я скопировал три этих кода в файлы, закинул их на хост
при вызове php скрипта мне писалось

Can't change db

Я вручную создал БД, и теперь php скрипт отдаёт мне четыре столбика (сервер, статус..)
в бд он ничего не создаёт (

И ещё вот. По Zabbix. Штука интересная, но она как я понял для корпоративных сетей. есть ли нечто подобное, но чтобы работал с серверами в интернете. Я пытался найти, но выбивает лишь мониторинг для кс и т.д.


первые два скрипта - это как раз СОЗДАНИЕ БД и добавление данных
то есть, подключаешься к БД через консольный клиент, и вставляешь первый скрипт полностью. он создаёт базу и таблицы, даёт права пользователю monitor
из второго скрипта обязательная часть -
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO state_t VALUES
  2.         (1,"oK"),
  3.         (2,"have problems"),
  4.         (3,"offline");

точно так же в консоли вставляешь и он заносит эти данные.

CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO server_t VALUES
  2.         (1,"google"),
  3.         (2,"yandex");
  4. INSERT INTO url_t VALUES
  5.         (DEFAULT, 1, "www.google.ru", 80, 5),
  6.         (DEFAULT, 2, "www.yandex.ru", 80, 5),
  7.         (DEFAULT, 2, "www.ya.ru", 80, 5);

это пример добавления серверов, которые нужно мониторить. первый insert создаёт записи в таблице server_t, где хранятся сущности сервера, второй - записи в url_t
один и тот же сервер можно мониторить одновременно под одному или нескольким уникальным сочетаниям host + port + timeout

теперь по поводу zabbix. что значит - для корпоративных сетей? ему, в общем то, пофигу, какие серверы мониторить. и делать это он умеет несколькими способами, кажется :
    агент zabbix
    SNMP
    WEB-запросы(с возможностью проходить на сервере несколько действий, чтением результата и проверкой его)

ему нужна машина с базой данных, где бы он работал, и всё, остальное он может делать через интернет)
MrBeard Отправлено: 16 Сентября, 2011 - 23:23:19 • Тема: Копирование массива в классе • Форум: Объектно-ориентированное программирование

Ответов: 3
Просмотров: 2288
туплю)
MrBeard Отправлено: 16 Сентября, 2011 - 20:52:14 • Тема: Набросал • Форум: Напишите за меня, пожалуйста

Ответов: 13
Просмотров: 65
Данил_123 пишет:
Цитата:
Данил_123 глобал регистерс включен?
нет, щас включу, отпишусь

ты ссылку, что я сбросил, прочитал? там как бы крупненько написано - НЕ ДЕЛАЙТЕ ТАК, ИЛИ ВАС ПОКАРАЮТ
MrBeard Отправлено: 16 Сентября, 2011 - 20:43:50 • Тема: Набросал • Форум: Напишите за меня, пожалуйста

Ответов: 13
Просмотров: 65
кажется, примерно понял
http://www.php.net/manual/ru/faq...register-globals
используй _POST или включи register-globals в php.ini
MrBeard Отправлено: 16 Сентября, 2011 - 19:57:49 • Тема: Сохранение времени • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 130
в общем, налячкал слегка.
кстати, знающие, если что не так делаю - подскажите, сам php пока только пробую

по базе данных - скрипт создания БД -
CODE (SQL):
скопировать код в буфер обмена
  1. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  2. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  3. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
  4.  
  5. CREATE SCHEMA IF NOT EXISTS `mon` DEFAULT CHARACTER SET utf8 ;
  6. GRANT ALL ON mon.* TO 'monitor'@'localhost' IDENTIFIED BY 'monmon';
  7. USE `mon` ;
  8.  
  9. -- -----------------------------------------------------
  10. -- Table `mon`.`server_t`
  11. -- -----------------------------------------------------
  12. CREATE  TABLE IF NOT EXISTS `mon`.`server_t` (
  13.   `server_id` INT NOT NULL AUTO_INCREMENT ,
  14.   `server_name` VARCHAR(45) NOT NULL ,
  15.   PRIMARY KEY (`server_id`) )
  16. ENGINE = InnoDB;
  17.  
  18.  
  19. -- -----------------------------------------------------
  20. -- Table `mon`.`url_t`
  21. -- -----------------------------------------------------
  22. CREATE  TABLE IF NOT EXISTS `mon`.`url_t` (
  23.   `url_id` INT NOT NULL AUTO_INCREMENT ,
  24.   `server_id` INT NOT NULL ,
  25.   `host` VARCHAR(150) NOT NULL,
  26.   `port` INT NOT NULL,
  27.   `timeout` INT NOT NULL,
  28.   PRIMARY KEY (`url_id`) ,
  29.   INDEX `fk_url_t_server_t` (`server_id` ASC) ,
  30.   CONSTRAINT `fk_url_t_server_t`
  31.     FOREIGN KEY (`server_id` )
  32.     REFERENCES `mon`.`server_t` (`server_id` )
  33.     ON DELETE NO ACTION
  34.     ON UPDATE NO ACTION)
  35. ENGINE = InnoDB;
  36.  
  37.  
  38. -- -----------------------------------------------------
  39. -- Table `mon`.`state_t`
  40. -- -----------------------------------------------------
  41. CREATE  TABLE IF NOT EXISTS `mon`.`state_t` (
  42.   `state_id` INT NOT NULL AUTO_INCREMENT ,
  43.   `state_name` VARCHAR(45) NOT NULL ,
  44.   PRIMARY KEY (`state_id`) )
  45. ENGINE = InnoDB;
  46.  
  47.  
  48. -- -----------------------------------------------------
  49. -- Table `mon`.`monitoring_t`
  50. -- -----------------------------------------------------
  51. CREATE  TABLE IF NOT EXISTS `mon`.`monitoring_t` (
  52.   `monitoring_id` INT NOT NULL AUTO_INCREMENT ,
  53.   `server_id` INT NOT NULL ,
  54.   `state_id` INT NOT NULL ,
  55.   `date` TIMESTAMP NOT NULL,
  56.   PRIMARY KEY (`monitoring_id`) ,
  57.   INDEX `fk_monitoring_1` (`server_id` ASC) ,
  58.   INDEX `fk_monitoring_2` (`state_id` ASC) ,
  59.   CONSTRAINT `fk_monitoring_1`
  60.     FOREIGN KEY (`server_id` )
  61.     REFERENCES `mon`.`server_t` (`server_id` )
  62.     ON DELETE NO ACTION
  63.     ON UPDATE NO ACTION,
  64.   CONSTRAINT `fk_monitoring_2`
  65.     FOREIGN KEY (`state_id` )
  66.     REFERENCES `mon`.`state_t` (`state_id` )
  67.     ON DELETE NO ACTION
  68.     ON UPDATE NO ACTION)
  69. ENGINE = InnoDB;
  70.  
  71.  
  72.  
  73. SET SQL_MODE=@OLD_SQL_MODE;
  74. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  75. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


таблица с состояниями и тестовые данные(по их примеру можно наполнить любыми)
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO state_t VALUES
  2.         (1,"oK"),
  3.         (2,"have problems"),
  4.         (3,"offline");
  5. INSERT INTO server_t VALUES
  6.         (1,"google"),
  7.         (2,"yandex");
  8. INSERT INTO url_t VALUES
  9.         (DEFAULT, 1, "www.google.ru", 80, 5),
  10.         (DEFAULT, 2, "www.yandex.ru", 80, 5),
  11.         (DEFAULT, 2, "www.ya.ru", 80, 5);
  12.  
  13.  


сам скрипт вот

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class Server
  4. {
  5.         var $id = -1;
  6.         var $name = "";
  7.         var $url = Array();
  8.         var $state = -1;
  9.         var $lastProblem = "";
  10. }
  11.  
  12. class Url
  13. {
  14.     var $host = "";
  15.     var $port = 80;
  16.     var $timeout = 1;
  17. }
  18.  
  19. define("DB_HOST", 'localhost');
  20. define("DB_USER", 'monitor');
  21. define("DB_PASSWORD", 'monmon');
  22. define("DB_MONITORING_TABLE", 'mon');
  23.  
  24. $states = Array();
  25. $servers = Array();
  26.  
  27. $db = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die("DB connection error\n");
  28. mysql_select_db(DB_MONITORING_TABLE, $db) or die("Can`t change db");
  29. getStates($states);
  30. getServerList($servers,$states);
  31. echo "<table><thead><tr><th>Server Name</th><th>Status</th><th>Last Problem</th></tr></thead>";
  32. foreach ($servers as $server)
  33. {
  34.     $lastState = getLastState($server->id);
  35.     getNowState($server);
  36.     if ($server->state != $lastState)
  37.         addStateChanging($server);
  38.     addRow($server);
  39. }
  40. echo "</table>";
  41.  
  42. function getStates(&$states)
  43. {
  44.         $sql = "select state_id, state_name from state_t";
  45.         $result = mysql_query($sql);
  46.         while ($row = mysql_fetch_assoc($result))
  47.         {
  48.         $states[$row["state_id"]] = $row["state_name"];
  49.     }
  50. }
  51.  
  52. function getServerList(&$servers, &$states)
  53. {
  54.     $okState = array_search("oK", $states);
  55.     $sql = "select s.server_id,server_name, host, port, timeout, date
  56.               from server_t as s
  57.               join url_t as u using(server_id)
  58.               left join (select server_id, max(date) as date
  59.                            from monitoring_t as mon
  60.                             where state_id <>$okState
  61.                             group by server_id) as m on s.server_id = m.server_id";
  62.     $result = mysql_query($sql);
  63.     while ($row = mysql_fetch_assoc($result))
  64.     {
  65.         $id = $row["server_id"];
  66.         if(isset($servers[$id])){
  67.             $server = &$servers[$id];
  68.         }
  69.         else{
  70.             $server = new Server;
  71.             $server->id = $id;
  72.             $server->name = $row["server_name"];
  73.             $server->lastProblem = $row["date"];
  74.             $servers[$id] = $server;
  75.         }
  76.         $url = new Url;
  77.         $url->host = $row["host"];
  78.         $url->port = $row["port"];
  79.         $url->timeout = $row["timeout"];
  80.         $server->url[] = $url;
  81.     }
  82. }
  83.  
  84. function getLastState($id)
  85. {
  86.     $state = null;
  87.     $sql = "select state_id
  88.                    from monitoring_t
  89.                    where server_id = $id
  90.                    order by monitoring_id desc
  91.                    limit 1";
  92.     $result = mysql_query($sql);
  93.     if ($result){
  94.         $row = mysql_fetch_row($result);
  95.         $state = $row[0];
  96.     }
  97.     return $state;
  98. }
  99.  
  100. function getNowState(Server $server)
  101. {
  102.     $notResponseCount = 0;
  103.     foreach ($server->url as $url)
  104.     {
  105.         $connect = fsockopen($url->host, $url->port, &$errno, &$errstr, $url->timeout);
  106.         if (!$connect)
  107.             ++$notResponseCount;
  108.     }
  109.     if ($notResponseCount === 0)
  110.         $server->state = 1;
  111.     elseif($notResponseCount !== count($server->url))
  112.         $server->state = 2;
  113.     else
  114.         $server->state = 3;
  115. }
  116.  
  117. function addStateChanging(Server $server)
  118. {
  119.     $sql = "insert into monitoring_t value
  120.                    (default, $server->id, $server->state,now())";
  121.     mysql_query($sql);
  122. }
  123.  
  124. function addRow($server)
  125. {
  126.     global $states;
  127.     echo "<tr><td>" . $server->name . "</td>"
  128.         . "<td>" . $states[$server->state] . "</td>"
  129.         . "<td>" . $server->lastProblem . "</td></tr>";
  130. }
  131.  
  132. ?>


вроде проверил, проблем не было... если что непонятно будет - пишите)

Страниц (7): « 1 2 3 4 [5] 6 7 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB