2

我找到了这个问题的答案https://stackoverflow.com/a/7244888/1473523,但是在我的情况下我无法放置隐藏字段,所以没有办法在 PHP 中发布禁用的选择字段吗?

4

6 回答 6

10

不,这就是禁用该字段的作用:防止将值回发到服务器。如果您禁用该字段,您应该知道它的值,因为它无法更改。您不需要回发该值。

如果该值基于其他输入而发生变化,则应在服务器端捕获该输入并使用它来计算回发的值,这与计算要选择客户端的值的方式相同。依赖客户端计算的值是准确的,这是一个严重的安全漏洞。

您的选择是在表单发布之前以某种方式启用该字段,或者添加一个隐藏字段。

于 2012-06-29T13:55:52.800 回答
1

尝试在提交表单之前删除使用 javascript 禁用的属性。

于 2012-06-29T13:56:25.033 回答
0

根据您发布的问题,这是创建禁用字段的方式:

<select class="txtbx1" name="country_disabled" disabled="disabled">

您也可以将其隐藏:

<select class="txtbx1" name="country_disabled" type="hidden">
于 2012-06-29T13:56:26.203 回答
0

不要依赖客户来做这样的事情。他们可以禁用 JS 或使用浏览器中的开发人员工具或 Fiddler 之类的工具来制作请求。

如果有您期望的值但不允许用户更改,请将其保留在服务器端。例如,使用会话。

于 2012-06-29T13:57:27.403 回答
0

没有办法发布禁用的字段,如果是这样,那将是无稽之谈。

因此,要么在未提交值时在服务器端定义默认值,要么使用<input type="hidden" name="same_as_select" value="default" />提供默认值,然后,如果您的表单已启用,它将始终覆盖默认值。

于 2012-06-29T13:57:41.620 回答
0

不,甚至没有办法,但是您可以测试该字段是否为空以防止未定义的索引通知:

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'];
于 2015-12-03T21:53:38.680 回答