【问题标题】:Codeigniter and AJAX MySQL Error HandlingCodeigniter 和 AJAX MySQL 错误处理
【发布时间】:2019-01-29 16:14:03
【问题描述】:

我是(新手)使用 CI3 并创建了一个简单的表单,它将单个值 (age) 插入到 MySQL 数据库 (test) 表中。我在表单中没有任何前端验证,我正在尝试服务器端验证。

age 列在数据库中具有以下属性;

  • 姓名:年龄
  • 数据类型:int
  • 允许非空:否
  • 默认:无默认

每当我在表单输入age(例如'john')中输入非数值时,表单提交成功,但数据库将此值保存为0这是预期的行为吗?

似乎我可以在数据库中输入一个非整数,尽管它被设置为数据类型int

我预计会引发以下错误;

/* SQL 错误 (1054): 'where 子句' 中的未知列 'john' */

每当我尝试手动插入非 int 值(通过 heidisql / phpmyadmin)时,都会出现此错误(如预期)。

那么,如何在我的应用程序中检查此错误并采取相应措施?

我的代码如下;

型号

public function insert_form_data(){
    $data = array(
        'age'  => $this->input->post('age')
    );
    $result = $this->db->insert('test', $data);
    if ($this->db->affected_rows() > 0) {
        return TRUE;
    }
    else {
        return $this->db->error(); 
    }
}

控制器

public function insert_form_data(){
    $data = $this->Form_model->insert_form_data();
    echo json_encode($data);
}

查看

<form name="myform" id="myform">
    <input name="age" type="text">
    <button type="submit" id="submit">Submit</button>
</form>
<p id="message"></p>


$(document).ready(function() {
    $('#submit').on('click', function(event) {
        event.preventDefault();
        $.ajax({
            url: "form/insert_form_data",
            method: "post",
            data: $("#myform").serialize(),
            dataType: 'json',
            success: function(response) {
                if (response == true) {
                    $('#message').text('Form submitted!');
                }
            },
            error: function(response) {}
        });
        return false;
    });
});

【问题讨论】:

  • 在插入之前尝试转储 $data,这样您就可以看到那是什么,如果它是 john,那么可能是特定于 CI 的东西(我已经多年没有使用它了,所以我的知识已经生疏了)
  • 你忘了在&lt;form&gt; 中添加ID 作为&lt;form name="myform" id="myform"&gt; 第二,你的错误与问题无关,在INSERT QUERY 的哪里?对于错误,请检查 application 文件夹中的错误日志
  • INSERT 查询中的 WHERE 子句错误?
  • 使用 CI 验证
  • 谢谢,但这并不能回答我的问题@devpro

标签: php mysql ajax codeigniter error-handling


【解决方案1】:

我不确定你为什么要依赖 sql 错误,而你在 codeigniter 的验证库中拥有你可能需要的一切,以便在插入之前进行检查,如下所示:

public function insert_form_data()
{
    $this->load->library('form_validation');
    $this->form_validation->set_rules('age', 'Age', 'required|integer');
    if ($this->form_validation->run() == FALSE)
    {
        $data['validation'] = validation_errors();
    }
    else
    {
        $data['validation'] = "Success";
    }
    $data["result"] = $this->Form_model->insert_form_data();
    echo json_encode($data);
}

【讨论】:

  • 谢谢@Sherif Salah,但这并不能回答我的问题。即使我已将 int 指定为数据类型,我也可以将非整数提交到我的数据库中。
  • @TheOrdinaryGeek,这是你的查询INSERT INTO `table` (`age`) VALUES ('hello'),如果你在phpMyAdmin 上运行它,它不会给你一个错误,仍然会将它保存为零,所以它不是代码点火器的问题.
  • @TheOrdinaryGeek 你是对的,在数据​​库端没有验证..它默认将它转换为一个 int 就像你指定的那样,在字符串的情况下它总是 0 就是这样..这就是为什么我告诉你忘记它并依赖codeigniter的验证,或者如果它没有你需要的东西,就用你自己的验证,只需将纯数据传递到你的数据库。
  • @TheOrdinaryGeek 我们已经在答案下发表评论:D
  • 如果你留下我可以接受的答案,它可能会帮助其他人:)
猜你喜欢
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 2014-08-12
  • 2014-01-12
  • 1970-01-01
  • 2013-06-26
  • 2019-07-21
  • 1970-01-01
相关资源
最近更新 更多