П ривет, ребята надеются дела идут хорошо, сегодня мы будем объяснять очень полезный учебник вместе с вами. На сегодняшнем уроке мы создадим простую контактную форму, используя angularJS и php.
Контактная форма представляет собой стандартную веб-страницу, которая доступна на каждом сайте. Это позволяет посетителям сайта связаться с владельцами сайтов или поставщиками услуг, которые отвечают за поддержание этого веб-сайта. Так что мы думаем, почему бы не создать простую контактную форму с помощью Angularjs и php, чтобы получать сообщения от веб-сайтов, читателей и/или пользователей.
Мы используем Angularjs для переднего плана и php на стороне сервера. Мы будем писать код на php, который принимает данные из Angular формы и отправляет по электронной почте администратору сайта. Создайте папку с именем “contact-form” в вашем веб-каталоге приложений и создайте образец оформления страницы HTML – index.html. Теперь скопируйте и вставьте, код ниже в файл index.html.
Демо - Простая контактная форма с помощью Angularjs и php Контактная форма с помощью angularjs и PHP Ваше имя Почта Сообщение Отправить
Php код для отправки электронной почтыСоздайте страницу contact.php и скопируйте вставить код, приведенный ниже. Ниже приведен php-код, который будет извлекать данные из angular формы и отправлять по электронной почте, по указанному адресу электронной почты.
< ?php $post_data = file_get_contents("php://input"); $data = json_decode($post_data); //Just to display the form values echo "Name: " . $data->name; echo "Email: " . $data->email; echo "Message: " . $data->message; // sned an email $to = $data->email; $subject = "Тестовое письмо сайт для тестирования angularjs контактной формы"; $message = $data->message; $headers = "From: " . $data->name .. "\r\n" .. "\r\n" . "X-Mailer: PHP/" . phpversion(); //функция PHP mail для отправки электронной почты на адрес электронной почты mail($to, $subject, $message, $headers); ?>
«Защитой от дурака» называется комплекс мер по пресечению ввода неправильной информации в форме. Например, если в поле требуется ввести положительное число от 0 до 10, то следует проверить, чтобы пользователь не ввёл текст или число, которое не лежит в указанном диапазоне, т.е. число не должно быть меньше нуля и больше десяти.
Почему происходит ввод неправильной информации? Это в основном совершается по трём причинам.
Следует понимать, что точные и правильные формулировки хотя и снижают вероятность возникновения ошибок, но никак не спасают от них. Только технические средства на стороне сервера позволяют получить требуемый результат и избежать ввода неправильной информации. Тем не менее, ревизия или, как её ещё называют, валидация на стороне клиента позволяет быстро проверить данные, вводимые пользователем, на корректность, без отправки формы на сервер. Таким образом экономится время пользователя и снижается нагрузка на сервер. С позиции юзабилити тоже имеются плюсы - пользователь сразу получает сообщение о том, какую информацию он указал неверно и может исправить свою ошибку.
Обязательное полеНекоторые поля формы должны быть обязательно заполнены перед их отправкой на сервер. Это, к примеру, относится к форме регистрации, где требуется ввести логин и пароль. Для указания обязательных полей используется атрибут required , как показано в примере 1.
Пример 1. Атрибут required
HTML5 IE 10+ Cr Op Sa Fx
Обязательное поле
Логин:
Пароль:
Обязательные поля должны быть заполнены перед отправкой формы, иначе форма на сервер не отправится и браузер выдаст об этом предупреждение. Вид сообщения зависит от браузера, например Chrome выводит всплывающую подсказку, как показано на рис. 1.
Рис. 1. Обязательное поле не заполнено
Корректность данныхИсходно имеется два поля, в котором вводимые пользователем данные проверяются автоматически. Это веб-адрес и адрес электронной почты. Браузер Chrome также проверяет на корректность поле с календарными данными, но только потому, что у него не предусмотрен интерфейс выбора календаря щелчком мыши. Для этих элементов характерны следующие правила.
У браузеров несколько различается политика по проверке данных пользователя. К примеру, Opera подставляет протокол http:// перед введённым текстом автоматически, тогда как другие браузеры ждут его от пользователя. Chrome и Opera требуют, чтобы в почтовом адресе была точка, для Firefox она не обязательна.
В примере 2 показана форма с обязательными полями, в которой два поля проверяется браузером.
Пример 2. Корректность данных
HTML5 IE 10+ Cr Op Sa Fx
Корректность данных
Заполните форму (все поля обязательны)
Имя:
Email:
Сайт:
Opera проверяет элемент формы только при наличии атрибута name.
Что происходит в Opera при вводе неверных данных показано на рис. 2.
Рис. 2. Предупреждение о неправильных данных
Шаблон вводаНекоторые данные нельзя отнести к одному из видов элементов формы, поэтому для них приходится использовать текстовое поле. При этом их ввод происходит по определённому стандарту. Так, IP-адрес содержит четыре числа разделённых точкой (192.168.0.1), почтовый индекс России ограничен шестью цифрами (124007), телефон содержит код города и конкретное количество цифр часто разделяемых дефисом (391 555-341-42) и др. Браузеру необходимо указать шаблон ввода, чтобы он согласно нему проверял вводимые пользователем данные. Для этого используется атрибут pattern , а его значением выступает регулярное выражение . Некоторые типовые значения перечислены в табл. 1.
В примере 3 просят ввести шестнадцатеричное значение цвета (#ffcc00) и если оно не лежит в этом диапазоне, браузер выводит сообщение об ошибке.
Пример 3. Шаблон ввода
HTML5 IE 10+ Cr Op Sa Fx
Ввод цвета
Введите шестнадцатеричное значение цвета (должно начинаться с #)
На рис. 3 показано предупреждение в браузере Chrome.
Рис. 3. Введённые данные не соответствуют шаблону
Отмена валидацииВалидация не всегда требуется для формы, к примеру, разработчик пожелает использовать универсальное решение на JavaScript и дублирующая проверка браузером ему уже ни к чему. В подобных случаях необходимо отключить встроенную валидацию. Для этого применяется атрибут novalidate тега . В примере 4 показано использование этого атрибута.
Пример 4. Отмена валидации
HTML5 IE 10+ Cr Op Sa Fx
Атрибут novalidate
Для аналогичной цели применяется и атрибут formnovalidate , который добавляется к кнопке для отправки формы, в данном случае к тегу . В этом случае форма из примера 4 будет иметь следующий вид.
Логический атрибут required HTML сообщает браузеру о возможности отправки данных формы только при заполнении обязательных полей. Это значит, что поле нельзя оставить пустым, и что в зависимости от других атрибутов или типов полей приниматься могут только конкретные типы значений. Чуть позже мы поговорим о том, как сообщать браузерам о необходимости отправки определенные типы данных.
Если обязательные поля остаются пустыми, форма не будет отправлена. Opera , Firefox , Internet Explorer 10+ и Chrome выдают пользователю сообщение об ошибке. Например, «Заполните это поле » или «Нужно заполнить пустые поля ».
В терминологии Javascript событие focus запускает элемент формы, когда на нее переключается фокус, когда фокус переходит на другой элемент или она теряет фокус.
В CSS можно использовать псевдокласс :focus для стилизации элементов, которые выделены в данный момент.
Атрибут required применим для любого типа элемента ввода, за исключением button , submit , image , color и hidden . У всех этих элементов имеется значение по умолчанию, поэтому дополнительный атрибут будет лишним. Синтаксис данного атрибута просто required или required=»required» , если вы используете XHTML-синтаксис .
Добавим атрибут HTML input required к форме регистрации. Сделаем поля имени, адреса электронной почты, пароля и даты подписки обязательными:
(как минимум 6 символов, без пробелов)
На скриншотах, приведенных ниже, можно видеть, что делает атрибут required HTML при попытке подтвердить форму:
Сообщение об обязательных полях в Firefox
Та же ситуация в Opera…
и в Google Chrome
Стилизация обязательных полей в формеВы можете стилизовать обязательные поля в формах при помощи псевдокласса :required,:optional или отрицательного псевдокласса :not(:required)) . Также можно стилизовать валидные и не валидные поля с помощью псевдоклассов :valid и :invalid . При помощи этих псевдоклассов HTML input required можно показывать пользователям, какие поля обязательны к заполнению:
input { background-position: 0% 50%; background-repeat: no-repeat; padding-left: 15px; } input:required { background-image: url("../images/required.png"); } input:focus:invalid { background-image: url("../images/invalid.png"); } input:focus:valid { background-image: url("../images/valid.png"); }
В данном случае мы добавляем фоновое изображение (звёздочку ) к обязательным полям формы. В input-элементы нельзя включать генерируемый контент. Поэтому лучше будет использовать фоновое изображение. Кроме этого валидные и не валидные поля можно выделить разными фоновыми картинками. Изменения будут заметны, только если пользователь выделил соответствующий элемент формы.
Предупреждение : Firefox стилизует не валидные элементы
Учтите, что браузер Firefox применяет к не валидным элементам собственную стилизацию (красную тень ), как было показано на одной из картинок выше. Чтобы отключить этот эффект для required HTML , воспользуйтесь следующим CSS-кодом :
:invalid { box-shadow: none; }
Подсказка : таргетированная стилизация для устаревших браузеров
Устаревшие браузеры вроде IE8 и IE9 не поддерживают псевдокласс :required , но можно предоставить таргетированные стили при помощи селектора атрибутов:
input:required, input { background-image: url("../images/required.png"); }
Также можно использовать этот атрибут в качестве хука для валидации формы в браузерах, не поддерживающих валидацию на основе HTML5 . Javascript-код проверит пустые элементы ввода на наличие атрибута required и не отправит форму при обнаружении пустых обязательных полей.
Почему мне установили эту формуВ настоящий момент на ваш сайт проводится Brute-force атака. Brute-force атака — это атака по подбору паролей. В данном случае происходит подбор пароля к административной панели вашего сайта.
Чтобы не допустить взлома вашего сайта и повысить его безопасность, нами была установлена дополнительная защита.
Как я теперь могу получить доступ к админ-панели сайтаТеперь при доступе к административной панели вашего сайта (на Joomla или WordPress) будет появляться дополнительное окно ввода логина и пароля с надписью «please use your control panel password». В качестве логина необходимо ввести логин вашей услуги хостинга, он имеет вид «u1234567» . В качестве пароля — текущий пароль к вашей услуге хостинга.
После прохождения базовой HTTP-аутентификации перед вами откроется стандартное поле для авторизация в админ-панели вашего сайта. Теперь уже вам нужно будет ввести логин и пароль администратора сайта.
Как работает базовая HTTP-аутентификация
При вводе логина-пароля в окно базовой аутентификации значение логина и хеша пароля будут сравниваться со значениями в специальном файле ~/etc/users , доступным в панели управления хостингом. Содержимое файла выглядит примерно так: «u1234567:dm48bspxIO3rg» . Где «u1234567» — логин, а «dm48bspxIO3rg» — хеш пароля (обратите внимание: только хеш, а не сам пароль!). Хеш пароля — это результат преобразование пароля по определенному алгоритму.
Таким образом, когда вы вводите логин и пароль в окно базовой аутентификации, от введённого пароля берётся хеш и сравнивается со значением хеша в файле ~/etc/users . Если значения совпадают, вы проходите аутентификацию.
У меня не получается пройти базовую аутентификацию
Вероятно, вы вводите неверный пароль. Установите новый пароль для базовой аутентификации:
Если вы прошли базовую аутентификацию но не можете войти непосредственно в админ-панель сайта Joomla или WordPress, воспользуйтесь справкой:
Для повышения защиты сайта:
Чтобы убрать форму базовой HTTP-аутентификации:
AuthType Basic AuthName "please use your control panel password" AuthUserFile .../users Require valid-user
Для комментирования строки поставьте символ решётки («#») в начало строки, вот так.
Давно хотелось написать какое-нибудь приложение, используя VK API. Решено было написать некий каркас, добавляя плагины к которому можно было бы реализовать какие-то мелкие задачи, которые нужны в данный момент: от скачивания музыки до банального поддержания аккаунта онлайн. Запускать данное творение планировалось как на сервере, так и на ПК. С проблемами, вставшими на моем пути во время разработки, включая озвученную в заголовке, я и хотел бы вас познакомить.
Для подачи заявки на получение доступа Вам необходимо обратиться в службу поддержки по адресу vk.com/support , указав ID Вашего приложения.
В настоящий момент эта возможность предоставляется только для платформ, не поддерживающих стандартную авторизацию. В заявке необходимо кратко описать функционал приложения.
Мы, вроде бы, с правами администратора, нажимаем на «Продолжить»:
Весело, зайдём на вкладку «Безопасность», там нам предложат задать особые разрешения в «Дополнительно», зайдем в «Дополнительно»:
Поменяем владельца на себя, щелкнув на «Изменить», введя в диалоге свой email учетной записи microsoft, либо имя локального пользователя и щелнув на «Проверить имена». Сохраним всё это и теперь мы можем зайти в папку с нашими metro-приложениями. Ищем папку с VK, забираем оттуда VK.exe и скармливаем его нашему декомпилятору. Структура приложения видна для нас идеально, все названия функций и классов сохранились, недолгим гулянием по классам находим функцию Authorize, содержащую строку req, в которой есть два замечательных параметра:
Вуаля! client_id и client_secret наши.
client_id и client_secret для копирования
client_id=3697615
client_secret=AlVXZFMUqyrnABp8ncuU
Интересная, конечно, позиция. Хорошо, расслабляемся и пользуемся.
Шаг 2. Собственно каркас Желаемый каркас всё-таки был написан. В качестве языка программирования был выбран Python.Vkbuddyplugin__ = True
Для того, чтобы добавить параметры в конфиг-файл, плагину необходимо объявить переменную config_parameters
:
Config_parameters = [
{"name": "parameter_name", # имя параметра
"required": False, # bool, является ли параметр обязательным
"description": "parameter_description", # описание параметра
"default": "parameter_value", # значение параметра по умолчанию
"typ": str}, # тип параметра...
]
Чтобы создать таблицы в БД (если они еще не существуют), необходимо объявить переменную sql_tables
:
Sql_tables = [
{"name": "table_name", # имя таблицы
"structure":(# структура таблицы: пары (имя столбца, тип столбца)
("id", int),
("column_name", float))},
...
]
Также реализован набор стандартных хендлеров (добавить новые хендлеры можно и в плагинах, так уже реализован хендлер текстовых команд).
Стандартные хендлеры:
Спасибо за внимание!