2012-03-18 82 views
8

所以基本上,我想添加一個功能到我的註冊表格,我將檢查該用戶名是否已經存在於數據庫中。檢查用戶名是否存在於數據庫與AJAX

我對AJAX的幾個問題 -

1)我想創建一個AJAX請求on_change功能,所以這樣的事情 -

$('#username').change(function() { 
    $.ajax({ 
    url: "validation.php" 
    }); 
}); 

所以,據我瞭解,我必須在validation.php文件裏面的所有驗證都是正確的?是否有任何特殊的驗證需要或可以只是簡單的驗證與SQL語句 - SELECT * FROM 'users' WHERE 'username' = '. $_POST['username'];

2)所以據我瞭解,我必須通過$ .ajax通過POST值也是正確的?如果是,我將如何通過validation.php文件訪問它們?

3)當我在validation.php文件中得到結果後,如何將它們傳回(true或false - 存在或不存在)?我需要將它們傳回,然後執行if檢查,如果它爲真 - 顯示用戶名已存在的錯誤,否則不顯示任何內容?

希望你明白我即將創造的東西。我知道互聯網上有很多教程,但我不喜歡通過教程創建一些東西,因爲如果我自己創建它,下次將更容易理解;)!

編輯:另外,我用CodeIgniter框架創建我的網站,所以我怎樣才能將ajax中的url屬性傳遞給CodeIgniter模塊?

+0

您是否閱讀過$ .ajax方法的完整用法 – 2012-03-18 21:37:17

+0

是的,我已經閱讀過,但我不知道上面描述的幾個部分。 – 2012-03-18 21:38:42

+0

您可以使用$ .ajax的數據屬性傳遞信息,並以normat post的形式獲取該信息或獲取在php頁面中的讀取print true false.this info可以回讀usind done回調方法$ .ajax – 2012-03-18 21:44:39

回答

10

在繼續之前,SELECT * FROM 'users' WHERE 'username' = '. $_POST['username'];只是要求一個SQL注入。我建議你使用PHP數據對象 - http://php.net/manual/en/book.pdo.php

所以據我瞭解,我必須通過$ .ajax傳遞POST值,對嗎?如果是,我將如何通過validation.php文件訪問它們?

因爲這是一個簡單的請求,我建議你使用JQuery的方法$.post()。這裏有一個基於你想要做的事情的例子。

$.post('validation.php',{username: $('#username').val()}, function(data){ 
    if(data.exists){ 
     //tell user that the username already exists 
    }else{ 
     //username doesn't exist, do what you need to do 
    } 
}, 'JSON'); 

jQuery的post方法需要4個參數$.post(url, data, callback, datatype)。在上面的示例中,我們將張貼$('#username').val()validation.php的用戶名,並預期會有JSON響應。當請求完成時,將執行回調函數,data是請求的響應。因爲我們指定該響應爲JSON,所以我們可以像訪問javascript中的本機對象那樣訪問它。現在讓我們移至validation.php

就像我上面說的,我建議你使用PDO作爲你的數據庫驅動。所以在這個例子中,我會告訴你它的一個基本用法。現在

//set the headers to be a json string 
header('content-type: text/json'); 

//no need to continue if there is no value in the POST username 
if(!isset($_POST['username'])) 
    exit; 

//initialize our PDO class. You will need to replace your database credentials respectively 
$db = new PDO('mysql:host=DATABASE_HOST;dbname=DATABASE_NAME','DATABASE_USERNAME','DATABASE_PASSWORD',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

//prepare our query. 
$query = $db->prepare('SELECT * FROM users WHERE username = :name'); 
//let PDO bind the username into the query, and prevent any SQL injection attempts. 
$query->bindParam(':name', $_POST['username']); 
//execute the query 
$query->execute(); 

//return the json object containing the result of if the username exists or not. The $.post in our jquery will access it. 
echo json_encode(array('exists' => $query->rowCount() > 0)); 

來回顧一下,我們的jQuery腳本將張貼到validation.php它從數據庫中選擇一個用戶名。它將返回一個JSON對象,該對象的密鑰爲exists,它是一個布爾值,指示用戶名是否已作爲數據庫中的一行存在。當通過jQuery完成請求時,您可以根據查詢結果進行所需的操作。我希望這是一個徹底的解釋,並引導你到你希望達到的目標。

-2
  1. if (mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$_POST['username']."'")) < 1) { 
        true; 
    } else { 
        false; 
    } 
    
  2. 您可以通過GET或POST方法傳遞。在validation.php你只需要編寫$somevar=$_POST['somevar'];

  3. 正如我剛纔所說,你不能郵寄傳遞變量或get方法 - 做這個任務,你必須我們 GET。

我希望我是有幫助的;)

+0

你好,好吧!要嘗試做一些事情。順便說一下,你有什麼CodeIgniter的知識,我怎麼會傳遞一個Ajax請求到模塊? – 2012-03-18 21:42:07

+1

使用MYSQL_REAL_ESCAPE_STRING或使用準備好的語句來防止SQL注入 – fabspro 2013-02-16 10:54:46

0

這裏是我做了我的網站之一:validation.php我算件的數量與用戶名,然後這裏是jQuery腳本:

var username = $('#username').val(); 
$('#username').change(function() { 
    $.ajax({ 
     url: "validation.php", 
     type: 'POST', 
     data: 'username=' + username, 
     success: function(result){ 
       if(result > 0){ 
        // do something if username already exist 
       } 
       else{ 
        // do something if username doesn't exist 
       } 
       } 
     }); 
}); 
+0

成功回調被折舊以備將來使用 – 2012-03-18 21:45:44

+0

好吧!謝謝,所以我會嘗試做點什麼;)!也許你對CodeIgniter有所瞭解,並且你知道,我將如何將URL傳遞給模塊? – 2012-03-18 21:46:22

+0

@ Amritpal Singh:我不知道,對不起。我應該用什麼來代替這個? – romainberger 2012-03-18 21:47:26

4

隨着在互聯網上閱讀教程,你可以學到很多東西。我建議您按照以下頁面上的說明進行操作: http://blog.webwizo.com/2011/05/04/simple-login-with-php-and-jquery-ajax/

您通過發送到指定的php文件發送用戶名,該文件搜索您提供的用戶名。

請在輸入字符串中使用mysql_real_escape_string函數,這樣黑客就無法在您的網站上使用sql注入攻擊。它的工作原理是這樣的:

$query = "SELECT * FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."'"; 
if (mysql_num_rows(mysql_query($query)) > 1) 
{ 
    print "inuse"; 
} 

然後你可以在你的ajax jquery函數中檢查響應值。如果網站返回值「inuse」,則顯示用戶名已被使用的錯誤消息。如果不是,則用戶名可用。

但正如我已經說過了,請檢查教程和最重要的事情: 使用mysql_real_escape_string防止SQL注入攻擊

相關問題