Желательно предварительно изучить основы 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).
Получается что-то вроде этого:
А теперь усложним задачу: сделаем включение и выключение одной кнопкой.
Для этого мы добавляем получение текущего значения 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>
Второй пример. Сделаем форму для отправки 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. Добавляем необходимую надпись, место для ввода текста с размерами и кнопку для отправки.
Выглядит это вот так
Данную форму можно вставить с помощью фрейма в стандартную визуализацию.