2017-10-16 1 views
0

C'est ma fonction d'insertion.Il insère bien les données et affiche les données dans l'autre vue. mais il y a un problème. Si j'actualise la page de vue il insère encore. Je veux empêcher l'insertion encore sur la page d'actualisation. plzzzzzzzzzzzzzcomment arrêter d'insérer des données dans la base de données sur actualiser la page en utilisant codeigniter

vue

<html> 
<head></head> 
<body> 
<form method="post" action="insert_controller"> 
<input type="text" placeholder="plate number" name="plate"> 
<input type="text" placeholder="maker" name="maker"> 
<input type="text" placeholder="model" name="model"> 
<input type="text" placeholder="year" name="year"> 
<input type="text" placeholder="color" name="color"> 
<input type="text" placeholder="drive" name="drive"> 
<input type="text" placeholder="phone" name="phone"> 
<input type="text" placeholder="name" name="name"> 
<input type="text" placeholder="city" name="city"> 
<input type="text" placeholder="country" name="country"> 
<input type="submit" name="submit"> 
<a >cancel</a> 
</form> 
</body> 
</html> 

Il est mes données d'insertion de controller.After, le résultat est bon et en page searching_view. mais lorsque j'actualise la page search_view, il insère à nouveau des données. Je souhaite éviter d'insérer à nouveau des données lors de l'actualisation de la page search_view.

contrôleur

class car extends CI_Controller { 
    public function insert_controller() { 
     $data['search']=$this->m->insert_model(); 
     $this->load->view('searching_view',$data); 
    } 
} 

est le modèle .it insère des données et obtenir des données de base de données et envoyer le résultat.

modèle

class add_model extends CI_Model { 
    public function insert_model() 
    { 
    if ($this->input->post('submit')) 
    { 

    date_default_timezone_set('Asia/Karachi'); 
    $date=date('g:i A').' on '.date('F d,Y'); 
    // echo "<pre>"; 
    // die(print_r($date, TRUE)); 
    $plate = $this->input->post('plate'); 
    $phone = $this->input->post('phone'); 
    $this->db->select('*'); 
    $this->db->from('car'); 
    $this->db->where('plate', $plate); 
    $this->db->or_where('phone', $phone); 
    $d = $this->db->get(); 
    if ($this->db->affected_rows()>0) 
    { 
     redirect('http://localhost/Ci/index.php/Car/error_message2'); 
     } 
     else 
    { 
     $arr= array(
       'plate' => $this->input->post('plate'), 
       'maker' => $this->input->post('maker'), 
       'model' => $this->input->post('model'), 
       'year' => $this->input->post('year'), 
       'color' => $this->input->post('color'), 
       'drive' => $this->input->post('drive'), 
       'phone' => $this->input->post('phone'), 
       'name' => $this->input->post('name'), 
       'city' => $this->input->post('city'), 
       'country'=> $this->input->post('country'), 
       'date' => $date 
       ); 
        $this->db->insert('car', $arr); 

        $id= $this->db->insert_id(); 

        // fetching 

        $this->db->select('id,plate,maker,model,year,color,drive,phone,name,city,country'); 
        $this->db->from('car'); 
        $this->db->where('id', $id); 
        $d = $this->db->get(); 
        return $d->result(); 
     } 
    } 


    } 
} 
+0

votre méthode d'insertion et de listage doit être différente. Je veux dire après l'insertion complète, vous devriez utiliser 'redirect' au lieu de charger' searching_view' – jagad89

Répondre

2

bien souvent votre navigateur doit vous avertir avant d'envoyer une autre POST-demande. Mais si vous voulez éviter complètement cette possibilité, vous pouvez faire les choses suivantes:

  1. faire une redirection
  2. (utiliser CSRF-tokens)

La deuxième solution renverra une erreur lors d'une tentative pour renvoyer des données, il ne doit donc pas être utilisé sans redirection car les utilisateurs recevront simplement une erreur lors du rechargement.