如何验证所选选项只能使用一次,而不是双倍,可以吗?

时间:2016-02-04 09:11:24

标签: php cakephp cakephp-2.0

我是cakephp的初学者,请帮帮我。当我想要验证在形式cakephp中选择的输入类型时,我已经卡住了,数据是详细的,那里有很多行,第一行。

<select id="AirWayBillDetail0ItemId" name="data[AirWayBillDetail][0][item_id]">
<option value="">-- Select an Item --</option>
<option value="9">Handphone</option>
<option value="10">Accecoris</option>
<option value="11">Alat Tulis Kantor</option>
<option value="12">Voucher Fisik</option>
</select>

我想要这个选项,只需要一次使用。

实施例: 添加第一行,我选择手机, 所以,第二行,不能使用该选项。有没有办法解决我的麻烦?

enter image description here

我可以在模型或视图或控制器中进行验证吗?使用javascript或jquery?

2 个答案:

答案 0 :(得分:1)

您可以使用jQuery实现此功能。 请参考这个小提琴http://jsfiddle.net/sqy1n6n3/1/

$('select').on('change', function() {

    $('select').find('option').prop('disabled', false);

    $('select').each(function() {
       $('select').not(this).find('option[value="' + this.value + '"]').prop('disabled', true); 
    });

});

答案 1 :(得分:1)

您想在模型或控制器层中检查此项。永远不要依赖JavaScript进行验证,因为这可能会导致应用程序出现漏洞(JavaScript很容易被禁用)。您应该始终在服务器端进行验证,如果您想要一些额外的内联验证,可以使用客户端验证对此进行补充。

您要添加一项检查,表明您提交的数据中没有重复的item_id。因此,您可以在控制器中执行以下操作: -

$itemIds = Hash::extract($this->request->data, 'AirWayBillDetail.{n}.item_id');
if (count($itemIds) !== count(array_unique($itemIds))) {
    // Invalid item_ids
} 

然后,您需要处理您希望显示错误消息的方式,并确保它不会继续保存。如果您想在模型中执行此操作,则需要在保存之前使用beforeSave()回调查看$this->data,如果已识别重复,则需要返回false