Codeigniter数据库检查

时间:2013-04-29 20:07:20

标签: codeigniter

我目前正在开发一个项目,用户可以在自己的小用户区域中保存注释片段。

我想知道如果用户访问,我将如何检查项目的ID是否存在 http://mysite.com/view/1并且有一个注释片段1,它将显示与一个id相关的所有数据。现在,如果用户要将url更改为1000,则该id不存在且视图只是错误。

我希望能够将它们重定向回某个页面,并显示错误消息“代码段不存在”等。

继续我到目前为止(我目前已经有一个条件语句来检查代码片段是否为私有,然后是否重定向到/ publicsnippets)

控制器:

class Publicsnippets extends CI_Controller {

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

    if (!$this->tank_auth->is_logged_in()) {
        redirect('/login/');
    } 

    $this->load->model('dashboard_model');

    $this->data['user_id']  = $this->tank_auth->get_user_id();
    $this->data['username']= $this->tank_auth->get_username();  
}

public function index()
{
    $this->data['public_snippets']  = $this->dashboard_model->public_snippets();
    $this->load->view('dashboard/public_snippets', $this->data);
}

public function view($snippet_id)
{
    $snippet = $this->dashboard_model->get_snippet($snippet_id);

    if ($snippet['state'] === 'private')
    {
        $this->session->set_flashdata('message', "<b style=\"color:red;\">You are not allowed to view this snippet!</b>");
        redirect('/publicsnippets');

    } else {

        $this->data['snippet'] = $snippet;
    }

    $this->load->view('dashboard/view_public_snippet', $this->data);

}

}

型号:

    class Dashboard_model extends CI_Model {

public function public_snippets()
{
    $this->db->select('id, title, description, tags, author, date_submitted');
    $query = $this->db->get_where('snippets', array('state' => 'public'));
    return $query->result_array();
}

public function private_snippets()
{
    $this->db->select('id, title, description, tags, author, date_submitted');
    $query = $this->db->get_where('snippets', array('user_id' => $this->tank_auth->get_user_id()));
    return $query->result_array();
}

public function add_snippet($data)
{
    $this->db->insert('snippets', $data);
    $id = $this->db->insert_id();
    return (isset($id)) ? $id : FALSE;
}

public function get_snippet($snippet_id) {

    $query = $this->db->get_where('snippets', array('id' => $snippet_id));  
    return $query->row_array();
}

public function update_snippet($snippet_id, $data)
{
    $this->db->where('id', $snippet_id);
    $this->db->update('snippets', $data);
}

public function delete_snippet($snippet_id)
{
    $this->db->where('id', $snippet_id);
    $this->db->delete('snippets');
}


    }

查看:

        <h3>Description</h3>
        <p><?php echo $snippet['description']; ?></p>

        <h3>Tags</h3>
        <p><?php echo $snippet['tags']; ?></p>

        <h3>Date Submitted</h3>
        <p><?php echo $snippet['date_submitted']; ?></p>

        <h3>Snippet</h3></pre>
        <pre class="prettyprint"><?php echo $snippet['code_snippet']; ?></pre>

2 个答案:

答案 0 :(得分:1)

在模型中更改get_snippet()以检查行:

public function get_snippet($snippet_id) {
    $query = $this->db->get_where('snippets', array('id' => $snippet_id)); 

    if ($query->num_rows() > 0) {
        return $query->row_array();
    } else {
        return false;
    }
}

然后在你的控制器中:

if ($snippet = $this->dashboard_model->get_snippet($snippet_id)) {
    // code if snippet exists
} else {
    // code if snippet doesn't exist
}

OR

$snippet = $this->dashboard_model->get_snippet($snippet_id);
if ($snippet) {
 // etc...

答案 1 :(得分:1)

你的工作很好,只需在你的视图方法中添加这样的支票

控制器

public function view($snippet_id)
{
    $snippet = $this->dashboard_model->get_snippet($snippet_id);

    if($snippet){
        if ($snippet['state'] === 'private')
        {
            $this->session->set_flashdata('message', "<b style=\"color:red;\">You are not allowed to view this snippet!</b>");
            redirect('/publicsnippets');

        } else {

            $this->data['snippet'] = $snippet;
        }

        $this->load->view('dashboard/view_public_snippet', $this->data);
    }else{
            $this->session->set_flashdata('message', "<b style=\"color:red;\">snippet does not exist</b>");
            redirect('/publicsnippets');            
    }

}

如果在get_snippet方法中找不到行,则$snippet将包含falsenull 并且第二个条件块将运行。