Смешивание PHP и HTML

В этой части методического пособия будет рассказано о следующем:
  • использовании различных видов маркеров начала и конца - PHP-тегов (от английского tag - признак, дескриптор, описатель);
  • смешивании PHP и HTML внутри вашего исходного кода;
  • Маскировании специальных символов в сценарии для получения правильного результата.
  • Как осуществляется синтаксический анализ PHP

    Поясним работу синтаксического анализатора РНР. Предположим, что вы имеете файл, который содержит некоторый код HTML и некоторый код РНР. Допустим, что этот документ имеет расширение .php. При запросе этого файла браузером происходит следующее:

  • Web-браузер запрашивает у Web-сервера документ с расширением .php;
  • Web-сервер активизирует синтаксический анализатор РНР и пересылает запрос ему;
  • синтаксический анализатор РНР ищет запрошенный файл и просматривает его для получения РНР-кода;
  • когда синтаксический анализатор РНР находит РНР-код, он выполняет его и помещает готовый результат (если он есть) в то место запрошенного файла, где раньше был РНР-код;
  • этот новый результирующий файл отправляется обратно Web-серверу;
  • Web-сервер пересылает его Web-браузеру;
  • Web-браузер отображает результат в своем рабочем окне.
  • Этот метод выполнения кода называется серверным. Метод, при котором исполнение кода, такого, как JavaScript, выполняется браузером, называется клиентским.

    Чтобы смешивать в одном документе код РНР вместе с кодом HTML, РНР-код должен быть отделен от HTML-кода. В следующем знакомстве вы узнаете, как это сделать, используя начальный и конечный тэги РНР.

    Начальный и конечный тэги РНР

    Синтаксический анализатор РНР распознает несколько различных тэгов начала и конца РНР-кода. Он пытается выполнить все то, что расположено между этими тэгами, поэтому лучше, чтобы это был правильный РНР-код. В приведенной ниже таблице показаны три основных типа тэгов начала и конца РНР-кода.

    Т а б л и ц а 1.1. Основные тэги начала и конца PHP-кода

    Открывающий (начальный) тэг Закрывающий (конечный) тэг
    <?php ?>
    <? ?>
    <script language="php"> </script>

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

      1. Откройте любой текстовый редактор, например Блокнот (Notepad).
      2. Введите следующий код, в котором используется первый тип тэгов:

      3. Введите код, в котором используется второй тип тэгов:

      4. Введите код, в котором используется третий тип тэгов:

      5. Сохраните созданный файл под именем phptags.php в корневой папке для документов вашего Web-сервера
      (для Web-сервера Apache в операционной системе Windows - это папка

      C:\WebServer[nic]\HOME\localhost\WWW.


      (nic - это короткий, легко запоминающийся оригинальный псевдоним студента, например: VIP; oblako; nektar; judgin; mhk. Ваш nic должен быть коротким, легко запоминающимся и благозвучным)

      6. Запустите сервер web-сервер Apache щелчком по пиктограмме Start server на панели задач
    • Запустите браузер, в поле Адрес: введите:
    • http://localhost/phptags.php

      и нажмите клавишу Enter. B рабочем окне браузера появится результат работы скрипта:

      Рис. 1.1. Результат работы скрипта phptags.php

      Если вы используете РНР внешнего Web-cepвepa при повторении примеров этой книги, то замените localhoct на доменное имя Web-сервера в поле ввода адреса.

      Совместное использование кодов.

      В предыдущем знакомстве созданный вами файл phptags.php состоял из трех фрагментов РНР-кода, каждый из которых печатал определенный текст HTML. В этом знакомстве мы создадим сценарий, в котором РНР-код будет находиться внутри HTML, и вы увидите, что эти два типа кодов могут мирно сосуществовать в одном документе.

    • Откройте любой текстовый редактор, например Блокнот.
    • Введите следующий код HTML:
    • Далее введите следующий код РНР:
    • Сохраните этот файл с именем firstscript.php в папке документов вашего Web-сервера C:\WebServer[nic]\home\localhost\WWW.
    • Запустите браузер (предварительно проверив, запущен ли Web-сервер), в поле Адрес: введите:
    • http://localhos/firstscript.php

      и нажмите клавишу Enter. В рабочем окне браузера появится результат работы скрипта (Рис. 1.2)

      Рис. 1.2. Результат работы скрипта firstscript.php

    • Выберите в браузере команду меню Вид/В виде HTML (View\Source HTML). На экране появится рабочее окно текстового редактора Блокнот с исходным кодом HTML-документа (Рис. 1.3).
    • Рис. 1.3. Исходный код HTML-документа

      Как видно из Рис. 1.3 исходный код документа не содержит кода РНР. Однако фрагмент кода

      был выполнен.

      Этот фрагмент кода содержит одну инструкцию, состоящую из трех элементов: команды (echo), строки (<Р><еm> Привет всем! Я использую РНР!</еm></Р>), и признака конца инструкции (;).

      Обратите внимание на команду echo, эта команда наиболее часто используется для вывода информации. Например, в приведенном выше примере, - для выдачи результирующего кода HTML:

      <P><em> Привет всем! Я использую РНР!</еm></Р>

      В следующем упражнении будет рассказано о часто встречающихся ошибках, которые, мы надеемся, вы не будете допускать

      Важность пpuзнaкa конца инструкции.

      Признак конца инструкции или символ точка с запятой (;) является обязательным в конце любой команды. Признак конца инструкции сообщает синтаксическому анализатору РНР, что параметры команды закончились, и следует перейти к следующей инструкции.

      Если вы не закончите инструкцию точкой с запятой, то синтаксический анализато РНР выдаст сообщение об ошибке. В следующем шаге мы покажем, в каком случае может быть получено сообщение об ошибках и какие действия вы должны предпринять, чтобы их устранить.

    • Откройте HTML редактор и введите следующий текст:
    • Сохраните этот файл с именем errorscript.php в папке документов вашего Web-сервера.
    • Запустите браузер, в поле Адрес: введите

      http://localhost/errorscript.php

      и нажмите клавишу Enter.
    • В рабочем окне браузера появится сообщение об ошибке (Рис. 1.4).

      Рис 1.4. Сообщение об ошибке.

      Как видно из Рис. 1.4, синтаксический анализатор РНР выдал сообщение об ошибке в 11-й строке файла. Если внимательно посмотреть на 10 и 11 строки созданного нами документа

      echo "<Р>Я пробую создать ошибку"

      echo "<Р>Oшибка получилась?";

      то можно заметить, что в строке 8 отсутствует признак конца инструкции, а строка 9 начинается с новой команды. Синтаксическому анализатору РНР такая команда не понятна, и он сообщает вам об ошибке синтаксиса.

      Эту ошибку довольно легко исправить.

    • Чтобы устранить ошибку, откройте с помощью любого текстового редактора файл errorscript.php.
    • В конце 8-й строки добавьте признак завершения инструкции (;).

    • В результате строка примет вид:

      echo "<Р>Я пробую создать ошибку";

    • Сохраните этот файл на диске в папке с документами вашего Web-сервера.
    • Запустите браузер, в поле Адрес: введите:

    • http://localhost/errorscript.php

      и нажмите клавишу
      Enter. В рабочем окне браузера появится результат работы исправленного скрипта (Рис. 1.5).

      Рис. 1.5. Результат работы исправленного скрипта errorscript.php

      Из Рис. 1.5 видно, что после устранения ошибки в строке 10, синтаксический анализатор РНР успешно обработал файл и выдал результат. Избегайте этой и других ошибок, уделяя особое внимание использованию точки с запятой (;) и кавычки ("), о которой вы узнаете в следующем упражнении.

      Маскирование специальных символов в сценарии

      Очевидно, вы запомнили, что любая инструкция вашего PHP-кода должна заканчиваться символом точка с запятой. Теперь мы познакомимся с тем, как маскировать знак «кавычки», который вы хотите вывести на экран. Это тоже надо будет запомнить. Когда вы используете кавычки внутри других кавычек, то внутренняя пара должна быть замаскирована, скрыта от внешней пары с помощью символа маскирования - обратной косой линии (\).

      В следующем ниже примере мы покажем, что произойдет, если вы не будете использовать символ обратной косой линии, и как исправить такую ошибку.

    • Откройте любой текстовый редактор, и введите следующий текст HTML:
    • Сохраните созданный файл с именем errorscript2.php и поместите в папку документов вашего Web-сервера.
    • Запустите браузер, в поле Адрес: введите http://localhost/errorscript2.php и нажмите клавишу Enter. B рабочем окне браузера появится другое сообщение об ошибке (Рис. 1.6).
    • Рис. 1.6. Сообщение об ошибке в сценарии.

      Посмотрите 10 строку введенного РНР-кода:

      echo "<Р>Я думаю это действительно "правильно"!</Р>";

      Здесь внутренняя пара кавычек ("правильно") используется внутри внешней пары кавычек без символа маскирования, что и вызывает сообщение об ошибке. Эта ошибка также легко исправляется. Чтобы исправить ошибку, выполните следующие действия:

    • Откройте с помощью любого текстового редактора файл errorscript2.php.
    • Измените в строке 10 текст на:
    • echo "<P>я думаю это действительно \"правильно\"!</Р>";

    • Сохраните этот файл на диске в папке с документами вашего Web-сервера.
    • Запустите браузер, в поле Адрес (Address): введите http://localhost/errorscript2.php и нажмите клавишу Enter. B рабочем окне браузера появится результат работы исправленного скрипта (Рис. 1.7).
    • Рис. 1.7. Рабочее окно браузера после исправления ошибки.

      Теперь перед внутренними кавычками стоит символ маскирования (\). Синтаксический анализатор РНР пропустит их, зная, что символы, следующие за символом маскирования, должны быть просто напечатаны.

      Комментирование ваших программ

      Комментирование программ — это замечательная привычка. Ввод комментариев в HTML-документ поможет вам (а также другим, которым понадобится редактировать ваш документ позже) отслеживать отдельные фрагменты большого документа. С помощью комментариев вы можете вставить в текст программы собственные примечания, которые помогут вам в процессе ее разработки и отладки.

      HTML-комментарии игнорируются браузером и содержатся между тэгами <!— и -->. Например, следующий комментарий напомнит вам, что ниже расположены коды вашего логотипа:

      <!-- Логотип расположен здесь -->

      В РНР тоже используются комментарии, которые игнорируются синтаксическим анализатором. PHP-комментариям обычно предшествует двойной слеш, например:

      // Это комментарии в сценарии РНР

      Но могут быть использованы и другие типы комментариев, такие как:

      # Это стиль комментария командного языка операционной системы

      и

      /* Это С-стиль комментария, который будет расположен на двух строках */

      Создадим сценарий, содержащий различные типы комментариев.

    • Откройте любой текстовый редактор и введите следующий текст:
    • Сохраните этот текст в файле с именем comments.php и поместите в папку для документов вашего Web-сервера.
    • Запустите браузер, в поле Адрес: введите

      http://localhost/comments.php

      и нажмите клавишу Enter. В рабочем окне браузера вы не увидите абсолютно ничего (Рис. 1.8).
    • Рис. 1.8. Рабочее окно браузера с загруженной страницей comments.php

      Пустая страница получилась потому, что все, что вы набрали, было HTML-комментарием, который игнорируется. Поскольку PHP-комментарии также игнорируютcя синтаксическим анализатором РНР, то фрагмент PHP-кода не содержит никаких действительных команд.

    • Выберите команду в браузере меню Вид/В виде HTML. На экране появится рабочее окно текстового редактора Блокнот (Notepad) с исходным текстом HTML-документа (Рис. 1.9).
    • Рис. 1.9. Исходный код HTML-документа

      Обратите внимание на то, что исходный код HTML-документа содержит только HTML-комментарии, комментарии РНР отсутствуют.

      НTML и PHP-комментарии будут очень часто использоваться в этой книге для пояснения фрагментов кода программ. Читайте комментарии и попытайтесь выработать у себя привычку использовать их. Написание аккуратного, свободного от ошибок исходного кода программ, с комментариями и отступами, могут сделать вас известным и среди разработчиков, потому что они без особого труда смогут разобраться, что пытается сделать ваша программа.

      Переменные и операторы PHP

      В этой части методического пособия вы узнаете, как сделать следующее:

    • определять и использовать переменные;
    • определять и использовать оперпторы.
    • Что тaкoe переменная?

      В переменной могут храниться значения определенного типа, такие как "синий" или "19349377". После присвоения значения переменной вы можете сослаться на эту пере-менную в любом месте вашей программы, и это значение будет всегда оставаться неизменным до тех пор, пока вы сами не измените его, о чем будет рассказано ниже.

      Чтобы создать переменную, выполните следующие действия:

    • Придумайте какое-нибудь подходящее имя. Например, если вы хотите создать переменную, которая будет хранить имя пользователя, то подходящим именем для переменной будет usemame (имя пользователя).
    • Поставьте символ доллара ($) перед именем, как показано ниже:
    • $username

    • Поставьте знак равенства (=) после имени переменной, чтобы присвоить ей значение. И заключите значение в кавычки, как показано ниже:
    • $username="Иванов"

    • Чтобы присвоение значения переменной стало инструкцией, завершите ее т очкой с запятой (;):
    • $username="Иванов";

      Итак, мы создали переменную с именем «username» и присвоили ей значение «Иванов». Далее в этой главе мы произведем некоторые интересные действия (например, математические) с вашими переменными.

      Имена для ваших переменных.

      Из предыдущего знакомства вы узнали, что имена переменных начинаются с символа доллара ($). Имена переменных не могут начинаться с цифры, но могут их содержать, а также содержать символ подчеркивания (_). Кроме того, имена переменных чувстви-тельны к регистру символов, например, переменные $YOUVAR и $youvar - две различные переменные.

      Создание наполненных смыслом имен для переменных поможет вам избежать головной боли при разработке программ. Если ваша программа имеет дело с переменными имени пользователя и пароля, не создавайте переменные с именами $n для имени и для пароля потому что эти имена не наполнены смыслом. Если вы начнете разбираться в программе с такими именами переменных неделю спустя, то велика вероятность того, что вы забудете, что обозначают переменные $n и , ведь они могут означать «number»(номер) вместо «name» (имя) и «page» (страница) вместо «password» (пароль).

      Типы переменных РНР и их значений

      При программировании в РНР вы будете иметь дело с двумя основными типами переменных: скалярным типом и массивами. Скалярные переменные содержат только одно значение, а массивы состоят из списка значений или даже из нескольких списков.

      В описанном ранее примере мы создали переменную ($username="Иванов";), которая является скалярной. Программы в этой книге главным образом будут иметь дело со ска-лярными переменными. Вы можете найти информацию о работе с массивами в Прило-жении В "Краткий справочник по языку РНР".

      Когда вы присваиваете значение переменной, вы обычно указываете один из следующих типов значений:

    • целое (integer) - целое число (число без дробной части). Например, 1345 или 9922786. Вы можете также использовать восьмеричную и шестнадцатеричную форму записи: восьмеричное число 0123 равно десятичному числу 83, а шестнадцатеричное число 12 равно десятичному числу 18;
    • число с плавающей точкой (floating-point или "floats" или "doubles") - числа с дробной частью. Например, 1.5, 87.3446 и 0.88889992;
    • строка (string) - выражение, состоящее из текста, или цифр или текста с цифрами, заключенное в парные двойные (" ") или одинарные (' ') кавычки.
    • Перед началом программирования своего РНР сценария тщательно планируйте назначение переменных и их имена, используйте комментарии в тексте своей программы - это напомнит вам самим их назначение.

      Создадим простой сценарий, в котором объявим различные типы переменных, присвоим им значения и затем просто выведем их значения на экран.

    • Откройте текстовый редактор и введите текст HTML:
    • Добавьте PHP-блок и создайте переменную целого типа:
    • Создайте переменную с плавающей точкой:
    • Создайте строчную переменную:
    • Добавьте команду echo для каждой переменной, чтобы вывести их значения на neчать:
    • Закройте РНР-блок и добавьте несколько строк HTML, чтобы документ стал законченным и правильным.
    • Сохраните документ под именем printvarscript.php в папке с документами вашего Web-сервера.
    • Запустите ваш Web-браузер, в поле Адрес: введите
    • http://localhost/printvarscript.php

      и нажмите клавишу Enter. В окне браузера появится страница с текстом (Рис. 1.10).

      Рис. 1.10. Результат запроса файла printvarscript.php

      На web-страничке, приведённой на рисунке 1.10 вы можете видеть результат присвоения переменным $intvat, $floatvar и $stringvar значений, которые и были напечатаны.

      Что тaкoe оператор?

      Теперь мы расскажем об использовании операторов для изменения значений переменных

      В предыдущем знакомстве мы уже использовали один из операторов (=) для присвоения значений вашим переменным. Существуют и другие типы операторов присвоения, а также другие типы операторов вообще. Основное назначение операторов - производить некоторые действия над значениями переменных. Это могут быть действия присвоения значения переменной, изменения значения переменной, сравнения двух и более значений.

      Операторы РНР

      Перечислим основные типы операторов РНР и их основные функции:

        операторы присвоения - присваивают значения переменным. Могут также увеличивать или уменьшать текущее значение переменной;
        арифметические операторы - они должны быть вам известны. Это операторы сложения, вычитания, деления и умножения, которые используются, когда необходимо вычислить значение выражения;
        операторы сравнения - применяются для сравнения двух переменных, результаом сравнения будет истина (true) или ложь (false). Вы можете затем выполнить какое-либо действие, основываясь на результате операции сравнения;
        логические операторы - проверяют истинность условия.

      Оставшаяся часть этой главы будет посвящена описанию нескольких основных операторов, используемых в РНР. Мы напишем сценарии для каждого из рассмотренных типов операторов.

      Операторы присвоения

      Вы уже видели оператор присвоения в работе. Знак равенства (=) является основным оператором присвоения. Запомните, что = не означает «равно чему-либо»! Для этого используется = = (двойной знак равенства), означающий «равно чему-либо», тогда как одиночный знак равенства = обозначает «присвоить значение».

      В приведенной ниже таблице приведены различные типы операторов присвоения и примеры их записи в сценарии.

      Т а б л и ц а 1.2. Операторы присвоения

      Оператор
      Пример записи
      Выполняемое действие
      += $a +=3 Увеличивает текущее значение переменной на значение, находящееся справа от знака оператора
      -= $a -=3 Уменьшает текущее значение переменной на значение, находящееся справа от знака оператора.
      .= $a .="строка" Объединяет (добавляет к) текущее значение со значением, находящимся справа от знака равенства.

      Создадим простой сценарий, показывающий, как работают эти операторы. Этот сценарий присвоит переменным значения, затем изменит эти значения и выведет результат на экран.

    • Откройте текстовый редактор и введите следующий текст:
    • Сохраните документ с именем assignscript.php в папке с документами вашего Web-сервера.
    • Запустите Web-браузер, в поле Адрес: введите
    • http://localhost/assignscript.php

      и нажмите клавишу Enter.

      В окне браузера появится страница с текстом (Рис. 1.11), на которой вы увидите результат вычислений.

      Рис. 1.11. Результат работы сценария assignscript.php.

      Арифметические операции.

      Арифметические операторы являются основой математики. В приведенной ниже таблице показаны основные арифметические операторы, которые должны быть вам xopoшо известны.

      Т а б л и ц а 1.3. Арифметические операторы.

      Оператор
      Пример записи
      Выполняемое действие
      +
      $b = $a + 3; Складывает значения
      -
      $b = $a - 3; Вычитает значения
      *
      $b = $a * 3; Умножает значения
      /
      $b = $a / 3; Делит значения
      %
      $b = $a % 3; Определяет остаток от целочисленного деления одной переменной на другую

    • С помощью текстового редактора введите текст HTML:
    • Введите блок PHP:
    • Добавьте несколько строк HTML, чтобы завершить документ.
    • Сохраните набранный файл в папке для документов вашего Web-сервера под именем arithmeticscript.php.
    • Внимание! В скрипте используется символ маскирования перед знаком доллара (\$), и поэтому знак доллара в браузере будет отображен как символ, иначе начнется интерпретация его как переменной.

    • Запустите браузер, в поле Адрес: введите

      http://localhost/arithmeticscript.php

      и нажмите клавишу Enter. B окне браузера появится страница с результатами ваших вычислений (Рис. 1.12).

    • Рис. 1.12. Результат работы сценария arithmeticscript.php

      Операторы сравнения

      Операторы сравнения используются для сравнения двух значений. Как и в случае с арифметическими операторами, вы уже знаете почти все об операторах сравнения. В таблице 1.4, приведены различные типы операторов сравнения.

      Т а б л и ц а 1.4. Операторы сравнения

      Оператор
      Оперделение
      = =
      Равно
      !=
      Не равно
      >
      Больше чем
      <
      Меньше чем
      >=
      Больше или равно
      <=
      Меньне или равно

      Результатом каждой из этих операций является одно из двух: либо истина либо ложь. Вы можете, в зависимости от результата, пользуясь операторами управления, такие как if [...] else и while , выполнять определенные задачи.

      Создадим простой сценарий для демонстрации результата выполнения неоторых операторов сравнения с помощью оператора управления if...else и выведем результат на экран.

    • С помощью текстового редактора введите текст HTML:
    • Начнем PHP-блок:
    • Внутри оператора if [...] else проверим, равны ли переменные и $b. В зависимости от результата (истина или ложь) будет выполнен один из операторов вывода текста на печать:
    • Обратите внимание, что выражение сравнения должно помещаться в круглые скобки.

    • Теперь выполним проверку тех же переменных на неравенство и, в зависимости от результата, выведем сообщение на экран с помощью оператора echo:
    • Фигурные скобки ( { ) и ( } ) служат для разделения блоков операторов внутри структуры управления.

    • Проверим, больше ли , чем $b и, в зависимости от результата, выведем сообщение на экран с помощью оператора echo:
    • Проверим, меньше ли , чем $b и, в зависимости от результата, выведем сообщение на экран с помощью оператора echo:
    • Проверим, будет ли больше или равно $b и, в зависимости от результата, выведем сообщение на экран с помощью оператора echo:
    • Проверим, будет ли меньше или равно $b и, в зависимости от результата, выведем сообщение на экран с помощью оператора echo:
    • Закройте РНР-блок и завершите создание HTML-документа строками:
    • Сохраните набранный файл в папке для документов вашего Web-сервера под именем comparisonscript.php.
    • Запустите браузер, в поле Адрес: введите:
    • http://localhost/comparisonscript.php

      и нажмите клавишу Enter.

      B окне браузера появится страница с текстом (Рис. 1.13).

      Рис. 1.13. Результат работы сценария comparisonscript.php

      Логические операторы.

      Логические операторы в вашем сценарии позволяют определять истинность условий, таких, как условия сравнения в предыдущем знакомстве. В операторах if...else или while, логические операторы используются для вычисления условия. Сейчас мы рассмотрим логические операторы && (and - "и") и || (or - "или"), которые применяются для вычисления логического выражения, в котором присутствуют несколько сравнений.

    • С помощью текстового редактора введите текст HTML:
    • Начните блок РНР. Создайте две переменные и присвойте им значения. Сравнения в этом сценарии будут основываться на этих двух переменных.
    • Внутри оператора if [...] else проверьте истинность условия «значение переменном $degrees больше 100 или значение переменной $hot равно "да"». И, в зависимости от результата, выведите сообщение с помощью команды echo.
    • Поскольку ваше выражение фактически состоит из двух небольших выражений, заключенных в скобки, то все выражение целиком должно быть также заключено в круглые скобки.

    • Внутри оператора if [...] else введите вторую проверку истинности условия «значение переменной $degrees больше 80 и значение переменной $hot равна "да". И, в зависимости от результата, выведите сообщение с помощью команды echo.
    • Завершите РНР-блок и создание HTML-документа строками:
    • Сохраните набранный файл в папке для документов вашего Web-сервера под именем logicalscript.php
    • .
    • Запустите браузер, в строку Адрес: введите
    • http://localhost/logicalscript.php
      и нажмите клавишу Enter.

      В окне браузера появится страница с текстом (Рис. 1.14).

      Рис. 1.14. Результат работы сценария logicalscript.php

      На экран будет выведено сообщение, связанное с результатом сравнения. Оба выражения в приведенном выше примере истинны. В первой проверке только одно выражение может быть истинно — этому условию удовлетворяет значение переменной $hot, которое имеет значение "да". Во второй проверке оба выражения должны быть истинны и они являются таковыми (переменная $degrees имеет значение 95, которое больше чем 80, и переменная $hot имеет значение "да".

      В РНР используется большое число других типов операторов. Мы будем пояснять их по мере их появления в книге. Операторы, перечисленные в этой главе, будут в ам полезны для начала программирования на языке РНР. В следующей главе мы будем использовать полученные ранее знания о переменных и операторах для составления сценариев, выполняющих более интересные действия, чем те, которые мы уже рассмотрели.



    Hosted by uCoz