【问题标题】:How to Redirect user to some other page if Duplicate Entry Error Occurs?如果出现重复输入错误,如何将用户重定向到其他页面?
【发布时间】:2014-08-27 13:21:40
【问题描述】:

当出现重复输入错误时,我试图将用户重定向到其他页面。我在用 Codeigniter

。我写了以下代码,但它显示错误消息Duplicate entry '1' for key 'semester_id'

请检查代码并指导我。

谢谢

public function insert_sports_sports($student_id, $squash, $football, $cricket, $hockey, $swimming, $semester_id)
{
    $data= array (

            "squash"=> $squash,
            "football"=>$football,
            "cricket"=>$cricket,
            "hockey"=>$hockey,
            "swimming"=>$swimming,
            "studentId"=>$student_id,
            "semester_id" => $semester_id

    );  

    if ($this->db->insert("sports",$data))
    {
        return true;
        }
        else
        {
            return false;
            }
    }

控制器

---
--
--
    if($this->loginmodel->insert_sports_sports($student_id, $squash, $football, $cricket,
                                             $hockey, $swimming, $semester_id))
    {
        redirect('mycontroller/index');
        }
        else
        {
            $this->load->view('success');
            }
    }   

编辑

    if ($this->db->insert("sports",$data))
    {
        return true;
        }
        else
        {
            return false;
            }
    }


catch (Exception $ex) {

        if($ex->message == "Duplicate entry '1' for key 'semester_id'")
        {
            redirect('success.php');    

            }       
}
}

错误信息

A Database Error Occurred

Error Number: 1062

Duplicate entry '1' for key 'semester_id'

INSERT INTO `sports` (`squash`, `football`, `cricket`, `hockey`, `swimming`, `studentId`, `semester_id`) VALUES ('4', '4', '4', '4', '4', '42', '1')

Filename: F:\xampp\htdocs\student_management2\system\database\DB_driver.php

Line Number: 330

【问题讨论】:

  • 这实质上意味着 term_id 是一个唯一键,这意味着数据库中已经有一个条目,其中该列的值为 1。This 页面说明了一切。
  • 是的,但我不想显示此错误消息,我想将用户重定向到其他页面并显示自定义错误消息

标签: php mysql database codeigniter duplicates


【解决方案1】:

删除 try catch 并尝试这个

$orig_debug = $this->db->db_debug;
$this->db->db_debug = FALSE;

if ($this->db->insert("sports",$data))
 {
    $this->db->db_debug = $orig_debug;
    return true;
 }
else
 {
   $this->db->db_debug = $orig_debug;
    return false;
 }

它基本上会为您的插入查询静音。如果出现错误,则不会插入,因此它将返回 false。

【讨论】:

  • 感谢它成功了! :)
【解决方案2】:

如果您只想在错误时重定向

try {
    $data= array (

            "squash"=> $squash,
            "football"=>$football,
            "cricket"=>$cricket,
            "hockey"=>$hockey,
            "swimming"=>$swimming,
            "studentId"=>$student_id,
            "semester_id" => $semester_id

    );  

    if ($this->db->insert("sports",$data))
    {
        return true;
        }
        else
        {
            return false;
            }
    }
}
catch (Exception $ex) {
    if($ex->message == "Duplicate entry '1' for key 'semester_id'")
        redirect('yourpage.php');
}

【讨论】:

  • 感谢您的回复..我仍然收到相同的错误消息..我已经更新了我的问题..请再次检查。
  • 我的错误是我忘记访问异常的消息属性。将 $ex 更改为 $ex->message,如果不起作用,则在 catch 块中回显 $ex->message,而不是更改要比较的消息
  • $ex->getMessage() 或者您可以将 if($ex->message == "Duplicate entry '1' for key 'semester_id'") 更改为 if($ex->getLine( ) == 330) 重定向('页面');虽然它并不完全正确。
【解决方案3】:

您可以通过如下设置学期 ID 的规则来防止它

$this->form_validation->set_rules('semester_id', 'input_name', 'trim|required|is_unique[TABLENAME.COLUMNNAME]');

【讨论】:

  • +1 用于利用 CI 核心虽然答案需要一些调整(它也不是一种形式)但感谢答案。
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多