【问题标题】:pass a value from HTML page which is not part of a form to a php page将不属于表单的 HTML 页面的值传递给 php 页面
【发布时间】:2016-05-04 21:45:27
【问题描述】:

我知道在页面之间传递变量的一般方法是有一个表单,在表单中包含这些元素,如下所示,并以$_GET['year']$_GET['dropdown'] 访问这些元素

<body>
<form method="get" action="index.php">
    <select name="language">        
        <option value = "english">English</option>
        <option value = "tagalog">Tagalog</option>
    </select>
    </br>

    <select name="year">
        <option value="2010">2010</option>
        <option value="2011">2011</option>
    </select>

    <input type="submit" value="submit">
</form>
</body>

但是,除了传递这两个变量,即yeardropdown,我还想传递另一个变量,它不是表单的一部分。因此,虽然表单中只有两个元素,但我希望 GET URL 如下所示

http://localhost:63342/ApplicationName/php/index.php?language=tagalog&year=2010&randomNumber=1932932

注意网址末尾的 randomNumber=1932932

我不能使用会话变量,因为在同一个浏览器和同一个用户中,我希望不同的选项卡对应不同的值。

【问题讨论】:

  • 为什么隐藏字段不能成为表单的一部分?
  • 随机数从何而来?
  • @Don'tPanic,假设它可以是 1 到 100 之间的任何值。
  • 但我的意思是,它是在你的 JS 中生成的还是什么?
  • @Don'tPanic,按照 Jose Manuel Abarca Rodríguez 和 Kyle Hawk 的建议,我尝试了隐藏字段。但是,如果我硬编码 HTML,我如何生成这个随机数,正如解决方案所指向的那样。

标签: javascript php html forms get


【解决方案1】:

如果您不想使用 jQuery(这比原生 JavaScript 更简单)之类的东西,您可以为提交按钮创建一个简单的点击处理程序:

<body>
<form method="get" action="test.php">
    <select name="language">        
        <option value = "english">English</option>
        <option value = "tagalog">Tagalog</option>
    </select>
    <select name="year">
        <option value="2010">2010</option>
        <option value="2011">2011</option>
    </select>

    <input type="submit" value="submit" onclick="submitForm()">
</form>
</body>
<script>
    function submitForm() {
        var randomNumber = Math.floor((Math.random() * 10000) + 1); 
        var hiddenfield = document.createElement('input');
        hiddenfield.setAttribute('type', 'hidden');
        hiddenfield.name = 'randomnumber';
        hiddenfield.value = randomNumber;

        document.getElementsByTagName('form')[0].appendChild(hiddenfield);
    }
</script>

这将在发布前向表单添加一个隐藏字段,并向隐藏字段添加一个 1 - 10000 之间的随机数。

【讨论】:

    【解决方案2】:

    您可以在表单中使用隐藏输入

    <input type="hidden" value="something" name="name" />
    

    【讨论】:

    • 几乎没问题。我对其进行了测试,并且能够将 $_GET['hiddenFieldName'] 的值作为“某物”。但是我怎样才能动态生成值,比如使用硬编码 HTML 的 1 到 100 之间的随机数。
    • 您需要 mt_rand() 函数。见这里:w3schools.com/php/func_math_mt_rand.asp
    • 这是一个 php 函数。我希望随机数成为 URL 的一部分,这意味着它应该在提交按钮之前生成。
    • @PepperBoy 你可以使用凯尔建议的方法。第一次加载带有表单的页面时,您调用 Kyle 演示的函数。那么当你提交表单时,随机数就会出现在url中。您在页面加载时生成随机数,而不是表单提交。
    • @PepperBoy 如果随机数在 GET 表单的隐藏输入中,它成为 URL 的一部分。
    【解决方案3】:

    您可以采用的一个选项是在 Ajax 中构建 get 方法。在这里,您可以访问页面中的所有元素并将其传递到您的 url。这样,您就不会将“获取参数”限制为仅表单中的元素。此处显示了一个示例http://www.w3schools.com/jquery/jquery_ajax_get_post.asp

    【讨论】:

    • 把你的想法变成真正的代码,并结合问题中的代码。
    【解决方案4】:

    如果您仍然使用 GET,则可以使用 javascript 根据输入创建一个 URL,然后导航到该 URL,而不是提交表单。

    <body>
    
    <select name="language" id="lang">        
        <option value = "english">English</option>
        <option value = "tagalog">Tagalog</option>
    </select>
    </br>
    <select name="year" id="year">
        <option value="2010">2010</option>
        <option value="2011">2011</option>
    </select>
    <input type="button" onclick="nav()" value="submit">
    
    <script>
        function nav(){
            var url = 'index.php?';
            var ids = ['lang', 'year'];
            var input;
            for (var i = 0; i < ids.length; i++) {
                input = document.getElementById(ids[i]);
                url += encodeURIComponent(input.name) + '=' + encodeURIComponent(input.value) + '&';
            };
            url += 'randomNumber=' + 1932932; // generate a number here
            document.location = url;
        }
    </script>
    </body>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-05
      • 2015-05-17
      • 2017-10-14
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2014-03-06
      相关资源
      最近更新 更多