2012-02-28 34 views
2

我已經看過周圍的主板,但沒有完整的答案,我可以找到。我使用PHP和MySQL來創建和管理志願者註冊表單。防止重複的電子郵件地址在PHP註冊形式

我需要確保沒有重複的電子郵件地址(電子郵件鍵是唯一的)

這是我的工作的代碼,但是我需要幫助理解哪裏放功能我m也使用check_input去除斜槓等

結果是使用重複電子郵件的測試條目不會發布到數據庫,但是在流程頁面上它仍然給用戶確認而不是錯誤。

下面的代碼是process.php頁面上,數據庫連接PHP和插入代碼之後:

 <?php 

    function createUser($email) 
    { 
     $sql = "SELECT * FROM vols2012 WHERE email='$email'" ; 

     $result = mysql_query($sql) ; 

     if(mysql_num_rows($result) > 0) 
     { 
    die("There is already a user with that email!") ; 
     }//end if 


    function check_input($data, $problem='') 
    { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     if ($problem && strlen($data) == 0) 
     { 
      show_error($problem); 
     } 
     return $data; 
    } 

    function show_error($myError) 
    { 

    } 

    ?> 
+2

check_input()是毫無意義的,驗證地址,然後根據db連接器使用適當的衛生設施。 – 2012-02-28 02:06:02

+0

check_input是爲了防止MySQL注入 - 有哪些選擇? – AAAndreAAA 2012-02-28 02:07:25

+0

這似乎有點不清楚。我們可以假設$ data是來自表單的輸入文本字段的原始POST嗎?當你說你不知道把「功能」放在哪裏,那是什麼? createUser()函數當前不創建任何東西。當整個設置有點模糊時,很難回答。 – 2012-02-28 02:08:21

回答

0
function createUser($email){ 
    $sql = "SELECT count(email) FROM vols2012 WHERE email='$email'" ; 

    $result = mysql_result(mysql_query($sql),0) ; 

    if($result > 0){ 
    die("There is already a user with that email!") ; 
    }//end if 
} 

這可能對您更好。我需要看到更多的代碼才能進一步幫助你。

+0

我想我的問題是在哪裏將該功能放在我的代碼中。我是新來的,但很快趕上瓦特/一點點的指導:)是否在數據庫連接後或下降後?代碼在這裏http://pastebin.com/bYRvLX94 – AAAndreAAA 2012-02-28 02:19:02

+0

你需要在插入之前做到這一點 – 2012-02-28 02:20:59

+0

http://pastebin.com/w0AiP4ye我仍然得到'好'的確認信息,而不是死信息。 ..但是我們沒有在數據庫中獲得重複條目,所以UNIQUE設置很好。 – AAAndreAAA 2012-02-28 02:28:26

0

,你所要做的就是設置你的數據庫表中的電子郵件地址字段作爲唯一索引的第一件事。

您可以使用以下類型的函數來檢查電子郵件地址是否已經可用。

function isAvailable($email) 
    { 
     $sql = "SELECT email FROM vols2012 WHERE email='$email'" ; 

     $result = mysql_query($sql) ; 

     if(mysql_num_rows($result) > 0) 
     { 
      return true; 
     } 
     return false; 
} 

編輯

而且會根據您在http://pastebin.com/bYRvLX94此驗證把代碼之前需要行數15 $sql工作要做。

+0

它被設置爲獨特的,這就是爲什麼它不接受條目,但是'謝謝你,你的應用程序已經收到'消息仍然生成 - 沒有錯誤.. – AAAndreAAA 2012-02-28 02:08:54

+0

朋友我認爲你的代碼示例並不完整。即使它幾乎有語法錯誤。你能再次檢查它嗎? – 2012-02-28 02:13:16

+0

查看我答案的最後一行。 – 2012-02-28 02:29:28

1

檢查這個代碼,你需要類似的東西:

// Code of your database connection here 

function checkEmail($email) { 
    $email = mysql_real_escape_string($email); 

    $sql = mysql_query("SELECT * FROM vols2012 WHERE email='$email'"); 

    if (mysql_num_rows($sql) == 0) { 
     return true; 
    } 

    return false; 
} 

if (checkEmail($_POST['email'])) { 
    // Continue insert 
} else { 
    // Warning for e-mail already exists 
} 

使用checkEmail正是你需要的,你不要在你的代碼目前使用的驗證。

0

您尚未在代碼中的任何位置調用函數createUser。我認爲這將是有幫助的:

function check_input($data, $problem='') 
    { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     if ($problem && strlen($data) == 0) 
     { 
      show_error($problem); 
     } 
     else 
     { 
     if(createUser($data)) 
     { 
      //insert in database 
     } 
     else 
     { 
      die('Email already exists'); 
     } 
     } 
    } 


function createUser($email) 
    { 
     $sql = "SELECT * FROM vols2012 WHERE email='$email'" ; 

     $result = mysql_query($sql) ; 

     if(mysql_num_rows($result) > 0) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 

    } 
相關問題