Горячая линия Embedded System Rus:8-800-775-06-34 (звонок по России бесплатный)

LM5_N
LM-Wall_N
DALI_N
Vita_N

Урок 2. Формы

Желательно предварительно изучить основы HTML, например http://html.manual.ru/

Sandbox (песочница)- отдельный веб-сервер на LogicMachine, предназначенный для создания своих WEB-страниц, с возможностью доступа к базе данных и функциям LogicMachine с помощью скриптов LUA. Подробнее о включении и настройке смотрите Руководство пользователя по LogicMachine стр. 255

Некоторые моменты опускаются, так как уже были описаны в Уроке 1.

Формы применяются для передачи данных из веб-страницы для обработки веб-сервером.

Ниже мы рассмотрим на 2-х примерах возможные методы передачи данных через GET и POST запросы. Разница между двумя методами заключается в следующем: GET передает данные серверу используя URL, когда POST передает данные, используя тело HTTP запроса.

Длина URL’а ограничена 1024 символами, это и будет верхним ограничением для данных, которые можно отослать GET’ом.

POST может отправлять гораздо большие объемы данных. Лимит устанавливается веб-сервером и обычно равен около 2MB.

Передача данных методом POST более безопасна, чем методом GET, так как секретные данные (например пароль) не отображаются напрямую в web-клиенте пользователя (в отличие от URL, который виден почти всегда).

Пример первый. Сделаем управление одним каналом реле с помощью кнопки. Начнем с простого. Сделаем 2 кнопки. Одна включить, другая – выключить. Передача данных через метод get. Создаем файл lesson3a.lp и копируем туда следующее:

<? print('HTTP/1.0 200 OK\r\nContent-Type:
text/html\r\nCache-Control: no-cache, must-revalidate\r\nPragma: no-cache\r\n') ?>
 
<!DOCTYPE html>
 
<html>
 
<head>
 
<meta http-equiv="Content-Type" Content="text/html;charset=utf-8">
 
</head>
 
<body>
 
<?
 
require('genohm-scada')
 
require('dbenv')
 
db = dbenv:new()
 
lamp = getvar('lamp')
 
if(lamp ~= nil) then
 
grp.write('1/1/12',lamp)
 
end
 
?>
 
<form action="lesson3a.lp" method="get">
 
<button type="submit" value="1" name="lamp"> Включить</button>
 
<button type="submit" value="0" name="lamp"> Выключить</button>
 
</form>
 
</body>
 
</html>

Основная функция языка lua, которая нам потребуется – это getvar(‘имя_переменной’). С помощью неё можно получать данные из запросов. При первом запуске страницы переменная lamp = nil, поэтому никаких действий не производится. Важно отметить, что в Form action должен быть указан тот же файл, в котором мы и делаем обработку.

Далее создаем форму с двумя кнопками. Отличаются они лишь параметром, который они передают (value).

Получается что-то вроде этого:

forma1

А теперь усложним задачу: сделаем включение и выключение одной кнопкой.

Для этого мы добавляем получение текущего значения value = grp.getvalue(‘1/1/12’) и далее создаём необходимые нам переменные

if value == true then
name = ‘Выключить’
next_val = 0
else
name = ‘Включить’
next_val = 1
end

Кнопка теперь у нас одна и выглядит она так:

<button type=»submit» value=<? print(next_val)?> name=»lamp»><? print(name)?></button>

Где значение value= у нас получается из next_val, для этого мы как раз и «печатаем» значение переменной, а надпись получаем из переменной name.

В итоге это выглядит так:

<? print('HTTP/1.0 200 OK\r\nContent-Type:
text/html\r\nCache-Control: no-cache, must-revalidate\r\nPragma: no-cache\r\n') ?>
 
<!DOCTYPE html>
 
<html>
 
<head>
 
<meta http-equiv="Content-Type" Content="text/html;charset=utf-8">
 
</head>
 
<body>
 
<?
 
require('genohm-scada')
 
require('dbenv')
 
db = dbenv:new()
 
lamp = getvar('lamp')
 
if(lamp ~= nil) then
 
grp.write('1/1/12',lamp)
 
end
 
value = grp.getvalue('1/1/12')
 
if value == true then
 
name = 'Выключить'
 
next_val = 0
 
else
 
name = 'Включить'
 
next_val = 1
 
end
 
?>
 
<form action="lesson3a.lp" method="get">
 
<button type="submit" value=<? print(next_val)?> name="lamp"><? print(name)?></button>
 
</form>
 
</body>
 
</html>

forma2

Второй пример. Сделаем форму для отправки  e-mail сообщения для пользователя. Назовём файл lesson3b.lp

<? print('HTTP/1.0 200 OK\r\nContent-Type:
text/html\r\nCache-Control: no-cache, must-revalidate\r\nPragma: no-cache\r\n') ?>
 
<!DOCTYPE html>
 
<html>
 
<head>
 
<meta http-equiv="Content-Type" Content="text/html;charset=utf-8">
 
</head>
 
<body>
 
<?
 
require('genohm-scada')
 
require('dbenv')
 
require('user.mail')
 
db = dbenv:new()
 
msg = getvar('msg')
 
if(msg ~= nil) then
 
mail('vasha@evika.ru', 'проблема у пользователя 1233', 'Описание проблемы '..msg )
 
end
 
?>
 
<form action="lesson3b.lp" method="post">
 
<p> Напишите о проблеме </p>
 
<p><textarea rows="10" cols="45" name="msg">
 
</textarea></p>
 
<p><input  type="submit" value="Отправить" ></p>
 
</form>
 
</body>
 
</html>

require(‘user.mail’) — Здесь нам потребуется в разделе Скрипты -> Пользовательские библиотеки (Scripting – User Libraries) добавить библиотеку с функцией отправки e-mail сообщений под именем mail. Аналогично считываем значение с помощью команды msg = getvar(‘msg’) и проверяем на наличие сообщения. Если сообщение есть – отправляем e-mail с помощью команды mail(to, subj, msg).

Сама форма создаётся аналогично, только указываем метод – POST. Добавляем необходимую надпись, место для ввода текста с размерами и кнопку для отправки.

Выглядит это вот так

forma3

Данную форму можно вставить с помощью фрейма в стандартную визуализацию.