2012-10-08 68 views
0

我正在用Codeigniter建立一個Ajax登錄& Jquery ...我有一個小問題,返回一個'無效登錄'消息及其竊聽我。Codeigniter Ajax登錄問題

在登錄頁上我有:

$(document).keypress(function (e) { 
    if (e.which == 13) { 
     var login = $("#login").val(); 
     var pass = $("#pass").val(); 

     $('#login-block').removeBlockMessages().blockMessage('Please wait, cheking login...', { 
      type: 'loading' 
     }); 
     $.post("<?php echo base_url(); ?>index.php/login/validate_credentials/", { 
      username: login, 
      password: pass 
     }, function (data) { 
      if (data.error) { 
       $('#login-block').removeBlockMessages().blockMessage(data.message, { 
        type: 'error' 
       }); 
      } else { 
       document.location.href = data.redirect; 
      } 
     }, "json"); 
    } 
}); 

validate()功能簡單地查詢數據庫的用戶名和密碼匹配,如果NUM_ROWS = 1則返回用戶的數據。

所有這些工作當試圖登錄,但是當我輸入一個不存在的用戶名我不得到的「登錄不正確」的錯誤確定...

如果我用一個真實的用戶名和密碼錯誤我確實得到錯誤。

如果用戶名和密碼正確,它就會登錄成功。

我只是不明白爲什麼它不會顯示和錯誤,當用戶名不存在?

編輯

這裏是我的validate()在模型中的功能。

function validate() { 

    // CHECK LOGIN DETAILS 
    $this->db-> select('first_name,last_name,usertype,id,products,mac'); 
    $this->db-> where('username', $this->input->post('username')); 
    $this->db-> where('password', md5($this->input->post('password'))); 
    $query = $this->db->get('membership'); 

    if ($query->num_rows() > 0) { 
     $data = array('usertype' => $row->usertype, 'userid' => $row->id, 'first_name' => $row->first_name, 'last_name' => $row->last_name, 'products' => $row->products, 'mac' = > $row->mac); 
     return $data; 
    } 
} 
+0

如果你的模型不返回任何數據,那麼它的失敗......所以你從你的模型返回什麼,如果沒有匹配的數據/ ???嘗試返回false時行數== 0 –

+0

我試圖在num_rows()== 0時添加一個返回false,但它沒有任何區別。這不可能是問題,因爲它返回false並在用戶名正確時顯示錯誤消息,並且密碼爲false,它返回0行,就像應用程序在用戶名不存在時一樣... –

+0

驗證之後( )?你測試它嗎?你如何處理de控制器的結果?嘗試通過返回false if($ query-> num_rows()> 0){...} else {return false; }'並在你的控制器中測試它:'if($ resultofvalidate === false){..return error ...} else {... return success ...}' – VDP

回答

0
if(data.error){ 
    $('#login-block').html('<p>'+data.message+'</p>); 
} else { 
    document.location.href = data.redirect; 
} 

嘗試。

if($query->num_rows()==1) 
{ 
$data2 = array(
    'error' => false, 
    'redirect' => base_url().'index.php/site/home/' 
    ); 

好的,我明白了嗎?在登錄時,您應始終檢查num_rows = 1,永遠不要超過一個。

+0

對不起,沒有工作。它不是這個問題的觀點...該視圖可以正常工作,因爲當用戶名存在且密碼不正確時,它會顯示完美的錯誤。問題是validate();當用戶名存在於數據庫中時,模型中的函數只會返回false,當用戶名不存在時,它會像導致錯誤或其他情況一樣? –

+0

我添加了我的validate()函數代碼到上面的問題。 –

+0

我依依不捨地記得CI有這個相同的問題,你應該在驗證中返回false,以確保函數得到結果。 –

0

$.getJSON('<?php echo base_url(); ?>index.php/login/validate_credentials/',{username: login, password: pass}, function(data) { 
if(data.error){ 
$('#login-block').removeBlockMessages().blockMessage(data.message, {type: 'error'}); 
} else { 
document.location.href = data.redirect; 
} 
}); 

我需要使用,而不是後期的getJSON固定它。 我不得不更新模型函數來使用get而不是後期變量。 它現在按我的希望工作。

+0

如果您的問題得到解決,您應該接受幫助您解決問題的答案。 –