我正在尝试使用CodeIgniter更新mySQL表。
控制器
我将redirect()注释掉以使用print_r()。当它返回数组时,它返回正确的更新值。但是,如果我取消注释重定向,那么它会将我重定向到包含该表的页面,并且值不会更新。我还检查phpMyAdmin以确保值不会更新而不仅仅是显示,但它们都没有更新。这让我感到困惑,因为print_r()返回了正确的值。
<?php
class update_ctrl extends CI_Controller {
function __construct(){
parent::__construct();
$this->load->model('update_model');
}
public function updateGame($id){
$this->load->model('update_model');
$data['games'] = $this->update_model->getGame($id);
$this->load->view('update_view', $data);
$this->load->view('footer');
}
public function update(){
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<span class="error">', '</span>');
$this->form_validation->set_rules('name', 'Name', 'trim|required');
$this->form_validation->set_rules('genre', 'Genre', 'trim|required');
$this->form_validation->set_rules('developer', 'Developer', 'trim|required');
$this->form_validation->set_rules('year', 'YearReleased', 'trim|required|numeric');
$this->form_validation->set_rules('price', 'Price', 'trim|required|numeric');
$id = $this->input->post('ID');
$data = array(
'Name' => $this->input->post('name'),
'Genre' => $this->input->post('genre'),
'Developer' => $this->input->post('developer'),
'YearReleased' => $this->input->post('year'),
'Price' => $this->input->post('price')
);
$this->load->model('update_model');
$this->update_model->update($id, $data);
$this->session->set_flashdata('msg', 'Game Updated!');
print_r($data);
//redirect('');
}
}
?>
模型
<?php
class update_model extends CI_Model {
public function getGame($id) {
$this->db->select('*');
$this->db->from('games');
$this->db->where('ID', $id);
$query = $this->db->get();
if ($query->num_rows() > 0){
return $query->result();
} else {
return $query->result();
}
}
public function update($id, $data){
$this->db->where('ID', $id);
$this->db->update('games', $data);
}
}
?>
答案 0 :(得分:0)
我唯一能想到的是你的查询是无声的失败。转到SyntaxError
并将database.php
更改为db_debug
并再次运行所有内容。
我还想补充一点,您似乎做得很好,确保所有字段都经过验证。我还要为TRUE
添加一个验证,以确保你得到它 - 如果用户做了一些时髦的事情,那么他们就不会得到一些奇怪的查询错误,因为没有设置id。
答案 1 :(得分:0)
注释掉你的所有$this->form_validation->set_rules
并重试,我认为数字验证会出错
public function update(){
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
//$this->form_validation->set_error_delimiters('<span class="error">', '</span>');
//$this->form_validation->set_rules('name', 'Name', 'trim|required');
//$this->form_validation->set_rules('genre', 'Genre', 'trim|required');
//$this->form_validation->set_rules('developer', 'Developer', 'trim|required');
//$this->form_validation->set_rules('year', 'YearReleased', 'trim|required|numeric');
//$this->form_validation->set_rules('price', 'Price', 'trim|required|numeric');
$id = $this->input->post('ID');
$data = array(
'Name' => $this->input->post('name'),
'Genre' => $this->input->post('genre'),
'Developer' => $this->input->post('developer'),
'YearReleased' => $this->input->post('year'),
'Price' => $this->input->post('price')
);
$this->load->model('update_model');
$this->update_model->update($id, $data);
$this->session->set_flashdata('msg', 'Game Updated!');
print_r($data);
//redirect('');
}
}