2017-08-16 1 views
0

J'essaye d'implémenter la validation de forme dans CodeIgniter. S'il vous plaît dites-moi quelle est mon erreur. Mon problème est qu'il redirige toujours vers la page d'erreur, et même si j'ai rempli tous les détails sous forme html, les validations ne fonctionnent pas, les détails ne sont pas entrés dans la base de données. Voir la page CodeValidation de formulaire Codeigniter ne fonctionne pas

<!DOCTYPE html> 
<html> 
<head> 
    <title>REGISTRATION</title> 
</head> 
<body> 
<form method="POST" action="<?php echo base_url();?>Test/studentinsert" enctype="multipart/form-data"> 
<label>Name</label> 
<input type="text" name="name" id="name"><br> 
<label>Age</label> 
<input type="number" name="age" id="age"><br> 
<label>Address</label> 
<textarea name="address" id="address"></textarea><br> 
<label>User Name</label> 
<input type="text" name="username" id="username"><br> 
<label>Password</label> 
<input type="Password" name="Password" id="Password"><br> 
<label>Gender</label> 
<input type="radio" name="gender" value="male">Male 
<input type="radio" name="gender" value="female">Female<br> 
<label>Qqualifiction</label> 
<input type="text" name="quali" id="quali"><br> 
<input type="file" name="certificate" id="certificate"><br> 
<input type="submit" name="submit" id="submit"> 

</form> 
<a href="<?php echo base_url()?>Test/login">LOGIN</a> 
</body> 
</html> 

Contrôleur Page Code du

public function studentinsert() 
    { 
     //$this->load->helper(array('form', 'url')); 

     $this->form_validation->set_rules('name', 'Name', 'required'); 
    $this->form_validation->set_rules('age', 'age', 'required'); 
    $this->form_validation->set_rules('address', 'address', 'required'); 
    $this->form_validation->set_rules('username', 'username', 'required'); 
    $this->form_validation->set_rules('password', 'password', 'required'); 
    $this->form_validation->set_rules('gender', 'gender', 'required'); 
    $this->form_validation->set_rules('quali', 'quali', 'required'); 
    $this->form_validation->set_rules('certificate', 'certificate', 'required'); 
     $config['upload_path']   = './uploads/'; 
     $config['allowed_types']  = '*'; 
     //$config['max_size']    = 100; 
     $this->load->library('upload',$config); 
     //$this->load->initialize($config); 
     $this->upload->do_upload('certificate'); 
     $file="uploads/".$this->upload->data('file_name'); 
     $name=$this->input->post('name'); 
     $userid=mt_rand(100000, 999999); 
     $age=$this->input->post('age'); 
     $address=$this->input->post('address'); 
     $gender=$this->input->post('gender'); 
     $username=$this->input->post('username'); 
     $hashpassword=hash('md5',$this->input->post('Password')); 
     $quali=$this->input->post('quali'); 
     if ($this->form_validation->run() == FALSE) 
       { 
         $this->load->view('registration'); 
       } 
     else{ 
     $data=array('file'=>$file,'userid'=>$userid,'name'=>$name,'age'=>$age,'address'=>$address,'gender'=>$gender,'quali'=>$quali,); 
     $logdata=array('userid'=>$userid,'username'=>$username,'Password'=>$hashpassword); 
     $ok=$this->modeldata->insertdb($data); 
     $ok1=$this->modeldata->insertlogin($logdata); 
     if($ok=="success") 
     { 
      $this->load->view('registration'); 
     } 
} 

    } 

j'avais déjà classe aide chargée (formulaire, URL, la validation du formulaire) dans le contrôleur en fonction de construction et le code est le suivant

function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('modeldata'); 
    // Load url helper 
    $this->load->helper('url'); 
    $this->load->helper('form'); 
    $this->load->library('form_validation'); 

} 
+1

Où sont vos règles de validation de formulaire? Il n'y a pas de magie. La classe de validation de formulaire a besoin de règles à exécuter. –

+0

J'ai ajouté des règles de validation aussi.Mais cela ne fonctionne pas.Les données ne sont pas entrer dans la base de données. –

+0

Est-ce que la valeur de $ data correspond à ce que vous attendez d'elle avant de la transmettre au modèle? Faites print_r ($ data); juste avant $ this-> modeldata-> insertdb ($ data); –

Répondre

1

J'ai modifié le code à ceci

public function studentinsert(){ 

    $this->form_validation->set_rules([ 
     [ 
      'field' => 'name', 
      'label' => 'Name', 
      'rules' => 'required' 
     ],[ 
      'field' => 'age', 
      'label' => 'age', 
      'rules' => 'required' 
     ],[ 
      'field' => 'username', 
      'label' => 'username', 
      'rules' => 'required' 
     ],[ 
      'field' => 'password', 
      'label' => 'password', 
      'rules' => 'required' 
     ],[ 
      'field' => 'quali', 
      'label' => 'quali', 
      'rules' => 'required' 
     ] 
    ]); 
    $this->load->library('upload',[ 
     'upload_path' => './uploads/', 
     'allowed_types'=> '*' 
    ]); 
    $this->upload->do_upload('certificate'); 
    $file="uploads/".$this->upload->data('file_name'); 
    $userid=mt_rand(100000, 999999); 
    $name=$this->input->post('name'); 
    $userid=mt_rand(100000, 999999); 
    $age=$this->input->post('age'); 
    $address=$this->input->post('address'); 
    $gender=$this->input->post('gender'); 
    $username=$this->input->post('username'); 
    $hashpassword=hash('md5',$this->input->post('Password')); 
    $quali=$this->input->post('quali'); 
    if ($this->form_validation->run() == FALSE){ 
     $this->load->view('registration'); 
    }else{ 
     $data=array('file'=>$file,'userid'=>$userid,'name'=>$name,'age'=>$age,'address'=>$address,'gender'=>$gender,'quali'=>$quali,); 
     $logdata=array('userid'=>$userid,'username'=>$username,'Password'=>$hashpassword); 
     $ok=$this->modeldata->insertdb($data); 
     $ok1=$this->modeldata->insertlogin($logdata); 
     if($ok=="success"){ 
      $this->load->view('registration'); 
     } 
    } 

} 

Vous avez une règle de validation définie pour certificate et CodeIgniter supposais il y a un $_POST['certificate'] (qui doesnt existe mais ne $_FILES['certificate']) supprimer la règle $this->form_validation->set_rules('certificate', 'certificate', 'required'); et utiliser isset($_FILES['certificate']) à la place. et puis peut-être rediriger vers la page d'erreur si elle n'est pas trouvée

+0

Son problème est en fait dans le modèle, et donc c'était une sorte de mauvaise question, car il n'a jamais fait assez de débogage pour savoir quel était le vrai problème. –