发布禁用的选择字段PHP

时间:2012-06-29 13:52:49

标签: php html post html-select

我找到了这个问题https://stackoverflow.com/a/7244888/1473523的答案,但在我的情况下,我无法设置隐藏字段,那么在PHP中发布禁用的选择字段是否无法做到?

6 个答案:

答案 0 :(得分:10)

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

如果值正在根据其他输入进行更改,则应捕获该输入服务器端并使用它来计算回发的值,就像计算哪个值一样选择客户端。依靠客户端计算的值是准确的是严重的安全漏洞。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

您也可以隐藏它:

<select class="txtbx1" name="country_disabled" type="hidden">

答案 3 :(得分:0)

不要依赖客户端这样的东西。他们可以使用浏览器中的开发人员工具或像Fiddler这样的工具禁用JS或制作请求。

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

答案 4 :(得分:0)

没有办法发布一个禁用的字段,如果它是无意义的。

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

答案 5 :(得分: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'];