2013-04-29 2 views
0

Je travaille actuellement sur un projet où les utilisateurs peuvent enregistrer des extraits de note dans leur propre petite zone utilisateur.Vérification de base de données Codeigniter

Je me demandais comment pourrais-je vérifier si l'identifiant d'un élément existe par exemple si un utilisateur visite http://mysite.com/view/1 et il y a un extrait de note de 1, il affiche toutes les données relatives à l'identification d'un. Maintenant, si l'utilisateur devait changer l'URL pour dire 1000, cet ID n'existe pas et la vue juste des erreurs.

Je veux être en mesure de les rediriger vers une certaine page avec un message d'erreur « extrait n'existe pas », etc.

Heres ce que j'ai jusqu'à présent (j'ai actuellement déjà une déclaration conditionnelle ici à vérifier si l'extrait est privé, alors si elle est à rediriger/publicsnippets)

Controller:

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); 

} 

} 

Modèle:

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'); 
} 


    } 

Vue:

 <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> 

Répondre

1

Vous travaillez est très bien ajouter un chèque comme celui-ci dans votre méthode de vue

Contrôleur

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');    
    } 

} 

si aucune ligne se trouve dans la méthode de get_snippet la $snippet contiendra false ou null et le deuxième bloc de l'état va courir.

+0

Merci beaucoup travaillé comme un charme! – jackthedev

1

Dans votre changement de modèle get_snippet() pour vérifier les lignes:

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; 
    } 
} 

Ensuite, dans votre contrôleur:

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

OU

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