CGI: Get CGI variables
VBScript and JavaScript CGI
Get CGI variables
Writing CGI scripts using JavaScript will require access to CGI variables.
A VBScript to perform this task was covered on the URL encoding page. WSF allows you to use functions written in either VBScript or Jscript. Unfortunately there is a time penalty to pay hence write your CGI script exclusively in either VBScript or Jscript.
This page covers a JScript version of the Get CGI variables function.
VBScript - Get CGI variables function
VBScript: For consistency the VBScript Get CGI variables function is reproduced on the right. |
'=== Function Get CGI variables =============================================== Function cgi_variables() Set cgi_hash = CreateObject("Scripting.Dictionary")'Create associative array '--Access environment variables and post data Set wshShell = CreateObject( "WScript.Shell" ) 'Create shell Set objEnv = wshShell.Environment( "Process" ) 'Access enviroment method = objEnv("REQUEST_METHOD") 'Get method data_string = objEnv("QUERY_STRING") 'Get query string If method="POST" Then 'If post data read stdin data_string = WScript.Stdin.ReadAll 'Get post data End IF Set wshShell = Nothing 'clean-up Set objEnv = Nothing '--Save variable-value pairs to array variable_array = split (data_string, "&") 'split and save to array '--Populate the scripting dictionary for i = 0 to ubound(variable_array) 'Scan array cgi_variable = split (variable_array(i), "=") 'Split variable-value pairs decoded_value1 = replace(cgi_variable(0), "+", " ")'Replace special character decoded_value1 = unescape(decoded_value1) 'Decode encoded value decoded_value2 = replace(cgi_variable(1), "+", " ")'Replace special character decoded_value2 = unescape(decoded_value2) 'Decode encoded value my_hash.add decoded_value1, decoded_value2 'Add to dictionary next 'Get next pair Set cgi_variables = cgi_hash 'Return dictionary End Function '=========================================== End Function Get CGI variables === |
How to use: An example of its use is shown on the right. |
'--Example of cgi dictionary function use. Set cgi = cgi_variables() 'Get cgi dictionary wscript.echo cgi.item("text") 'Display text var wscript.echo cgi.item("Language") 'Display language var |
Test Script 12 - Raw data form example
This script contains two forms these send data either using GET or POST. It displays the method used and data sent. Data is displayed raw it is not decoded or separated into variables.
Click either the Get or Post buttons encoded data sent to the server is displayed. Default string entered: Cat & dog=50a% There is a hidden string: English This gives encoded string as shown below: text=Cat++%26+dog%3D50a%25&Language=English |
'!c:/windows/system32/cscript //nologo <job> <script language="JScript"> WSH.Echo("Content-type: text/html \n\n"); WSH.Echo("<html>"); WSH.Echo("<title>Test 12</title>"); WSH.Echo("<body>"); // Get WshShell object. var WshShell = WScript.CreateObject("WScript.Shell"); // Get collection by using the Environment property. var objEnv = WshShell.Environment("Process"); // Get CGI data var method = objEnv("REQUEST_METHOD"); //set to request method // Read post data var post_data = "" // Rest post data string if (method=="POST"){ // If POST read stdin while (!WScript.StdIn.AtEndOfStream){ // Loop until no more data post_data += WScript.StdIn.ReadAll(); // Build string } } // Display CGI data WSH.Echo("Method: " + method + "<br />"); WSH.Echo("Query String: " + objEnv("QUERY_STRING") + "<br />"); WSH.Echo("Post data: " + post_data + "<br />"); WSH.Echo("<br />"); // Form method post WSH.Echo("<form method=\"POST\" action=\"test12.wsf\" >"); WSH.Echo(" <input type=\"text\" name=\"text\" value=\"Cat & dog 50a%\">"); WSH.Echo(" <input type=\"hidden\" name=\"Language\" value=\"English\">"); WSH.Echo(" <input type=\"submit\" value=\"Post\">"); WSH.Echo("</form>"); // Form method get WSH.Echo("<form method=\"GET\" action=\"test12.wsf\" >"); WSH.Echo(" <input type=\"text\" name=\"text\" value=\"Cat & dog 50a%\">"); WSH.Echo(" <input type=\"hidden\" name=\"Language\" value=\"English\">"); WSH.Echo(" <input type=\"submit\" value=\"Get\">"); WSH.Echo("</form>"); WSH.Echo("</body>"); WSH.Echo("</html>"); </script> </job> |
Test Script 13 - Function Get CGI variables
This script contains two forms these send data either using GET or POST. It uses a function to separate variables sent and decodes their corresponding values. These are then displayed.
Click either the Get or Post buttons, encoded and decoded data is displayed. Note: After testing. The encoded data display section can be removed from the function.
|
'!c:/windows/system32/cscript //nologo <job> <script language="JScript"> WSH.Echo("Content-type: text/html \n\n"); WSH.Echo("<html>"); WSH.Echo("<title>Test 13</title>"); WSH.Echo("<body>"); //=== Function Get CGI variables ============================================== function cgi_variables(){ var cgi_hash = new Array(); //Create associative array var data_str ="" //reset received data var WshShell = WScript.CreateObject("WScript.Shell"); //Create shell object var objEnv = WshShell.Environment("Process"); //Access enviroment var method = objEnv("REQUEST_METHOD"); //set to send method if (method=="POST"){ // If POST while (!WScript.StdIn.AtEndOfStream){ // Read data from stdin data_str += WScript.StdIn.ReadAll(); // Build string } // Loop until no more data } else{ // Method was GET data_str = objEnv("QUERY_STRING"); // Set data to query string } //***** Test code ********************************************** // Display CGI data WSH.Echo("Method: " + method + "<br />"); WSH.Echo("Data string: " + data_str + "<br />"); //***** Test code *********************************************** if (data_str ==""){ //If string empty return cgi_hash; //Return the blank array } // Split and save all variable-value pairs to array var variable_array = data_str.split ("&"); for (i=0;i<variable_array.length;i++){ // Scan array var pair_str = variable_array[i]; // Get variable-value pairs var cgi_variables = pair_str.split("="); // Split into variable/value var decoded = cgi_variables[1]; // Get encoded value decoded = decoded.replace(/\+/gi, " "); // Replace special character + decoded = unescape(decoded); // Complete the decoding cgi_hash[cgi_variables[0]] = decoded; // Add to associative array } // index set to variable return cgi_hash; //Return the array } //End function //========================================== End Function Get CGI variables === // Example of function use: var cgi_vars = new Array; // Create new array cgi_vars = cgi_variables(); // Get CGI variables //Use square index brackets WSH.Echo("Text value: " + cgi_vars["text"] + "<br >"); //Print value WSH.Echo("Language: " + cgi_vars["Language"] + "<br >"); //Print value //Or use the dot operator WSH.Echo("Text value: " + cgi_vars.text + "<br >"); //Print value WSH.Echo("Language: " + cgi_vars.Language + "<br >"); //Print value WSH.Echo("<br >"); //Print blank line // Form method post WSH.Echo("<form method=\"POST\" action=\"test13.wsf\" >"); WSH.Echo(" <input type=\"text\" name=\"text\" value=\"Cat & dog 50a%\">"); WSH.Echo(" <input type=\"hidden\" name=\"Language\" value=\"English\">"); WSH.Echo(" <input type=\"submit\" value=\"Post\">"); WSH.Echo("</form>"); // Form method get WSH.Echo("<form method=\"GET\" action=\"test13.wsf\" >"); WSH.Echo(" <input type=\"text\" name=\"text\" value=\"Cat & dog 50a%\">"); WSH.Echo(" <input type=\"hidden\" name=\"Language\" value=\"English\">"); WSH.Echo(" <input type=\"submit\" value=\"Get\">"); WSH.Echo("</form>"); WSH.Echo("</body>"); WSH.Echo("</html>"); </script> </job> |
JScript - Get CGI variables function
For consistency the JScript Get CGI variables function is shown on the right. |
//=== Function Get CGI variables ============================================== function cgi_variables(){ var cgi_hash = new Array(); //Create associative array var data_str ="" //reset received data var WshShell = WScript.CreateObject("WScript.Shell"); //Create shell object var objEnv = WshShell.Environment("Process"); //Access enviroment var method = objEnv("REQUEST_METHOD"); //set to send method if (method=="POST"){ // If POST while (!WScript.StdIn.AtEndOfStream){ // Read data from stdin data_str += WScript.StdIn.ReadAll(); // Build string } // Loop until no more data } else{ // Method was GET data_str = objEnv("QUERY_STRING"); // Set data to query string } if (data_str ==""){ //If string empty return cgi_hash; //Return the blank array } // Split and save all variable-value pairs to array var variable_array = data_str.split ("&"); for (i=0;i<variable_array.length;i++){ // Scan array var pair_str = variable_array[i]; // Get variable-value pairs var cgi_variables = pair_str.split("="); // Split into variable/value var decoded = cgi_variables[1]; // Get encoded value decoded = decoded.replace(/\+/gi, " "); // Replace special character + decoded = unescape(decoded); // Complete the decoding cgi_hash[cgi_variables[0]] = decoded; // Add to associative array } // index set to variable return cgi_hash; //Return the array } //End function //========================================== End Function Get CGI variables === |
An example of its use is shown on the right: |
// Example of function use: var cgi_vars = new Array; // Create new array cgi_vars = cgi_variables(); // Get CGI variables //Use square index brackets WSH.Echo("Text value: " + cgi_vars["text"] ); WSH.Echo("Language: " + cgi_vars["Language"] ); //Or use the dot operator WSH.Echo("Text value: " + cgi_vars.text ); WSH.Echo("Language: " + cgi_vars.Language ); |
Summary
The Get CGI variables function is similar in both VBScript and JavaScript this is an important function when writing any CGI script. At this stage you currently have enough information to creative dynamic web pages written in either VBScript or Jscript.
Remainder of this tutorial concentrates on writing CGI scripts using VBScript. You will quickly find a need for storing data this can be in the form of a database such as a MySQL server alternatively a file-based system. A file based database is coved on the next two pages this is suitable for the majority of simple application.
Where to next
Next page covers the VBScript Dictionary this will be used as the main component for a file-based database.