The sqlpage.variables function
Introduced in SQLPage 0.15.0.
Returns a JSON string containing all variables passed as URL parameters or posted through a form.
The database's json handling functions can then be used to process the data.
Example: a form with a variable number of fields
Making a form based on questions in a database table
We can create a form which has a field for each value in a given table like this:
select 'form' as component, 'handle_survey_answer.sql' as action;
select question_id as name, question_text as label from survey_questions;
Handling form responses using sqlpage.variables
In handle_survey_answer.sql
, one can process the form results even if we don't know in advance
how many fields it contains.
The function to parse JSON data varies depending on the database engine you use.
In SQLite
In SQLite, one can use json_each
:
insert into survey_answers(question_id, answer)
select "key", "value" from json_each(sqlpage.variables('post'))
In Postgres
Postgres has json_each_text
:
INSERT INTO survey_answers (question_id, answer)
SELECT key AS question_id, value AS answer
FROM json_each_text(sqlpage.variables('post')::json);
In Microsoft SQL Server
INSERT INTO survey_answers
SELECT [key] AS question_id, [value] AS answer
FROM OPENJSON(sqlpage.variables('post'));
In MySQL
MySQL has JSON_TABLE
,
and JSON_KEYS
which are a little bit less straightforward to use:
INSERT INTO survey_answers (question_id, answer)
SELECT
question_id,
json_unquote(
json_extract(
sqlpage.variables('post'),
concat('$."', question_id, '"')
)
)
FROM json_table(
json_keys(sqlpage.variables('post')),
'$[*]' columns (question_id int path '$')
) as question_ids
Parameters
method
Optional. The HTTP request method (GET or POST). Must be a literal string. When not provided, all variables are returned.
basic_auth_password
basic_auth_username
cookie
current_working_directory
environment_variable
exec
fetch
hash_password
header
link
path
persist_uploaded_file
protocol
random_string
read_file_as_data_url
read_file_as_text
request_method
run_sql
uploaded_file_mime_type
uploaded_file_name
uploaded_file_path
url_encode
variables
version