2011-08-29 64 views
2

我很可能错过了一些相当明显的东西,但我仍然有点失落。实际的数据库交互似乎是一个难题。我的意思是,该表是在安装时创建的,但实际上发送信息似乎不起作用,因为无论我输入什么,它都会触发验证。如果我关闭现场要求,数据库将无法完全接收信息。PyroCMS/Codeigniter数据库问题

从控制器:

类管理员延伸Admin_Controller {

private $show_validation_rules = array(
    array(
     'field' => 'date', 
     'label' => 'Date', 
     'rules' => 'trim|max_length[100]|required' 
    ), 
    array(
     'field' => 'location', 
     'label' => 'Location', 
     'rules' => 'trim|max_length[300]' 
    ), 
    array(
     'field' => 'support', 
     'label' => 'Support', 
     'rules' => 'trim|required' 
    ) 

); 

public function __construct() 
{ 
    parent::__construct(); 

    $this->load->model('shows_m'); 
    $this->load->library('form_validation'); 
    $this->lang->load('shows'); 
    $this->load->helper('html'); 

    $this->template->set_partial('shortcuts', 'admin/partials/shortcuts'); 
} 

public function index() 
{ 
    $view_data = array(); 
    $view_data['shows'] = $this->shows_m->get_all(); 
    $this->template->build('admin/index', $view_data); 
} 

public function create() 
{ 

    $shows = $this->shows_m->get_all(); 

    $this->form_validation->set_rules($this->show_validation_rules); 

    if ($this->form_validation->run()) 
    { 
     if ($this->shows_m->insert_show($this->input->post())) 
     { 
      $this->session->set_flashdata('success', lang('shows.create_success')); 
      redirect('admin/shows/index'); 
     } else { 
      $this->session->set_flashdata('error', lang('shows.create_error')); 
      redirect('admin/shows/create'); 
     } 
    } 

    foreach($this->show_validation_rules as $rule) 
    { 
     $shows[$rule['field']] = $this->input->post($rule['field']); 
    } 
    $view_data = array(
      'shows' => $shows 
     ); 
    $this->template->build('admin/create', $view_data); 
} 

public function edit($id) 
{ 
    $this->form_validation->set_rules($this->show_validation_rules); 

    $show = $this->shows_m->get($id); 

    if (empty($show)) 
    { 
     $this->session->set_flashdata('error', lang('shows.exists_error')); 
     redirect('admin/shows'); 
    } 

    if ($this->form_validation->run()) 
    { 

     if ($this->shows_m->update_entry($id, $this->input->post()) === TRUE) 
     { 
      if (isset($this->input->post()['delete'])) 
      { 
       $this->session->set_flashdata('success', lang('shows.delete_success')); 
       redirect('admin/shows/'); 
      } 
      else 
      { 
       $this->session->set_flashdata('success', lang('shows.update_success')); 
       redirect('admin/shows/edit/' . $id); 
      } 
     } else { 
      if (isset($this->input->post()['delete'])) 
      { 
       $this->session->set_flashdata('error', lang('shows.delete_error')); 
       redirect('admin/shows/edit/' . $id); 
      } 
      else 
      { 
       $this->session->set_flashdata('error', lang('shows.update_error')); 
       redirect('admin/shows/edit/' . $id); 
      } 
     } 
    } 

    foreach($this->show_validation_rules as $rule) 
    { 
     if ($this->input->post($rule['field'])) 
     { 
      $show[$rule['field']] = $this->input->post($rule['field']); 
     } 
    } 
    $view_data = array(
      'shows' => $show 
     ); 
    $this->template->build('admin/edit', $view_data); 
} 

public function delete($id = NULL) 
{ 
    $id_array = array(); 

    if ($this->input->post()) 
    { 
     $id_array = $this->input->post()['action_to']; 
    } 
    else 
    { 
     if ($id !== NULL) 
     { 
      $id_array[0] = $id; 
     } 
    } 

    if (empty($id_array)) 
    { 
     $this->session->set_flashdata('error', lang('shows.id_error')); 
     redirect('admin/shows'); 
    } 

    foreach ($id_array as $id) 
    { 

     $show = $this->shows_m->get($id); 

     if (!empty($show)) 
     { 

      if ($this->shows_m->delete($id) == FALSE) 
      { 
       $this->session->set_flashdata('error', lang('shows.delete_error')); 
       redirect('admin/shows'); 
      } 
     } 
    } 

    $this->session->set_flashdata('success', lang('shows.delete_success')); 
    redirect('admin/shows'); 
} 

}

从details.php文件

public function install() 
{ 
    $this->dbforge->drop_table('shows'); 
    $shows = " 
     CREATE TABLE ".$this->db->dbprefix('shows')." (
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `date` varchar(100) NOT NULL, 
      `location` varchar(300) NOT NULL, 
      `support` text, 
      PRIMARY KEY (`id`) 
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
    "; 

    if($this->db->query($shows)) 
    { 
     return TRUE; 
    } 
} 

该模块的目的是,简而言之输出节目的日期,位置和一个y通过将模块生成的标签插入网站的相关页面来支持乐队和其他信息。

我倾向于认为它应该很简单,我错过了一些明显的东西,但是谁知道。如果我是,随时可以吼我,我会很感激。

编辑:

代码模型

类Shows_m扩展MY_Model {

public function get_all($limit = NULL) 
{ 
    $this->db->order_by("id", "desc"); 
    if (isset($limit)){ $this->db->limit($limit); } 
    $results = $this->db->get('shows'); 
    $result = $results->result_array(); 
    return $result; 
} 


public function get($id) 
{ 
    $results = $this->db->get_where('shows', array('id' => $id)); 
    $result = $results->row_array(); 
    return $result; 
} 


public function insert_show($input) 
{ 

    $to_insert = array(
     'date' => $input['date'], 
     'location' => $input['location'], 
     'support' => $input['support'] 
    ); 


    if ($this->db->insert('shows',$to_insert)) 
    { 
     return TRUE; 
    } else { 
     return FALSE; 
    } 
} 


public function update_entry($id, $input) 
{ 
    $new_data = array(
     'date' => $input['date'], 
     'location' => $input['location'], 
     'support' => $input['support'] 
    ); 

    if (isset ($input['delete'])) 
    { 
     if($this->delete($id)) 
     { 
      return TRUE; 
     } else { 
      return FALSE; 
     } 
    } else { 

     $this->db->where('id', $id); 
     if ($this->db->update('shows', $new_data)) 
     { 
      return TRUE;  
     } else { 
      return FALSE;  
     } 
    } 
} 


public function delete($id) 
{ 
    if ($this->db->delete('shows', array('id' => $id))) 
    { 
     return TRUE;  
    } else { 
     return FALSE;  
    } 
} 
} 
+0

你能复制/粘贴剩下的代码吗?就像你在CI论坛上一样?也可能有助于查看您遇到问题的网页上生成的HTML。 – stormdrain

+0

编辑帖子将$ _POST更改为$ this-> input-> post()实际上导致了死亡白屏......并且CodeIgniter中的错误报告并未指出可能的问题。 另外,为管理员控制器和相关模型添加了完整的代码。 – Cory

回答

0

这可能是你insert模型

if ($this->db->insert('shows',$to_insert)) 
    { 
     return TRUE; 
    } else { 
     return FALSE; 
    } 

尝试,而不是:

$this->db->insert('shows',$to_insert); 
$query_result = $this->db->insert_id(); 
if($query_result){ 
    return TRUE; 
}else{ 
    return FALSE; 
} 

我不认为insert回报什么。

无论如何,这听起来不像验证是问题。查询没有进入数据库。如果上述不是问题,请尝试POST数据;确保它到达模型(确保HTML与预期的一样 - 输入名称等)。