2012-08-06 75 views
1

我試着兩天後從用戶名檢查一個新用戶可以註冊。 我已閱讀所有我發現的內容,但找不到問題。檢查用戶名與數據庫中存在jQuery和MySQL/PHP

當用戶檢查名稱是免費的,我不會成爲從php/msql的答案。 你能檢查我的代碼嗎?

表代碼:

<form id="form" method="get" action=""> 

<legend>Formular mit Validierung</legend> 
    <tr> 
     <td><label id="geschlecht">Geschlecht:* </label></td> 
     <td><select name="anrede" value=""/> 
     <option> Frau </option> 
     <option> Mann </option> 
     <option> Paar </option> 
     </select> 
     </td> 
    </tr> 
    <tr> 
     <td><label for="vorname">Vorname* </label></td> 
     <td><input type="text" id="vorname" name="vorname" /> 
    </td> 
    </tr> 
    <p> 
     <label for="nachname">Nachname* (mindestens 2 Zeichen)</label> 
     <input type="text" id="nachname" name="nachname" /> 
    </p> 
    <p> 
     <label for="email">E-Mail*</label> 
     <input id="email" name="email" /> 
    </p> 

    <p> 
     <label for="geburtsDatum">Geburtsdatum:*</label> 
     <input type="text" name="geburtsDatum" id="geburtsDatum" value=""/> 
    </p> 
    <p> 
     <label for="username">Benutzername:*</label> 
     <input type="text" name="username" id="benutzername" value=""/> 
    </p>  
    <p> 
     <label for="message">Mitteilung*</label> 
     <textarea id="message" name="message"></textarea> 
    </p 
    ><p> 
     <input class="submit" type="submit" value="Submit"/> 
    </p> 
</fieldset> 

js代碼:

$(document).ready(function() { 
// hier die Methode .validate() 
$("#form").validate({ 
    submitHandler: function() { 
    }, 
    rules: { 
     vorname: { 
     required: true, 
     minlength: 3 
    }, 
     nachname: { 
     required: true, 
     minlength: 3 
    }, 
    email: { 
     required: true, 
     email: true 
    }, 
    geburtsDatum: { 
     required: true, 
     date: true 
    }, 

    username: { 
      required: true, 
      minlength: 3, 
      remote: "check.php" 
     }, 

    }, 
    messages: { 
    username: { 
      required: "Bitte Tragen Sie ihren Benutzername ein", 
      minlength: "Der Benutzername ist zu kurz", 
      remote: "Somenoe have already chosen nick like this." 
     }, 
     dateformat: "Choose your preferred dateformat", 
     terms: " " 
    } 
}); 

var newsletter = $("#newsletter"); 
var isChecked = newsletter.is(":checked"); 
var themen = $("#newsletter_themen"); 
themen[isChecked ? "show" : "hide"](); 
//var themaInputs = themen.find("input") 
// .attr("disabled", !isChecked); 
newsletter.click(function() { 
    themen[this.checked ? "fadeIn" : "fadeOut"](1000); 
    //themaInputs.attr("disabled", !this.checked); 
}); 

和PHP代碼:

$username = trim(strtolower($_REQUEST['value'])); 
$sql =" SELECT login FROM benutzername WHERE login = '".$username."' LIMIT 1"; 
$result = $connector->query($sql); 
$num = mysql_num_rows($result); 
if ($num == 1){ 
    echo "true"; 

我希望你能幫助我。

問候 托馬斯

+1

它不會幫你找到解決方案,但你應該停止使用'mysql_ *'函數。他們正在被棄用。請使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果你不確定使用哪一個,[閱讀這篇文章](http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons)。 – Matt 2012-08-06 20:51:29

+0

[SSCCE](http://robzu.com/sscce-short-self-contained-correct-compilable-example) – RobB 2012-08-06 20:52:25

+0

@Matt是的,你看到'remote:check.php'? – Ohgodwhy 2012-08-06 20:53:59

回答

0

從我所看到的,有兩種可能性:

A)$num = mysql_num_rows($result);沒有設置$num什麼,你認爲它。

B)$num != 1:中

if ($num == 1) { ... } 

而是下面的工作一樣好,因爲你備案,不存在只有一條記錄的存在測試

if ($num > 0) { ... } 
0

這裏的問題是,如果您的代碼與您的開發者完全相同,則$_REQUEST['value']是錯誤的。

它將始終未定義,因爲remote sends the name of the validation element不是一些任意佔位符。

此外,您還需要使用$_REQUEST['username'],稍後在代碼中重新聲明對此對象的驗證。

而且........

你做echo "true".哪項是錯誤的,原因有二。首先,我們需要爲此插件返回json_encode d數組以接受響應。第二,當我們想要true時,使用「true」將返回「\ true \」。這是我們發送的BOOLEAN,不是字符串。

$username = trim(strtolower($_REQUEST['username'])); 
$sql = sprintf("SELECT login FROM benutzername WHERE login = '%s' LIMIT 1", $username); 
$result = $connector->query($sql); 
$num = mysql_num_rows($result); 
if ($num == 1){ 
    $valid = true; 
}else{ 
    $valid = false; 
} 
return json_encode($valid); 

這應該做。

+0

今天我的選票已經不在了,但爲此精神+1。 – Matt 2012-08-06 21:05:42

+0

嗨,謝謝,但我還是懷疑,「Somenoe已經選擇了這樣的暱稱」如果用戶名被採取或不。 – Thomas 2012-08-07 07:11:30

0
$username = trim(strtolower($_REQUEST['value'])); SHOULD BE 
$username = trim(strtolower($_REQUEST['username'])); 

你應該停止使用mysql函數並切換到使用PDO或MySQLi。

+0

但是,這是令人沮喪的,因爲我有新書,這是衡量同意或太陽。有2011年的書!我在這個主題裏面有我。謝謝。 – Thomas 2012-08-07 07:16:35

相關問題