我找到了这个问题的答案https://stackoverflow.com/a/7244888/1473523,但是在我的情况下我无法放置隐藏字段,所以没有办法在 PHP 中发布禁用的选择字段吗?
6 回答
不,这就是禁用该字段的作用:防止将值回发到服务器。如果您禁用该字段,您应该知道它的值,因为它无法更改。您不需要回发该值。
如果该值基于其他输入而发生变化,则应在服务器端捕获该输入并使用它来计算将回发的值,这与计算要选择客户端的值的方式相同。依赖客户端计算的值是准确的,这是一个严重的安全漏洞。
您的选择是在表单发布之前以某种方式启用该字段,或者添加一个隐藏字段。
尝试在提交表单之前删除使用 javascript 禁用的属性。
根据您发布的问题,这是创建禁用字段的方式:
<select class="txtbx1" name="country_disabled" disabled="disabled">
您也可以将其隐藏:
<select class="txtbx1" name="country_disabled" type="hidden">
不要依赖客户来做这样的事情。他们可以禁用 JS 或使用浏览器中的开发人员工具或 Fiddler 之类的工具来制作请求。
如果有您期望的值但不允许用户更改,请将其保留在服务器端。例如,使用会话。
没有办法发布禁用的字段,如果是这样,那将是无稽之谈。
因此,要么在未提交值时在服务器端定义默认值,要么使用<input type="hidden" name="same_as_select" value="default" />
提供默认值,然后,如果您的表单已启用,它将始终覆盖默认值。
不,甚至没有办法,但是您可以测试该字段是否为空以防止未定义的索引通知:
if(empty($_POST['select_name'])){ //or !isset()
$disabled_select = 0; //or its default value
} else {
$disabled_select = $_POST['select_name'];
}
我更喜欢使用单行:
$disabled_select = empty($_POST['select_name']) ? 0 : $_POST['select_name'];