Вам нужен пакет ncgi (в Tcllib), который вы можете использовать для декодирования значений в форме и извлечения их в переменные. Для этого у вас будет веб-страница с такой формой:
<form method="POST" action="/cgi-bin/addTransaction.tcl">
<li>Transaction Number: <input type="text" name="tnumber">
<li>Employee Name: <input type="text" name="ename">
<li><input type="submit" value="Add">
</form>
(Я не буду вдаваться в подробности написания формы на веб-странице.)
Затем в вашей программе (addTransaction.tcl
) вы делаете что-то вроде этого:
package require ncgi
package require sqlite3
ncgi::parse
set xact [ncgi::value "tnumber"]
set name [ncgi::value "ename"]
sqlite3 db $::env(ROOT)/database.db
db eval {INSERT INTO trans VALUES ($xact, $name)}
db close
Обратите внимание, что я изменил имена переменных, чтобы они отличались от имен в веб-форме. Это показывает, что они не обязательно должны быть одинаковыми . Следует также отметить, что вы можете сделать поле номера транзакции необязательным (указать значение по умолчанию через второй необязательный аргумент для ncgi::value
), а также, возможно, было бы лучше создать идентификаторы транзакций в базе данных (но это еще один отдельный вопрос; в этом ответе я сосредоточился на том, как подключиться из Интернета к SQLite).
Более интересен тот факт, что приведенный выше код не содержит атак с использованием SQL-инъекций. Однако всякий раз, когда вы берете содержимое базы данных и отправляете его обратно в Интернет, вам нужно быть осторожным, иначе вы оставите открытые XSS-атаки. Именно тогда полезен html пакет (снова Tcllib), так как он позволяет вам генерировать правильный вывод без риска с минимальными усилиями. Но это другой вопрос ...