2012-06-23 1 views
-2

Ошибка возникает, когда она не должна быть в моем скрипте codeigniter. Я принимаю это как-то просто с моим потоком кода, но я не могу понять это.Ошибка потока в Codeigniter

Вот страница:

http://77.96.119.180/beer/user/activate/ 

Вы можете увидеть ошибку, которая появляется в нижней части, это не должно появиться

«Это имя пользователя не exsist.»

Вот мой код CodeIgniter класс:

public function activate($code = '', $username = '') 
    { 
     $go = 0; 
     $form = ''; 
     // This function lets a user activate their account with the code or link they recieved in an email 
     if($code == '' || $username == '' || isset($_POST[''])){ 

      $this->load->library('form_validation'); 
      $this->load->helper('form'); 

      $this->form_validation->set_rules('code', 'Activation Code', 'trim|required|xss_clean|integer'); 
      $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); 

      if ($this->form_validation->run() == FALSE){ 
       // No code, so display a box for them to enter it manually 
       $form .= validation_errors(); 
       $form .= form_open_multipart('user/activate', array('class' => 'formee')); 

       $form .= form_label('Enter your activation code below and click \'Activate\' to start using your account. If you need a hand please contact live chat.', 'activation_code'); 
       $form .= form_input(array('name' => 'code')); 

       $form .= form_label('And enter your username', 'username'); 
       $form .= form_input(array('name' => 'username')); 

       $data = array(
        'name'  => 'submit', 
        'value'  => 'Activate', 
        'class'  => 'right', 
        'style'  => 'margin-top:10px;', 
       ); 

       $form .= form_submit($data); 
       $form .= form_close(); 
      }else{ 
       $go = 1; 
       // Put POST variables into variables 
       $code = $this->input->post('code'); 
       $username = $this->input->post('username'); 
      } 
     }else{ 
      // Code recieved through the GET or POST variable XSS clean it and activate the account 
      $go = 1; 

      // Put GET variables into variables 
      $code = $this->uri->segment(3); 
      $username = $this->uri->segment(4); 
     } 

     if($go = 1){ 
      // Activate! 

      // Check if user exists 
      $query = $this->db->get_where('users', array('username' => $username, 'confirmation' => $code), 1); 
      if ($query->num_rows() > 0){ 
       // Username exsists, activate the account 
       $data = array(
        'is_validated' => 1 
       ); 

       $this->db->where('username', $username); 
       $this->db->update('users', $data); 

       $form .= '<div class="formee-msg-success">Acount activated, <a href="#">click here</a> to login.</div>'; 

      }else{ 
       // Username doesn't exsist or code doesn't match, find out which 
       $form .= '<div class="formee-msg-error">That username doesn\'t exsist.</div>'; 
      } 
     } 


     $data = array(
      'title' => $this->lang->line('activate_title'), 
      'links' => $this->gen_login->generate_links(), 
      'content' => $form 
     ); 
     $this->parser->parse('beer_template', $data); 
    } 
+0

Если вход пуст, вы устанавливаете '$ go' в' 1'. Из-за этого вы пытаетесь найти, если пользователь существует, чего нет, потому что имя пользователя пуст. Не устанавливайте '$ go' в' 1', если нет ввода. – Zombaya

+0

Это немного не по теме, но я настоятельно рекомендую вам прочитать документацию CI, особенно часть MVC, потому что вы делаете свой код более сложным, чем это должно быть. Возможно, это тоже помогло бы: http://net.tutsplus.com/?s = codeigniter – Robert

+2

Обратите внимание на разницу между 'if ($ go = 1)' и 'if ($ go == 1)'. В первом случае вы присваиваете значение '1' переменной' $ go', что означает, что код внутри оператора if будет выполняться * всегда *. Во втором случае вы проверяете, равен ли '$ go' равен' 1', что вы хотите делать. – Mischa

ответ

0

Для даного если:

if ($this->form_validation->run() == FALSE) 

удалить $ GQ = 1 в операторе еще.

else 
{ 
    // Put POST variables into variables 
    $code = $this->input->post('code'); 
    username = $this->input->post('username'); 
} 

Этот блок кода всегда будет выполняться при form_validation-> Run() = TRUE, и когда код активации или имя пользователя остается пустым. Вы не захотите пытаться активировать активацию без кода активации или имени пользователя.

Кроме того, строка кода ниже ничего не делает. Вы ссылаетесь на ключ [''], который всегда будет возвращать тот же результат.

isset($_POST['']) 

Из документации, которую я прочитал, вам нужно ввести ключ для $ _POST. ех. $ _POST [ 'код']. Вы можете попробовать isset ($ _ POST), но я не уверен на 100%, что это сработает. Вы можете узнать больше об этом здесь: http://us.php.net/isset

Редактировать: Как отмечает Миша в комментариях, вы присваиваете $ go = 1 в инструкции if.

0

Так что, глядя на это некоторое время, это была моя ошибка, но я смущен, никто не поднял ее!

Проблема заключалась в следующем:

if($go = 1){ 

Должно быть

if($go == 1){ 

который решает эту проблему.

НО Я теперь переписываю его в любом случае из-за ваших предложений.

EDIT: Только что заметил, что Миша прокомментировал это!

 Смежные вопросы

  • Нет связанных вопросов^_^