2013-05-08 97 views
0

我想檢查用戶名是否已被佔用,這裏是我的腳本,它輸出「undefined」。任何人都可以幫助我嗎? :)檢查數據庫中是否存在用戶名jQuery

這是在我的jQuery - $(「#registerusername」)。val()是輸入的值。

$.post('checkregister.php',{username: $("#registerusername").val()}, function(data){ 
    window.alert(data.exists); 
    if(data.exists){ 
     window.alert("Name already found"); 
    }else{ 
     window.alert("Name NOT found"); 
    } 
}, 'JSON'); 

這是我checkregister.php

header('content-type: text/json'); 
if(!isset($_POST['username'])) 
exit; 
$db = new PDO('mysql:host=localhost;dbname=testdatabase','root','pw000'); 
$query = $db->prepare("SELECT * FROM users WHERE username = '" . $_POST['username'] . "'"); 
$query->execute(); 
echo json_encode(array('exists' => $query->rowCount() > 0)); 
+2

只是想你應該知道,這是容易受到SQL注入。 – 2013-05-08 18:22:47

+0

[請看這裏](http://php.net/manual/en/pdo.prepare.php)瞭解如何正確使用預準備語句以避免SQL注入攻擊。 – 2013-05-08 18:34:43

回答

2

首先,你可能想通過 '消毒' 的輸入,以加強你對SQL注入的PHP。

Next爲什麼從php返回JSON?只要返回true或false就簡單多了。

$db = new PDO('mysql:host=localhost;dbname=testdatabase','root','pw000'); 
$query = $db->prepare("SELECT * FROM users WHERE username = '" . $_POST['username'] . "'"); 
$query->execute(); 
if($query->rowCount() > 0){ 
    echo 'true'; 
} 
else{ 
    echo 'false'; 
} 

然後,在JavaScript:

$.post('checkregister.php',{username: $("#registerusername").val()}, function(data){ 
window.alert(data); 
if(data == 'true'){ 
    window.alert("Name already found"); 
}else{ 
    window.alert("Name NOT found"); 
} 
}); 

編輯--- 你也只是返回從PHP,而不是一個字符串,一個布爾變量,但無論是將工作

+1

比消毒更好的是使用準備好的語句。 – 2013-05-08 18:33:48

+0

非常感謝,現在正在工作,我學到了新的東西:) – 2013-05-08 18:35:52

+0

@Cory非常真實,但mysql_real_escape_string的一個簡單的實現將會創造奇蹟http://stackoverflow.com/questions/129677/whats-the-best-方法換消毒用戶輸入與 - PHP – DMortensen 2013-05-08 18:46:01

0

簡單的例子。 。

Jquery

var username = $.trim($('#username').val()); 

if(username != '') { 
$.ajax({ 
url : 'localhost/phpScript.php', 
data : {username : username}, 
dataType : 'JSON', 
type : 'POST', 
cache : false, 

success : function(result) { 
if(result == '1') { alert('Username Found.'); } 
else if(result == '0') { alert('Username Not Found!'); } 
}, 

error : function(err) { 
console.log(err); 
} 
}); 
} 

PHP/MySQL的(請確保您逃避用戶的輸入值,給它的MySQL之前)

if(isset($_POST['username'])) {  
$username = $_POST['username']; 
$sql = "SELECT username FROM users WHERE username = '".$username."' LIMIT 1"; 
$query = mysql_query($sql); 
if(mysql_num_rows($query) == '1') { 
echo '1'; 
} else { 
echo '0'; 
} 
} 
相關問題