【问题标题】:Codeigniter - Form validation not worksCodeigniter - 表单验证不起作用
【发布时间】:2017-04-06 09:21:50
【问题描述】:

我已经尝试谷歌搜索但没有解决,我下面的代码是在插入之前检查重复,当“tagnumber”字段已经存在时将转到特定页面而不插入到表中,它可以工作但问题是虽然没有插入到表,但它不会转到我想要的特定页面。

以下是我关于条件语句的问题:
如果表单验证中的数据存在,将执行不插入数据。
如果数据不存在表单验证将执行插入数据但转到错误页面(与存在数据页面相同的页面)。

我的控制器:

function tambahSubmit()
{

$tagnumber = $this->input->post("tagnumber");
$this->myigniter_model->addData($tagnumber); 
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');

// field name, error message, validation rules
$this->form_validation->set_rules('tagnumber', 'tagnumber', 'trim|required|is_unique[inventorytag.tagnumber]');
$this->form_validation->set_rules('date', 'date', 'trim|required');
$this->form_validation->set_rules('employee', 'employee', 'trim|required');
$this->form_validation->set_rules('semnumber', 'semnumber', 'trim|required');
$this->form_validation->set_rules('quantity', 'quantity', 'required');
$this->form_validation->set_rules('area', 'area', 'trim|required');



if($this->form_validation->run() == false)
{

    $this->load->view('YearEndStock/tampilan_input_gagal');
}
else
{

    $this->myigniter_model->addData($tagnumber);

    $this->load->view('YearEndStock/tampilan_input_sukses');


}
}

我的模型:

function addData($tagnumber)
{
  // Added $this->db->escape() and limit 1 for Performance
$query = $this->db->query("SELECT tagnumber FROM inventorytag WHERE tagnumber = ".$this->db->escape($tagnumber)." limit 1");

$data = array(      
'tagnumber' => $this->input->post('tagnumber'), 
'date'=> date('Y-m-d H:i:s'),
'employee' => $this->input->post('employee'),
'semnumber' => $this->input->post('semnumber'), 
'quantity' => $this->input->post('quantity'), 
'area' => $this->input->post('area') 
);

return $query->num_rows() == 0 ? $this->db->insert('inventorytag', $data) : false;
}

【问题讨论】:

  • 你想做什么,你已经在else部分添加了代码 $this->myigniter_model->addData($tagnumber);表单验证前 $this->myigniter_model->addData($tagnumber);
  • 如果插入已经完成,那么 is_unique[inventorytag.tagnumber] 验证失败并且没有得到成功页面
  • 我在 else 部分添加了代码 $this->myigniter_model->addData($tagnumber);在表单验证之前 $this->myigniter_model->addData($tagnumber) 因为tagnumber首先检查是否已经存在,如果存在则不会插入
  • 我已经删除了 is_unique[inventorytag.tagnumber] 但它仍然不会进入成功页面,我已经在表上为 tagnumber(非唯一)和主键设置了字段结构
  • 你的 is_unique 回调在哪里?或条件

标签: forms codeigniter validation


【解决方案1】:

那么你只需要分开你的真实陈述。删除您的 is_unique 验证。

if($this->form_validation->run() == false)
{
    SHOW ERRORS
    $this->load->view('YearEndStock/tampilan_input_gagal');
}
else
{
    $row = $this->db->get_where('inventorytag', array('tagnumber' => $tagnumber))->row();

    if (empty($row)) {
    //insert
    $this->myigniter_model->addData($tagnumber);
    } else {
    //row exists
    }

    $this->load->view('YearEndStock/tampilan_input_sukses');


}

【讨论】:

  • 对不起,还是不会出现成功页面,我的“tagnumber”字段的表结构是主键,不是唯一的,对吗?
  • 与.htaccess 文件有关系吗?因为有些文章是评论,我已经尝试更改 .htaccess 但它仍然无法正常工作
猜你喜欢
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 2020-09-28
  • 2012-02-26
  • 1970-01-01
  • 2015-01-20
相关资源
最近更新 更多