2012-11-14 139 views
0

我是新來jquery,試圖添加一個驗證規則到我的電子郵件輸入。它檢查電子郵件是否在數據庫中。 我的html輸入我試圖添加驗證規則。jquery驗證遠程方法

<input id="email" name="email" type="text" class="easyui-validatebox" validType="email" required="true" > 

MY JS

$("#regform").validate();//block below was nested in validate in OP 
$('input[name="email"]').rules("add", 
{ 
    remote : 
    { 
     url: 'checkMaila.php', 
     async: false, 
     type: "POST", 
     data: 
     { 
      email: function() 
      { 
       return $('input[name="email"]').val() 
      } 
     }  
    } 

}); 

我的PHP

<?php 

/*檢查,如果電子郵件地址已經被註冊*/

//連接使用的mysqli到DB

include 'conn.php'; 

if(isset($_POST['email'])) 
{ 
    //op had this line instead of the line below:$maila= $_POST['email'] 
    $maila = $mysqli->real_escape_string($_POST['email']); 
    //op line changed to one below $result = mysql_query("select * from user where email= '"+$maila+"';"); 
$sql = "SELECT * FROM user WHERE email = '".$maila."'"; 
$result = $mysqli->query($sql); 
if($result->num_rows == 0){ 
    echo "true"; 
} 
else 
{ 
    echo "false"; 
} 

} 
else 
{ 
echo "false"; //invalid post var 
} 

?> 

更多信息: 我的內聯驗證規則正常工作。我的js代碼是在外部js文件中包含其他使用jquery的js函數,它們工作。

+0

是什麼問題搜索? – GBD

+0

你不應該在'.validate()'中嵌入'.rules()'。 – Sparky

+0

我已經嘗試過與out out validate()和其他變體從一個帖子我在這裏閱讀它說它需要初始化驗證。問題是,當我已經在數據庫中的文本框中輸入一個電子郵件應該顯示錯誤信息「請修復此問題」。也有什麼辦法麻煩拍攝js問題我用try try不是很好的幫助。 –

回答

0

以下的答案必須是此更早的OP的修訂:

https://stackoverflow.com/revisions/13380448/2


你不應該有嵌套的.validate().rules()As per documentation,.rules()也必須在之後之後出現.validate()被調用。

http://docs.jquery.com/Plugins/Validation/rules

$(document).ready(function() { 

    $("#regform").validate(); 

    // .validate(); must appear above .rules() 

    $('input[name="email"]').rules("add", { 
     remote : { 
      url: 'checkMaila.php', 
      async: false, 
      type: "POST", 
      data: { 
       email: function() { 
        return $('input[name="email"]').val() 
       } 
      }  
     } 
    }); 

}); 
0

您正在將$maila設置爲布爾型(是否設置了$_POST['email'])。應該是:之前在SQL執行

$maila = $_POST['email']; 

而且在後期的電子郵件數據應該進行驗證,並逃脫了,這是因爲SQL注入。如果我輸入10'; DROP TABLE user /*,則執行的查詢如下所示:SELECT * FROM user WHERE email = '10'; DROP TABLE user /*'並且您的用戶表將從數據庫中刪除。

驗證它使用正則表達式來檢查它是一個電子郵件地址格式。爲了避免字符串使用real_escape_string()http://php.net/manual/en/mysqli.real-escape-string.php)。

你必須是你嘗試使用+加入您的字符串,在PHP中你必須使用.另一個錯誤,所以

$sql = "SELECT * FROM user WHERE email = '"+$maila+"'"; 

應該是:

$sql = "SELECT * FROM user WHERE email = '".$maila."'"; 

MySQL作爲這裏使用: mysql_query已棄用,因此應使用PDOMysqli

在jQuery的還有一個問題,規則不應該被嵌套在驗證,相反,它應該是這樣的:

$("#regform").validate(); 

$('input[name="email"]').rules("add", { 
    ... 
+0

啊我可能已經看過這個我改變它,看看我的PHP是否有問題。 ty指出它。 –

+0

我知道的SQL注入和如何在PHP中反擊它。我想學習jquery,所以我正在做這個小型註冊表單。此代碼不會在實況網站上發佈。 –

0

提示:在您開始使用Ajax確保,你的PHP源工作發現,所以你可以在指定的內容錯誤(PHP | HTML | JS | CSS)更容易。

的第一個大錯誤,我已經看到了你的PHP代碼:

$maila = isset($_POST['email']); 

你必須設置$邁拉爲布爾值true或false,你想要的是

$maila = isset($_POST['email'])?$_POST['email']:''; 

第二個錯誤

$sql = "SELECT * FROM user WHERE email = '"+$maila+"'"; 

這是沒有效的PHP(查看你的錯誤報告)字符串通過一個點連接

$sql = "SELECT * FROM user WHERE email = '".$maila."'"; 

最後但並非最不重要的,採取的SQL注入