填充bash脚本中的文本字段

时间:2017-06-07 11:32:02

标签: javascript html bash

所以我有一个带有下拉列表的webform,以及一个需要填充一个非常简单的脚本结果的字段,该脚本将从下拉列表中选择的选项作为输入。 (Web服务器使用apache2和bash,以及用户端的一些js。就是这样。不幸的是,我无法在机器上安装任何其他东西。)

下拉菜单会自动正确填充。 当作为单独的bash脚本运行时,bash函数返回它应该的内容。

所有html片段都会插入到网页上并正确呈现。

问题似乎是因为我无法将下拉菜单中选择的值(由javascript函数处理)传递给bash脚本函数。

有什么想法吗?

有两个文本文件用作源,一个用于下拉菜单:

STUFF.txt:

  

     

     

面粉

要填充的文本字段的另一个:

QUANTITY.txt:

  

egg 12unit

     

牛奶6Liters

     面粉2Kg

下拉:

   if [[ "$User" == "$Authorized" ]];then
    echo "<td height=\"30\">$C_STUFF:</td><td colspan=\"3\" align=\"left\" cellpadding=\"0\"><select id=\"STUFF\" name=\"STUFF\" onChange=\"JS_stuff(this.value);\">"
    STUFF=/apache2/cgi-bin/STUFF.txt
    while IFS='' read -r line || [[ -n "$line" ]]; do
        echo "<option id=\"$line\" name=\"STUFF\" value=\"$line\">$line</option>"
    done < "$STUFF"
    echo "</select>"
    echo "</td><td>&nbsp;&nbsp;</td>"
    fi

文字字段:

echo "<td></td>
<td>Quantity:</td>
<td colspan=\"3\"><text id=\"quantity\" size=\"15\" type=\"quantity\" name=\"quantity\" value=\"$STUFF\" ></text></td></tr>

Javascript功能:

/****STUFF for the text field**********/
function JS_stuff(sel)
{
    var xhttp;
  if (str.length == 0) {
    document.getElementById("quantity").innerHTML = "";
    return;
 }
  xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  document.getElementById("quantity").innerHTML = this.responseText;
 }
 };
  xhttp.open("GET", "getquantity.sh?"+str, true);
  xhttp.send();
 }

Bash脚本&amp;功能:

SCRIPT:

#!/bin/bash
source ./functions.sh
getquantity $QUERY_STRING

functions.sh中的功能:

 get_stuff_fromlist () {
    STUFF="$QUERY_STRING"
    QUANTITY=/apache2/cgi-bin/QUANTITY.txt
    while IFS= read -r line; do
        if [[ $line == $QUERY_STRING* ]] ; then
            printline="yes"
        fi
        if [[ $printline == "yes" ]] ; then
          QUANTITY=  echo "$line" | awk '{print $2}'
        fi
        if [[ $line == $QUERY_STRING* ]] ; then
            printline="no"
            echo "$STUFF"
        fi
    done < "$QUANTITY"
    }

1 个答案:

答案 0 :(得分:0)

首先,一些通用评论。

  • 我假设bash脚本是以CGI脚本运行的。
  • 通常,出于安全原因,带有bash后端的交互式网页不是一个好主意。执行某些命令注入会更容易,从而危及服务器的安全。我现在不知道为什么其他东西无法安装,但如果你因为安全性而说过它,那么你也应该避免使用bash处理从浏览器到服务器的数据。

至于你提到的问题。有两种可能的解决方案。

解决方案1 ​​ - 由于安全原因,不适合bash。

您需要有两个脚本。使用下拉列表生成webform的一个主要脚本。另一个,帮助者,接收作为参数的东西并返回数量。因此,您的javascript onChange处理程序将使用XMLHttpRequest()运行帮助程序脚本来获取数量。欢迎来到AJAX世界。该解决方案的明显缺点是帮助程序脚本由来自浏览器的数据提供,并且恶意用户可以欺骗请求以提供其自己的值。在帮助程序脚本中,您需要确保不会意外地运行此类流氓提供的代码。它在bash中很难,在其他脚本语言中也比较容易。

解决方案2

以包含javascript变量的方式准备webform,该变量是包含内容和数量的关联数组。 onChange处理程序查找此表并适当填充数量。要开发所需的代码,您甚至可以编写一个包含所有数据编码的静态HTML文件。然后,当您对您的JavaScript解决方案感到满意时,请使用CGI脚本生成网页。这个解决方案很好,因为东西的数量很少(小的门槛取决于你)。它在客户端,在浏览器中运行,不向服务器发出任何其他请求。

PS。在脚本的下拉部分,您将关闭</select>代码两次。