php - Codeigniter 和 AJAX MySQL 错误处理
问题描述
我是(新手)使用 CI3 并创建了一个简单的表单,它将单个值 ( age
) 插入 MySQL 数据库 ( test
) 表中。我在表单中没有任何前端验证,我正在尝试服务器端验证。
该age
列在数据库中具有以下属性;
- 姓名年龄
- 数据类型:int
- 允许非空:否
- 默认值:无默认值
每当我在表单输入中输入一个非数字值age
(例如“john”)时,表单都会成功提交,但数据库将此值保存为0
. 这是预期的行为吗?
似乎我可以在数据库中输入一个非整数,尽管它被设置为 datatype 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;
});
});
解决方案
我不确定你为什么要依赖 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);
}
推荐阅读
- android - 这种布局叫什么?
- django - 在哪里托管 wagtail/django
- java - Spring Boot 找不到 EmbeddedKafkaBroker Bean
- regex - 正则表达式按日期过滤我的日志
- javascript - 在 react js 的同一个组件中预览并上传两个单独的图像
- python - 使 matplotlib 图占据整个 Canvas 区域
- c# - 打印时 devexpress GridView RowAutoHeight 不起作用
- c# - 如何使用正则表达式分隔方括号内的字符串和双精度值
- implicit - 自动隐式未解决,即使它应该是封闭条件下的直接函数应用
- javascript - 在剑道图中检查形状的点击事件有哪些不同的方法