我正在尝试使用 Codeigniter 的表单验证来检查来自模式窗口的文本输入是否与数据库中已有的内容冗余。我似乎无法深入了解 Codeigniter 的 set_rules 以了解发生了什么。我希望你们中的一个编码动物可以帮助我。
Ajax 将文本发送到控制器中的函数,该函数将其作为 $value 拾取,然后在控制器中我想检查此字符串是否已经在数据库的 table.field 中,如果是(不是)发送 $unique=false ( true) 回到 jQuery。问题是 set_rules 语句总是返回 true,不管数据库中有什么。
这是控制器:
public function change_options()
{
# Receives and sends back user-entered new option and adds it to database
# Get strings from ajax in view
$value = $_POST['new_option'];
$value_class = $_POST['new_option_class'];
//echo $value_class; die;
#Make array to send to model
$value_array = array('Options' => $value);
# Make sure option is unique
$this->load->library('form_validation');
//$this->form_validation->set_rules('Options', 'Option', 'is_unique['.$value_class.'.Options]');
$this->form_validation->set_rules('add-new-submit', 'Option', 'is_unique['.$value_class.'.Options]'); <---- This is always true
if ($this->form_validation->run() == TRUE) // Only add new option if it is unique
{
# Add new option to dropdown in database
$this->load->model('data_model');
$this->data_model->add_option($value_class, $value_array);
$unique = true;
}
else
{
# Send string back to view via ajax
$unique = false;
}
echo json_encode(array($value, $unique));
}
对于 set_rules 的第一个插槽,我已经尝试了所有我能想到的方法:'Options'、'add-new-text'、'add-new-submit',(最后两个都是模态 html 中的名称)$ value_class(这是相关表单元素的 id)。这是完整性的模态:
<!-- add-new field -->
<div class="modal small hide fade" id="add-new" tabindex="-1" role="dialog" aria-labelledby="add-new-fieldLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">√ó</button>
<h3 id="add-new-fieldLabel">Add New Field</h3>
</div>
<div class="modal-body">
<p>Would you like to add a new item?</p>
<input type="text" id="add-new-text" name="add-new-text" placeholder="Type the new option">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-success" id="add-new-submit" name="add-new-submit"/>Add</button>
</div>
</div><!-- /add-new field -->
有人看到发生了什么吗?