2012-12-17 64 views
2

我知道我已經問過simillar問題,但現在當我使用jQuery Mobile時,我無法弄清楚它。所以,我有這種形式:jQuery mobile ajax登錄表單身份驗證

<div data-role="page" data-theme="a" id="login_page"> 
     <div data-role="header" data-position="fixed"> 
      <h1>****</h1> 
     </div> 
     <div data-role="content"> 
      <form id="login_form" method="POST" data-ajax="false"> 
      <label for="basic">Username:</label> 
      <input type="text" name="name" id="username" value=""/> 
      <label for="basic">Password:</label> 
      <input type="password" name="password" id="password" value=""/> 
      <input type="submit" value="Login" id="login" name="login"/> 
      </form> 
     </div> 
     <div data-role="footer" data-position="fixed"> 
      <div data-role="navbar"></div> 
     </div> 
</div> 

,我需要提交用戶名和密碼,以PHP腳本,在PHP的答覆和發送「成功」或「失敗」。這裏是php:

<?php 
session_start(); 

$username = $_POST["name"]; 
$password = $_POST["password"]; 

include('mysql_connection.php'); 
mysql_select_db("jzperson_imesUsers", $con); 

$res1 = mysql_query("SELECT * FROM temp_login WHERE username='$username' AND password='$password'"); 
$count=mysql_num_rows($res1); 

if($count==1){ 
    echo "success"; 
}else{ 
    echo "failed"; 
} 
?> 

而要做到這一切我想使用這個腳本:

$(document).ready(function() { 
     $("form").submit(function(){ 
      $.mobile.showPageLoadingMsg(); 

      $.ajax({ 
       url: "http://imes.jzpersonal.com/login_control.php", 
       type: "POST", 
       dataType: "jsonp", 
       jsonp: "jsoncallback", 
       data: $("form#login_form").serialize(), 
       success: function(response){ 
        $.mobile.changePage("http://imes.jzpersonal.com/user_panel.html"); 
       } 
      }); 
      return false; 
     }); 
    }); 

但我不能讓它工作,我知道我必須在有錯誤,我只是無法找到它們,或更好的方式來做到這一點。預先感謝您的任何幫助。

+2

你的PHP腳本免受SQL注入患有... –

+0

AJAX驗證的整個的形式給出了沒有任何與安全性。如果有人直接撥打http://imes.jzpersonal.com/user_panel.html會怎麼樣?你需要認證! –

+0

那麼我怎麼才能不通過我的.html文件.php文件進行身份驗證呢? –

回答

2

您幾乎沒有錯誤。

I. JSONP只允許鍵入:「GET」,但您可以將其完全刪除。

這是JSONP $就調用的工作示例:

$.ajax({url: server_url, 
     data: save_data, 
     dataType: "jsonp", 
     jsonpCallback: 'successCallback', 
     async: true, 
     beforeSend: function() { 
      $.mobile.showPageLoadingMsg(true); 
     }, 
     complete: function() { 
      $.mobile.hidePageLoadingMsg(); 
     }, 
     success: function (result) { 
      alert(result); 
     }, 
     error: function (request,error) { 
      alert(error); 
     }, 
     successCallback:function(){ 

     } 
    }); 

II。現在最主要的是,因爲你使用JSON/JSONP,你不能在PHP中使用echo「SOME_STRING」。首先,你必須使用json_encode()函數來正確地格式化你的結果數據,並將你需要用它在你的jsonpCallback功能:

echo $_GET['callback'] . '(' . "{'some' : 'example'}" . ')'; 

或:

echo $_GET['callback'] . '(' . ###your_serialized_json_output### . ')'; 

III。最後你需要修改你的服務器,以便它可以處理JSONP調用。

在這裏,你會發現更多關於它:

http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/

+0

你顯然知道你在說什麼。如果我需要保留我的文件.html,那麼我不會將php腳本驗證到它們中,我還能如何進行身份驗證?有沒有辦法進行身份驗證,而無需將文件更改爲.php?要將登錄信息存儲在cookie中一段時間​​,並通過JS或jQuery進行身份驗證? –

+0

你仍然需要使用一個PHP來驗證用戶。我的答案的重點是你需要一個正確的PHP回聲輸出,所以客戶端可以收到一個真正的味精。如果您需要更多信息如何實施此解決方案,請留下另一條評論。 – Gajotres

1

儘管在客戶端執行儘可能多的工作通常是一個好主意,但應在服務器端完成身份驗證。您的user_panel腳本應該檢查身份驗證。

其次,您應該通過使用mysql_real_escape_string來保護您的SQL注入請求。您的代碼應該是:

$res1 = mysql_query("SELECT * FROM temp_login 
        WHERE username='".mysql_real_escape_string($_POST['username'])."' 
        AND password='".mysql_real_escape_string($_POST['password'])."'");