0

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

我想知道如何检查项目的 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>
4

2 回答 2

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
}

或者

$snippet = $this->dashboard_model->get_snippet($snippet_id);
if ($snippet) {
 // etc...
于 2013-04-29T20:18:32.477 回答
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则将包含falseornull 并且第二个条件块将运行。

于 2013-04-29T20:18:39.463 回答