代码之家  ›  专栏  ›  技术社区  ›  Jinjinov

如何在从javascript提交表单后从提交按钮保存php$_GET值?

  •  1
  • Jinjinov  · 技术社区  · 9 年前

    我有一个带有2个提交按钮和2个单选按钮的php页面:

    <?php
    $choiceIdx = 1;
    $language = 'English';
    
    if($_GET)
    {
        if(isset( $_GET['choice'] ))
        {
            $choiceIdx = $_GET['choice'];
        }
        if(isset( $_GET['language'] ))
        {
            $language = $_GET['language'];
        }
    }
    ?>
    
    <form method="get">
        <button type='submit' name='choice' value='1'>Choice1</button>
        <button type='submit' name='choice' value='2'>Choice2</button>
    
        <input id="English" type="radio" name="language" value="English" <?php echo ($language=='English')?'checked':'' ?> onchange="this.form.submit();" />
        <label for="English">English</label>
    
        <input id="Slovenian" type="radio" name="language" value="Slovenian" <?php echo ($language=='Slovenian')?'checked':'' ?> onchange="this.form.submit();" />
        <label for="Slovenian">Slovenian</label>
    </form>
    

    如果我单击斯洛文尼亚单选按钮,我会得到:

    http://localhost/index.php?language=Slovenian
    

    如果我单击选项2提交按钮,“语言”将被保存,我会得到:

    http://localhost/index.php?choice=2&language=Slovenian
    

    如果我点击英文单选按钮,“选择”不会保存,我会得到:

    http://localhost/index.php?language=English
    

    这是我的第一个php页面,经过几个小时的谷歌搜索,我添加了这一行:

    <input type="hidden" name="choice" value="<?php echo $choiceIdx; ?>">
    

    “选择”现在已保存,但我得到:

    http://localhost/index.php?choice=1&language=Slovenian&choice=2
    

    我不想在url中重复两次。请解释我做错了什么。非常感谢。

    编辑:我想使用GET(而不是POST),因为URL必须保存为书签。

    3 回复  |  直到 9 年前
        1
  •  1
  •   Jeff    9 年前

    下面是一个替代版本(作为我第一个答案的后续),它在单击选择按钮时更新隐藏值:

    <script>
    function setChoice(val) {
        document.getElementById('hiddenChoice').value=val;
    }
    </script>
    
    <form method="get">
        <button type='submit' onClick="setChoice(1);">Choice1</button>
        <button type='submit' onClick="setChoice(2);">Choice2</button>
        <input type='hidden' id='hiddenChoice' name='choice' value='<?php echo $choiceIdx; ?>'>
        <input id="English" type="radio" name="language" value="English" <?php echo ($language=='English')?'checked':'' ?> onchange="this.form.submit();" />
        <label for="English">English</label>
    
        <input id="Slovenian" type="radio" name="language" value="Slovenian" <?php echo ($language=='Slovenian')?'checked':'' ?> onchange="this.form.submit();" />
        <label for="Slovenian">Slovenian</label>
    </form>
    

    如果要检索更多的值,您可能需要创建一个更独立、更不具体的js函数。您可以轻松地传递目标输入f.e的id。

    此外,你应该重新考虑是否真的有必要 总是 提交表单,或者最好先收集所有数据,然后只将一个表单发送回服务器。

        2
  •  0
  •   Jeff    9 年前

    将其添加到表单中:

     <input type='hidden' name='choiceStored' value='<?php echo $choiceIdx; ?>'>
    

    这将存储上次收到的val供选择,并在下次提交表单时重新发送。

    并将php更改为:

    $choiceIdx = 1;
    $language = 'English';
    
    if($_GET)
    {
        // eighter get new value
        if(isset( $_GET['choice'] ))
        {
            $choiceIdx = $_GET['choice'];
    
          // or if we don't have a new value, take the 'stored' one:
        } elseif (isset($_GET['choiceStored'])) 
        {
            $choiceIdx = $_GET['choiceStored'];
        }
    
        if(isset( $_GET['language'] ))
        {
            $language = $_GET['language'];
        }
    }
    
        3
  •  0
  •   Adam Copley    9 年前

    你正在两次传递相同的名称。”choice’已被定义为隐藏值名称和按钮值名称。为了能够区分,您应该将隐藏值名称更改为类似“savedchoice”的名称。并用这个名字引用它