2015-02-27 10 views
0

Посмотрите на линии # 111 и # 116Если оператор не работает, как ожидалось

<?php 
class Connection_model extends CI_Model { 
    private $validated; 
    private $sender_db; 
    private $sender_host; 
    private $sender_user; 
    private $sender_pw; 
    private $receiver_db; 
    private $receiver_host; 
    private $receiver_user; 
    private $receiver_pw; 
    public $err_sender; 
    public $err_receiver; 


    private function define_database($target) { 
     if (in_array('sender', $target)) { 
      $db['sender'] = array(
        'dsn' => '', 
        'hostname' => $this->sender_host, 
        'username' => $this->sender_user, 
        'password' => $this->sender_pw, 
        'database' => $this->sender_db, 
        'dbdriver' => 'mysqli', 
        'dbprefix' => '', 
        'pconnect' => FALSE, 
        'db_debug' => TRUE, 
        'cache_on' => FALSE, 
        'cachedir' => '', 
        'char_set' => 'utf8', 
        'dbcollat' => 'utf8_general_ci', 
        'swap_pre' => '', 
        'autoinit' => TRUE, 
        'encrypt' => FALSE, 
        'compress' => FALSE, 
        'stricton' => FALSE, 
        'failover' => array(), 
        'save_queries' => TRUE 
      ); 
      return $db['sender']; 
     } 
     elseif (in_array('receiver', $target)) { 
      $db['receiver'] = array(
        'dsn' => '', 
        'hostname' => $this->receiver_host, 
        'username' => $this->receiver_user, 
        'password' => $this->receiver_pw, 
        'database' => $this->receiver_db, 
        'dbdriver' => 'mysqli', 
        'dbprefix' => '', 
        'pconnect' => FALSE, 
        'db_debug' => TRUE, 
        'cache_on' => FALSE, 
        'cachedir' => '', 
        'char_set' => 'utf8', 
        'dbcollat' => 'utf8_general_ci', 
        'swap_pre' => '', 
        'autoinit' => TRUE, 
        'encrypt' => FALSE, 
        'compress' => FALSE, 
        'stricton' => FALSE, 
        'failover' => array(), 
        'save_queries' => TRUE 
      ); 
      return $db['receiver']; 
     } 
    } 


    // Validate the connection(s) 
    private function validate($target) { 
     /* @param: Can be 'sender' (string), 'receiver' (string) or 'sender' and 'receiver' (array) */ 
     // Go through all parameters and define an array    
     if ($target == 'sender' || in_array('sender', $target)) { 
      $sessions = array('connection', 'sender_db', 'sender_host', 'sender_user', 'sender_pw'); 
     } 
     elseif ($target == 'receiver' || in_array('receiver', $target)) { 
      $sessions = array('connection', 'receiver_db', 'receiver_host', 'receiver_user', 'receiver_pw'); 
     } 
     else { 
      echo 'Error: illegal parameter. Please use sender or receiver instead.'; 
     } 

     // Check if all keys from the array are saved in session 
     if (isset($sessions)) : 
      foreach ($sessions as $value) { 
       if (key_exists($value, $this->session->get_userdata())) {     
        $this->validated = true; 
       } 
      } 
     endif;     
    } 


    // Establish one or many connections 
    /* @param: Can be 'sender' (string), 'receiver' (string) or 'sender' and 'receiver' (array) */ 
    public function establish($target) { 
     if ($target == 'receiver' || in_array('receiver', $target)) { $receiver = 1; } 
     elseif ($target == 'sender' || in_array('sender', $target)) { $sender = 1; } 
     if ($sender = 1 || $receiver == 1) {  
      $db_values = array(); 
      $this->validate($target); 
      if ($this->validated) {   
       // Aight, let's go ahead and connect this baby    
       if ($sender == 1) { 
        array_push($db_values, 'sender'); 
        $this->sender_db = $this->session->userdata('sender_db'); 
        $this->sender_host = $this->session->userdata('sender_host'); 
        $this->sender_user = $this->session->userdata('sender_user'); 
        $this->sender_pw = $this->session->userdata('sender_pw');     
        if ($this->load->database($this->define_database($db_values))) { 
         $this->err_sender = 0; 
         return $this->load->database($this->define_database($db_values), TRUE); 
        } 
        else { 
         echo '<br>AHHHHHHHHHHHHHHHHH<br>'; 
         $this->err_sender = 1; 
         $this->session->unset_userdata('connection'); 
        } 
       } 
       elseif ($receiver == 1) { 
        array_push($db_values, 'receiver'); 
        $this->receiver_db = $this->session->userdata('receiver_db'); 
        $this->receiver_host = $this->session->userdata('receiver_host'); 
        $this->receiver_user = $this->session->userdata('receiver_user'); 
        $this->receiver_pw = $this->session->userdata('receiver_pw'); 
        if ($this->load->database($this->define_database($db_values))) {       
         $this->err_receiver = 0; 
         return $this->load->database($this->define_database($db_values), TRUE);      
        } 
        else {      
         $this->err_receiver = 1; 
         $this->session->unset_userdata('connection'); 
        }           
       } 
       else { 
        echo 'Error: illegal parameter. Please use sender or receiver instead.'; 
       } 
       if ($this->err_receiver == 1 || $this->err_sender == 1) {     
        // redirect('home'); 
        exit; 
       } 
      } 
      else { 
       echo 'Oops, there is an error! For some reason the property "validated" is not returning true (Connection_model.php)'; 
       exit; 
      } 
     } 
     else { 
      echo 'Error: illegal parameter. Please use sender or receiver instead.'; 
     } 
    } 

} 

Я всегда получаю echo 'AHHHHHHHHHHHHHHHHH'. Вероятно, это потому, что if ($this->load->database($this->define_database($db_values))) возвращает false. Но почему он возвращает false? Он должен возвращать только false, когда соединение с базой данных не может быть установлено.

+0

Редактировать с помощью линий –

ответ

1

Первая проблема, которую я вижу, это в методе establish(), у вас есть ошибка синтаксиса в вашем случае условно, так как вы уже знаете = назначают какие переменные средства, и == сравнивает две переменные. Измените следующее:

у вас есть:

if ($sender = 1 || $receiver == 1) { 

должно быть:

if ($sender == 1 || $receiver == 1) { 

Вторая проблема, которую я вижу, когда вы проверяете для ключей в сессии. Согласно вашему комментарию, вы выполняете итерацию через массив сеансов, чтобы проверить, сохранены ли ключи ALL, если он установлен, тогда он будет установлен в true, а затем проверяет следующее, но что, если один не установлен, вы не устанавливаете его к ложному. Исправить это так:

if (isset($sessions)): 
    foreach ($sessions as $value) { 
     if (key_exists($value, $this->session->get_userdata())) { 
      $this->validated = true; 
     } else { 
      $this->validated = false; 
      break; 
     } 
    } 
endif; 

Третья проблема, когда вы проверяете, если загружен база данных, ваш, если заявление не проверка на BOOL поэтому всегда дает тот же результат. Для того, чтобы получить логическое значение, вы должны сначала изменить вашу базу данных db_debug к FALSE, а затем попытаться initialiaze БД и проверять результаты, как это:

private function define_database($target) { 
    if (in_array('sender', $target)) { 
     $db['sender'] = array(
      'dsn' => '', 
      'hostname' => $this->sender_host, 
      'username' => $this->sender_user, 
      'password' => $this->sender_pw, 
      'database' => $this->sender_db, 
      'dbdriver' => 'mysqli', 
      'dbprefix' => '', 
      'pconnect' => FALSE, 
      'db_debug' => FALSE, //SET THIS TO FALSE 
      'cache_on' => FALSE, 
      'cachedir' => '', 
      'char_set' => 'utf8', 
      'dbcollat' => 'utf8_general_ci', 
      'swap_pre' => '', 
      'autoinit' => TRUE, 
      'encrypt' => FALSE, 
      'compress' => FALSE, 
      'stricton' => FALSE, 
      'failover' => array(), 
      'save_queries' => TRUE, 
     ); 
     return $db['sender']; 
    } //....your other code 
} 

Сейчас в establish():

$db_obj = $this->load->database($this->define_database($db_values)); 
if ($db_obj->initialize()) { 
    $this->err_sender = 0; 
    return $db_obj; 
} else { 
    echo '<br>AHHHHHHHHHHHHHHHHH<br>'; 
    $this->err_sender = 1; 
    $this->session->unset_userdata('connection'); 
} 
+0

Благодарим за помощь. Я использовал ваш код, но я получаю следующую ошибку: вызовите функцию-член initialize() для не-объекта ... 'var_dump ($ db_obj-> initialize());' возвращает ничего! –

+0

странно .. Вы вообще ничего не слышите? – CodeGodie

+0

в 'applications \ config \ autoload.php', предположив, что у вас уже есть' $ autoload ['libraries'] = array ('database'); 'correct? – CodeGodie

-1

изменение этой линии

if ($sender = 1 || $receiver == 1) { 

этой линии

if ($sender == 1 || $receiver == 1) { 
+0

Хотя это может ответить на вопрос, всегда полезно добавить текст в свой ответ, чтобы объяснить, что вы делаете. Прочитайте [как написать хороший ответ] (http://stackoverflow.com/help/how-to-answer). – jurgemaister

+0

спасибо, попробуем следовать правилам в будущем, указанным здесь http://stackoverflow.com/help/how-to-answer –

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