在选择列表中通过onchange =“formType.submit()”进行更新时,我没有得到预期的结果。
我希望将PHP $ _POST值设置为新网址,但在提交表单时看起来该值仍未显示。
原始网址:http://example.com/Select-item.php?type=4
<form action="Select-item.php?type=<?php echo $_POST['selItem']; ?>" method="post" id="formType">
<select name="selItem" id="selItem" onchange="formType.submit()">
<option value="1">change to 1</option>
<option value="2">change to 2</option>
<option value="3">change to 3</option>
</select>
</form>
我收到的错误是未定义索引(... Select-item.php?type = Notice:%20Undefined%20index:%20 ...)
通过发布到同一页面,读取$ _POST值然后使用来更新此页面URL的正确方法
答案 0 :(得分:1)
PHP在将HTML代码传输到客户端之前生成HTML代码;在客户收到代码后,它会将其呈现给网站
您的代码无法正常工作的原因,因为执行<?php echo $_POST['selItem']; ?>
时没有设置POST-Variable selItem;它是在表单提交后设置的。
如果您真的想将selItem作为GET 和传输为POST变量 - 这样做的一种可行方法是使用此函数(未经测试):
<script>
function onSelectChange() {
// Access the select-field and get it's value
var sel = document.getElementById("selItem");
var selectedValue = sel.options[sel.selectedIndex].value;
// Change the target URL of the form
document.getElementById("formType").action = 'Select-item.php?type='+ selectedValue;
formType.submit()
}
</script>
并在您的选择中编辑onChange-Listener:onchange="onSelectChange"
但是我建议使用GET - 这样selItem也会一直在URL中,你不需要同时检查$ _GET和$ _POST
答案 1 :(得分:0)
在使用$ _POST
之前,请务必使用isset()函数进行检查示例:
if(isset($_POST['selItem'])){
//your code here
}