(Продолжение, начало см. МК № 46, 48, 50 (165, 167, 169))
Если вы до сих пор не понимаете, о чем идет речь — об HTML-странице или Perl-скрипте, поясню: и то, и другое находится в одном общем коде, благо синтаксис Perl’а позволяет вставлять в программу большие куски текста:
В нашем случае все JS-функции и HTML-элемент div введены в perl-программу именно этим методом. Исполняемый Perl-код пишется после метки END_TAG. В целом структура скрипта выглядит так:
Опять выводим оператором print<<NEXT_TAG остаток формы
Пишем дальше на Perl’е обработку параметров;
Если нужно сохранять — сохраняем (пишем соответствующую процедуру);
Если нужно добавлять — добавляем (пишем соответствующую процедуру);
Если нужно удалять — удаляем (пишем соответствующую процедуру);
Львиную долю работы по обслуживанию формы на клиентской машине, конечно, берет на себя JavaScript, — Perl только обрабатывает переданные формой аргументы и производит манипуляции с данными. Выигрыш в скорости обработки очевидна — за каждым кликом не нужно лезть на сервер.
Следующий шаг: вывести остаток формы и обработать входящие параметры.
В общем, ничего сложного. Функции check_???() устанавливают значение скрытого поля edit. Далее — тривиальная проверка аргументов. От комментариев воздержусь.
Осталось написать четыре процедуры: &save_values, &show_page, &delete_record, &read_input. Последнюю здесь приводить не буду — чтение потока STDIN и заполнение хэша. Показ страницы производится при любом действии:
Как работает инструкция SELECT ... FROM, пояснять не нужно. В процедуре в каждую ячейку таблицы мы вставим обработку события OnClick(), чтобы при щелчке на ячейке содержимое строки поместилось в поля формы (см. функцию settoedit()).
Теперь запишем данные в базу:
Инструкция INSERT INTO table (field1,field2,field3) VALUES (val1,val2,val3) добавляет в таблицу новую запись и присваивает полям field1...fieldNN значения val1...valNN. При этом полям с атрибутом auto_increment() не пытайтесь присваивать значения — все равно MySQL будет их автонумеровать.
Инструкция UPDATE table SET field1=value1,... fieldNN=valueNN WHERE condition обновляет значения полей в записях(!), удовлетворяющих условию condition. То есть, одной инструкцией можно обновить сразу несколько записей. Например, WHERE id < 100 обновит записи с 1 по 99.
Итак, одной процедурой вносим изменения и добавляем запись, в зависимости от значения скрытого поля edit.
Следующей процедурой удаляем запись:
Тут все просто.
Инструкция DELETE FROM table WHERE condition удаляет все записи, удовлетворяющие условию condition. Вот таким образом можно удалить все записи, где поле URL содержит текст «sex»:
Вот и все. Не правда ли, просто?
Если нет желания возиться со всеми этими JavaScript’ами, то можно выводить в процедуре show_page в каждой строке таблицы форму — тогда, конечно, объем результирующего HTML-кода увеличится, но сам Perl-код заметно упростится.