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

时间:2016-01-06 22:08:28

标签: javascript php forms get form-submit

我有一个带有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

如果我然后点击Choice2提交按钮,&#34;语言&#34;保存了,我得到了:

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

如果我点击英文单选按钮,&#34;选择&#34;没有保存,我得到:

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

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

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

&#34;选择&#34;现在已保存,但我得到了:

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

我不想在网址上两次。请解释我做错了什么。谢谢!

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

3 个答案:

答案 0 :(得分:1)

这是备用版本(作为我的第一个答案的后续内容),在单击选择按钮时更新隐藏值:

<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函数。您可以轻松传入目标输入的id。

此外,您应该重新考虑是否真的需要始终提交表单,或者首先收集所有数据并仅将一个表单发送回服务器可能更好。

答案 1 :(得分:0)

将其添加到表单中:

 <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'];
    }
}

答案 2 :(得分:0)

你传递的名字是两次。 'choice'已被定义为隐藏值名称和按钮值名称。为了能够区分,您应该将隐藏值名称更改为“savedchoice”。并以该名称引用它