【发布时间】: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 的东西(我已经多年没有使用它了,所以我的知识已经生疏了)
-
你忘了在
<form>中添加ID 作为<form name="myform" id="myform">第二,你的错误与问题无关,在INSERT QUERY 的哪里?对于错误,请检查application文件夹中的错误日志 -
INSERT 查询中的 WHERE 子句错误?
-
使用 CI 验证
-
谢谢,但这并不能回答我的问题@devpro
标签: php mysql ajax codeigniter error-handling