Использование PHP в страницах с расширением html. Форма в вашем layout Непрезентабельный html signup php

Часто возникает вопрос о том, как расположить одну форму на всех страницах вашего Zend приложения. Допустим я хочу расположить форму подписки в файле layout.phtml для того, чтобы она располагалась на каждой странице. Команда layout->content() работает с действиями и контроллерами... Как же реализовать то, что нам нужно?

Одно из решений данной задачи - это создание помощника действия.

Начнём с настройки ZF приложения:

$ zf create project layoutform $ cd layoutform $ zf enable layout

Очистите файл application/views/scripts/index/index.phtml и вставьте что-то вроде этого:

application/views/scripts/index/index.phtml:

This is the home page

Теперь можем начинать.

Форма

Создадим новую форму:

$ zf create form signup

А так же поля, которые нам необходимы:

application/forms/Signup.php:

Class Application_Form_Signup extends Zend_Form { public $processed = false; public function init() { $this->addElement("text", "name", array("label" => "Name", "required" => true, "validators" => array(array("StringLength", false, array("max"=>75)),),)); $this->addElement("text", "email", array("label" => "Email", "required" => true, "validators" => array(array("StringLength", false, array("max"=>150)), "EmailAddress",),)); $this->addElement("submit", "go", array("label" => "Sign up",)); } }

Форма у нас есть. Осталось её вывести.

Помощник действия

Мы используем помощник действия для того чтобы инициализировать форму.

Добавьте строку в application.ini:

application/configs/application.ini:

Resources.frontController.actionhelperpaths.Application_Controller_Helper = APPLICATION_PATH "/controllers/helpers"

Теперь система знает в каком месте искать помощники действий, так что можем идти дальше:

application/Bootstrap.php:

bootstrap("frontController"); $signup = Zend_Controller_Action_HelperBroker::getStaticHelper("Signup"); Zend_Controller_Action_HelperBroker::addHelper($signup); } }

Помощник действия будет выглядеть следующим образом:

application/controllers/helpers/Signup.php:

getActionController()->view; $form = new Application_Form_Signup(); $request = $this->getActionController()->getRequest(); if($request->isPost() && $request->getPost("submitsignup")) { if($form->isValid($request->getPost())) { $data = $form->getValues(); // process data $form->processed = true; } } $view->signupForm = $form; } }

Тут ничего особенного нет. Просто обратите внимание на класс родитель.

Помощник вида

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

application/views/helpers/SignupForm.php:

Sign up for our newsletter

"; if($form->processed) { $html .= "

Thank you for signing up

"; } else { $html .= $form->render(); } return $html; } }

Всё, что нам осталось, так это сделать вывод формы в layout.phtml:

application/layouts/scripts/layout.phtml:

headMeta()->prependHttpEquiv("Content-Type", "text/html; charset=UTF-8"); $this->headTitle("Layout form test"); echo $this->doctype(); ?> headMeta()->setIndent(4); ?> headTitle()->setIndent(4); ?>

layout()->content; ?>
signupForm($this->signupForm); ?>

Получилось

Вот и всё. Мы добились той функциональности, которую задумали.

Я пытаюсь создать форму входа. Это мой код HTML-формы

Лично я получил за PDO.

Очки 4 и 5

$password = mysql_real_escape_string(stripslashes(md5($_POST["password"])));

Во-первых, порядок этого неверен. Вы хешируете $_POST["password"] а затем пытаетесь использовать stripslashes – после его хэши не будет никаких слэшей. Однако, если вы пытаетесь запретить людям использовать косые черты (или что-то еще) в паролях, вам необходимо удалить их перед тем, как хэшировать строку.

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

Да, вы должны хранить хэши или «отпечатки пальцев» паролей, а не сами пароли, но в идеале вы хотите солить и хэш (с хотя бы sha1) этими паролями, а не просто бросать их в функцию md5() .

И выполните поиск по «хэш-настройке пароля», используя вашу поисковую систему по выбору.

Пункт 6

SELECT id FROM $table WHERE username = "" . $username . "" and password = "" . $password . "";

Я добавил в = который отсутствовал в исходном вопросе, но все же не совпал с именем пользователя и паролем в вашем запросе … если кому-то удалось получить SQL-инъекцию в ваше имя пользователя, пароль никогда не будет проверен. Представить:

SELECT user.id FROM user WHERE user.username = "fred" OR 1 = 1 -- AND user.password = "abc123"

Лучше выбрать идентификатор пользователя и пароль отпечатка пальца из базы данных, а затем оценить пароль в приложении, а не доверять проверке пароля на уровне базы данных. Это также означает, что вы можете использовать специальный алгоритм хэширования и соления в самом приложении для проверки ваших паролей.

Пункт 7

$_SESSION["user"] = $_POST["username"];

Это просто сохранение имени пользователя в сеансе? Это никоим образом не должно использоваться как «верификатор входа», особенно если на вашем сеансе нет (по-видимому) ничего, чтобы предотвратить угон.

Идентификатор сеанса можно легко обнюхать из файла cookie в режиме реального времени, и это все, что потребуется для «заимствования» чужого имени пользователя. Вы должны хотя бы попытаться уменьшить вероятность захвата сеанса, связав IP-адрес пользователя, строку UserAgent или некоторую другую комбинацию относительно статических данных, которые можно сравнить с каждой страницей … есть недостатки практически любого подхода, хотя (особенно, как я уже нашел, если у вас есть посетители, использующие AOL), но вы можете сделать возможный 99% -ный эффективный сеанс отпечатка пальца, чтобы уменьшить захват с очень небольшим шансом, что сеанс пользователя будет ошибочно сброшен.

В идеале вы также можете создать токен для сеанса для смягчения атак CSRF, когда пользователю необходимо выполнить «привилегированное» действие в базе данных (обновить их данные или что-то еще). Маркер может быть абсолютно случайным и уникальным кодом, хранящимся в базе данных и / или в файле cookie SSL, когда пользователь входит в систему (при условии, что пользователь не может выполнять никаких действий, которые обновляют базу данных за пределами HTTPS, поскольку это просто передаст данные в ясном тексте через Интернет – что было бы плохой идеей ).

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

Это может быть несколько проблем.

Во-первых, в вашем заявлении $ match у вас отсутствует оператор равенства по паролю:

$match = "SELECT id FROM $table WHERE username = "".$username."" and password"".$password."";";

Должно быть:

$match = "SELECT id FROM $table WHERE username = "".$username."" and password = "".$password."";";

Во-вторых , вы вставляете пароль в базу данных после его использования с помощью md5?

Если нет, то ваш запрос пытается сопоставить md5 (пароль) с паролем.

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

Динамические страницы и что для них нужно

Помимо статических есть ещё динамические страницы. Таких сейчас в Интернете большинство. Информация в них подгружается из внешних источников, например базы данных или других файлов. Содержимое и форматирование таких страниц может меняться в зависимости от действий пользователя. Для правки динамических сайтов не обязательно вмешиваться в их код – достаточно изменить контент в специально для него предназначенном файле или базе данных, которая, к слову, представляет собой тоже файл, только определённым образом структурированный.

Для создания динамических сайтов только HTML и CSS недостаточно. Тут используются ещё и языки программирования, а также базы данных и языки запросов к ним. Чаще всего современные динамические сайты используют в своей работе HTML, CSS, PHP, JavaScript, SQL. Первые две аббревиатуры вам уже знакомы не понаслышке, SQL применяется для доступа к базам данных, JavaScript - клиентский язык, команды которого обрабатываются браузером и зачастую используются, чтобы показывать вам всякую красоту вроде шторок или плавно открывающихся фотографий, а вот PHP - это серверный язык программирования, который работает, в том числе, с содержимым сайта и делает его динамическим, с ним мы сегодня и соприкоснёмся.

Пример использования команды include

В предыдущей статье я рассказывал о блочной вёрстке сайта и приводил в пример простейшую страницу (документ index.html и привязанный к нему файл style.css ).

Сейчас мы разделим документ index.html на несколько файлов, каждый из которых будет содержать свою часть страницы, что поможет ещё сильней разделить код, улучшить структуру шаблона и, по сути, сделать страницу динамической. Для этой цели мы будем использовать язык PHP, а точнее лишь одну его директиву - функцию include() , которая включает один файл в другой.

1. Смените разрешение созданного в статье о блочной вёрстке файла index с .html на .php , чтобы документ назывался index.php . Тип файла .PHP указывает серверу, что документ был написан или использует вставки на одноимённом языке программирования.

2. В папке со страницей создайте директорию blocks .

3. Всю вспомогательную информацию (верх, низ, навигацию и боковую панель сайта) вынесем в отдельные файлы, которые разместим в папке blocks .

Итак, создайте в каталоге blocks четыре файла: header.php , navigation.php , sidebar.php и footer.php . Заполните файлы кодом.

4. Проверьте структуру папки шаблона. В корне должны находиться файлы index.php , style.css и директория blocks .

Структура папки blocks должна быть такой.

5. В файле index.php удалите существующий код и напишите новый:

<a href="/security/width-v-zavisimosti-ot-soderzhimogo-height-width-i-overflow-css-pravila-dlya-opisaniya/">Блочная вёрстка</a>

Основной контент страницы

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

Как и HTML-код, код PHP тоже имеет своё обозначение начала и конца. Так вот начинать PHP-вставку нужно командой , а заканчивать строкой ?> . Между этими командами пишется основной код. В нашем случае это всего лишь одна команда - include .

Функция include() вставляет в файл код из другого файла, давая возможность хранить разные части страницы в разных документах, тем самым надёжно отделяя их друг от друга.

В результате выполненных действий мы получили динамическую страницу index.php , части которой подгружаются из разных файлов. Благодаря этому можно создавать другие страницы, точно так же подгружая в них вспомогательные элементы из файлов папки blocks .

Такой подход хорош тем, что если вы захотите на сайте в 20-30 страниц изменить, скажем, название пункта меню, то в шаблоне с только что созданной структурой понадобится внести правки только в один файл - blocks/navigation.php, и меню изменится сразу на всех страницах, в которые он включен. Если же сайт был бы статическим, то для смены названия одного пункта меню вам пришлось бы вносить изменения в каждую из 20-30 страниц. Разница очевидна.

PHP — это встраиваемый серверный язык программирования. Большая часть его синтаксиса заимствована из C , Java и Perl . А также добавлена пара уникальных характерных только для PHP функций . Основная цель этого языка — создание динамически генерируемых PHP HTML страниц .

PHP в HTML

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

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

HTML и PHP довольно просто объединить. Любая часть PHP-скрипта за пределами тегов игнорируется PHP-компилятором и передается непосредственно в браузер. Если посмотреть на пример, приведенный ниже, то можно увидеть, что полный PHP-скрипт может выглядеть следующим образом:

Привет, сегодня .

Приведенный выше код — это обычный HTML с небольшим фрагментом PHP , который выводит текущую дату, используя встроенную функцию date . При этом весь HTML будет игнорироваться PHP-компилятором и передаваться в браузер без изменений.

Интегрировать PHP в HTML действительно очень легко. Помните, что скрипт — это HTML-страница с включением определенного PHP кода . Можно создать скрипт, который будет содержать только HTML (без тегов ), и он будет нормально работать.

Более продвинутые методы:

  • Menu Item

и результат:

PHP в HTML с помощью short_open_tag

Если нужно максимально сократить код, перед тем, как в PHP вставить HTML , вы можете использовать short_tags . В результате не нужно будет вводить short_tags » с «Off » на «On «. Хотя на большинстве серверов этот параметр уже включен, всегда лучше проверить это вручную. Проблема, которая может возникнуть при использовании коротких тегов — это конфликт при использовании XML . В XML синтаксическое выражение

PHP в HTML с помощью short__tag

Hello, today is .

Имейте в виду, что если нужно создать сайт, совместимый с максимальным количеством платформ, при вставке PHP в HTML не стоит полагаться на short_tags .

HTML в PHP с использованием echo

Еще один способ интеграции HTML в PHP-файл — команда echo: .

Это повлияет на подсветку разметки в большинстве редакторов. Поэтому необходимо выделять все двойные кавычки внутри HTML-кода с помощью обратной косой черты.

PHP в HTML — расширения файлов

Для стандартно настроенного веб-сервера :

AddHandler cgi-script .html .htm

Для веб-сервера с запущенным FastCGI :

AddHandler fcgid-script .html .htm

HTML в PHP

Также можно использовать HTML-код в PHP-скриптах . Все, что нужно сделать, это при открытии страницы с помощью PHP изменить порядок открывающихся тегов HTML и PHP .

Использование HTML в PHP :

Personal INFO

First Name:
Last Name:
"; ?>

Такая вставка PHP в HTML позволяет использовать намного меньше кода. Здесь мы используем глобально $PHP_SELF , что позволяет использовать значения полей, указанные под ними, в том же файле. Как правило, для таких форм создается два файла: первый — сама HTML-форма , а второй — PHP-файл , который выполняет обработку.

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

Данная публикация представляет собой перевод статьи «PHP in HTML » , подготовленной дружной командой проекта

П ри создании даже персонального сайта, далеко не каждый может предусмотреть все возможные способы его дальнейшего использования. Очень важно подготовить почву для дальнейшего развития сайта. Если в прошлом вы создали сайт и по умолчанию присвоили всем страницам расширение.html , а только потом решили использовать PHP, то тогда читайте дальше.

Раньше для использования SSI, названия страниц сайта должны были заканчиваться расширением.shtml , но сегодня большинство интернет-серверов сконфигурированы так, что SSI можно использовать и на страницах с расширением.html , что весьма удобно. С PHP совсем другая история — расширение.php является расширением по умолчанию. Разработчики сайтов, заранее зная, что будет использоваться данный язык программирования, стразу присваивают правильное расширение.

Но что делать, когда все страницы заканчиваются расширением.html ?

Заменяем расширение HTML на PHP

Это можно сделать несколькими способами. Самый явный способ — дать всем страницам расширение.php или изменить уже существующие расширения (.html, .shtml и т.д.). У этого способа есть недостатки. Например уже проиндексированным страницам с расширением.html придётся заново индексироваться поисковыми системами. Или ещё хуже — все внешние ссылки, которые ссылаются явным образом на ту или иную страницу, будут недействительны. И придется оповещать владельцев каждого сайта об этих изменениях и создавать для каждой страницы еще одну страницу с 301 ошибкой. Конечно, изменить одно расширение на другое допустимо, но что делать если сайт уже имеет много страниц и много ссылок на разные страницы с других сайтов?

По осознанной причине на данный момент все страницы этого сайта заканчиваются расширением html, и мне никак не хотелось делать вышеприведённые изменения, тем самым создавая себе лишние трудности.

Можно обойтись и другим способом. Если сервер, на котором размещается сайт, поддерживает mod_rewrite (в большинстве случаев поддерживает), и есть доступ к файлу.htaccess , то можно добавить следующие строки в этот самый файл:

RewriteEngine on RewriteRule ^(.*)\.html $1\.php

Добавив этот код в.htaccess , можно не волноваться. Все запрашиваемые несуществующие страницы с расширением.html будут автоматически заменяться расширением.php благодаря чудесам от Apache. Но и этот способ является не единственным. Можно прописать следующее в том же самом.htaccess файле:

AddHandler application/x-httpd-php .php .html .htm

На мой взгляд самый удачный способ. Это делает HTML-страницы равными PHP-страницам, то есть все функции PHP теперь могут быть использованы на страницах с расширением HTML. Если нет доступа к файлу.htaccess , то можно написать письмо хостинг компании, и вежливо попросить админов прописать в конфигурации Apache (httpd.conf) нужное значение для сайта.

Кстати, если до этого на сайте использовалось SSI следующим образом:

то тогда в новом PHP’шном состоянии этот код нужно заменить на:

Ну вот и всё, думаю какой-нибудь из вышеприведённых способов поможет.


Top