如何在 javascript 提交表单后保留提交按钮的 php $_GET 值?
How to keep php $_GET value from a submit button after form submit from javascript?
我有一个带有 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 提交按钮,"language" 被保存并且我得到:
http://localhost/index.php?choice=2&language=Slovenian
如果我随后单击英文单选按钮,"choice" 不会保存,我会得到:
http://localhost/index.php?language=English
这是我的第一个 php 页面,经过数小时的谷歌搜索后,我添加了这一行:
<input type="hidden" name="choice" value="<?php echo $choiceIdx; ?>">
"choice" 现在已保存,但我得到:
http://localhost/index.php?choice=1&language=Slovenian&choice=2
我不想在 url 中重复两次。请解释我做错了什么。谢谢!
编辑:我想使用 GET(而不是 POST),因为 URL 必须保存为书签。
将其添加到您的表单中:
<input type='hidden' name='choiceStored' value='<?php echo $choiceIdx; ?>'>
这将存储最后收到的供选择的值,并re-send它在下一个表单提交时。
并将您的 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'];
}
}
您两次传递同一个名字。 'choice' 已定义为隐藏值名称和按钮值名称。为了能够区分,您应该将隐藏值名称更改为 'savedchoice' 之类的名称。并用那个名字引用它
这是一个替代版本(作为我第一个回答的后续),它在单击 choice-button 时更新隐藏值:
<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-function。您可以轻松传入目标输入的 id f.e.
另外你应该重新考虑是否真的有必要总是提交表单,或者是否最好先收集所有数据然后只将一个表单发送回服务器.
我有一个带有 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 提交按钮,"language" 被保存并且我得到:
http://localhost/index.php?choice=2&language=Slovenian
如果我随后单击英文单选按钮,"choice" 不会保存,我会得到:
http://localhost/index.php?language=English
这是我的第一个 php 页面,经过数小时的谷歌搜索后,我添加了这一行:
<input type="hidden" name="choice" value="<?php echo $choiceIdx; ?>">
"choice" 现在已保存,但我得到:
http://localhost/index.php?choice=1&language=Slovenian&choice=2
我不想在 url 中重复两次。请解释我做错了什么。谢谢!
编辑:我想使用 GET(而不是 POST),因为 URL 必须保存为书签。
将其添加到您的表单中:
<input type='hidden' name='choiceStored' value='<?php echo $choiceIdx; ?>'>
这将存储最后收到的供选择的值,并re-send它在下一个表单提交时。
并将您的 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'];
}
}
您两次传递同一个名字。 'choice' 已定义为隐藏值名称和按钮值名称。为了能够区分,您应该将隐藏值名称更改为 'savedchoice' 之类的名称。并用那个名字引用它
这是一个替代版本(作为我第一个回答的后续),它在单击 choice-button 时更新隐藏值:
<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-function。您可以轻松传入目标输入的 id f.e.
另外你应该重新考虑是否真的有必要总是提交表单,或者是否最好先收集所有数据然后只将一个表单发送回服务器.