2012-09-06 30 views
1

我有下面的代碼檢查(網絡報名表)的電子郵件地址是否已在數據庫中存在或不值已經存在於MySQL數據庫和PHP

它的工作原理很好,它顯示了電子郵件已經存在,一旦我加載頁面。但它保持處理的形式,並輸入相同的電子郵件到MySQL數據庫?

如果電子郵件地址已存在,如何停止提交表單?

我下面的代碼:

$email = $_POST["email"]; 

$query = mysql_query("SELECT * FROM users WHERE email='$email'"); 

if(mysql_num_rows($query) != 0) 
{ 
echo "email already exists"; 
} 
+1

請確保您在使用SQL字符串http://en.wikipedia.org/wiki/SQL_injection之前清理您的用戶輸入,或者更好地使用帶PDO的參數化查詢http://php.net/manual/en /book.pdo.php – acqu13sce

+0

我們可以做些什麼來幫助您解決此問題(目前尚未解決...)? – jtheman

回答

0

你可能不希望停止的形式提交因爲如此,而是具有表單提交,運行檢查(如您的代碼那樣),如果有一個匹配,將用戶重定向回表單頁面,並顯示錯誤消息,告訴他們電子郵件地址已存在。

這種方式將提交表單 - 但在電子郵件地址是唯一的情況下才會處理到數據庫中。

從代碼借:

$email = $_POST["email"]; 
$query = mysql_query("SELECT * FROM users WHERE email='$email'"); 
if(mysql_num_rows($query) != 0) 
{ 
    echo "email already exists"; 
    // redirect back to form and populate with 
    // data that has already been entered by the user 
} 
else 
{ 
    // insert form contents into the database. 
} 

關於這一點,你的代碼是相當脆弱的注入式攻擊。處理表單數據時,您應該切換到PDO或mysqli預處理語句。

+0

INSERT INTO代碼存儲在另一個名爲insert.php的頁面中,並且在用戶點擊(提交按鈕)之後,它將他帶到該頁面並且數據將被插入。現在我只有「電子郵件已經存在,整個php頁面或html沒有顯示出來,這個錯誤信息是顯示一次我加載頁面,即使當它的形式它爲空? – RubyBeginner

+0

它的工作,但我不得不這樣做插入內。在POST方法後的PHP頁面需要我的表單來插入數據,因爲所有的代碼都在這裏。我試圖在表單頁面內部執行它,它不工作,因爲它保持指向insert.php,即使它顯示用戶已經存在或電子郵件,並且該錯誤消息即使在用另一個瀏覽器加載頁面後表單域是空的,現在它可以工作,但是我必須在另一個頁面中執行它。回到register.php?謝謝 – RubyBeginner

1

一個好主意是在發佈表單之前運行AJAX檢查,即在客戶表單驗證狀態下。因此,用戶會知道張貼的電子郵件已經添加的形式...

Ajax解決方案將是前:

在窗體頁,具有類似於此的jQuery函數:

添加的jQuery與驗證插件:

<script type="text/javascript" src="/js/jquery.1.7.2.min.js"></script> 
<script type="text/javascript" src="/js/jquery.validate.min.js"></script> 
<script type="text/javascript"> 
jQuery.validator.addMethod("emailunique",function(value){ 
    return eval($.ajax({ 
    url: 'phptocheckunique.php', 
    data: "email="+value, 
    type: 'post', 
    async: false 
    }).responseText); 
}, 'Email address already exists, must be unique!'); 

$(function() { 
    $('#yourform').validate(); 
}); 
</script> 

然後在你的形式類添加到電子郵件輸入字段:

<input type="text" name="email" value="" size="30" class="required email emailunique" /> 

然後爲了檢查數據庫(使用$ _POST ['email']發佈的郵件地址,創建一個單獨的PHP腳本,類似於上面的函數(BUT SECURE!),如果已經有電子郵件,則返回TRUE。

phptocheckunique.php:

<?php 
$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
$sth = $dbh->prepare("SELECT FROM users WHERE email = ?"); 
$sth->execute(mysql_real_escape_string($_POST['email'])); 
if ($sth->rowCount() > 0): 
    return true; 
else: 
    return false; 
endif; 

但是,如果你還在用你的方法,加在最後,如果常規的ELSE語句,那麼你只會增加人,如果電子郵件是獨一無二的......還有你的代碼是非常不安全的,你應該考慮使用PDO。

+0

爲什麼downvote?什麼是「沒有幫助」關於這個? – jtheman

+0

你能指導我ajax的例子,我可以看看嗎?PDO是什麼意思? – RubyBeginner

+0

我投了你的答案,我didn沒有投票給這個人如果沒有。但我仍然投了反對票。我選擇它作爲最佳答案。希望你沒有生氣。謝謝。 – RubyBeginner

0
if(mysql_num_rows($query) != 0) 
{ 
echo "email already exists"; 
} 
else 
{ 
    mysql_query($ur_query); 
} 

只需在您的數據庫的其他部分插入「INSERT INTO ...」查詢。

0

你需要給這樣,

if(isset($_POST["email"]) 
{ 
$email = $_POST["email"]; 

$query = mysql_query("SELECT * FROM users WHERE email='$email'"); 

if(mysql_num_rows($query) != 0) 
{ 
echo "email already exists"; 
} 
} 

提交表單後,它會執行。

+0

我在進程或insert.php中插入代碼。您的代碼顯示在哪個頁面上?在註冊表單頁面或insert.php頁面中? – RubyBeginner

+0

您需要在註冊頁面中輸入,然後只顯示註冊頁面中顯示的錯誤消息。一旦電子郵件不存在,那麼你必須插入記錄並重定向到其他頁面。 –

相關問題