2011-02-02 55 views
0

任何人想試試爲什麼此電子郵件激活不起作用?基本上,我發送兩個URL查詢變量,將激活密鑰和電子郵件存儲爲響應。我將它們解壓縮爲list()並將它們用作db查詢。所有的db對象在測試時運行良好,但是當我從電子郵件運行腳本時,它會打印出回顯語句:「該帳戶現在處於活動狀態......」但是當我檢查數據庫時,它沒有更新這些東西我告訴它即激活密鑰,狀態和userid。電子郵件激活腳本的問題

下面是一個奇怪的部分:當我在數據庫中只有一個用戶時,代碼就會按照它應該執行的操作。但只要我嘗試添加另一個用戶,它就不會按照指示更新新記錄。所以我的問題是:爲什麼這個代碼只在數據庫中有一個用戶時纔有效,而當有多個用戶時呢?這沒有任何意義。非常感謝這裏的幫助。

include $_SERVER['DOCUMENT_ROOT']. '/video_dating/includes/Database.php'; 
list($queryString,$email) = explode('&', $_SERVER['QUERY_STRING']); 

print_r($email); 
$dbname = new Database(); 
$dbname->Query('select activationkey, id, email from users'); 
$userinfo = $dbname->Getdata(); 
foreach ($userinfo as $users) 
{ 

    if ($queryString == $users['activationkey']) 
    { 
    $dbname->Query("update users set activationkey='', status='activated', userid='1' where email='$email'"); 
    echo "Thank you for registering. Your account is now active. Please login any time."; 

    } 
    else 
     echo "Sorry, your account was not activated."; 
} 

回答

0

是否可以將字段userid定義爲關鍵字?如果是的話,它應該是唯一的,但你總是把它設置爲1次

嘗試從更新去除部分:

, userid='1' 
+0

嘿,非常感謝您的快速回復。實際上,它聽起來可能在語義上具有誤導性,但用戶標識實際上與用戶擁有的帳戶類型相關聯(1爲基本,2爲標準,3爲高級),因此它不會自動增加。激活後,他們會自動獲得「基本賬戶」。我確實有一個id字段auto_increment ...是的,我一定會增加安全措施,但首先我想讓這個東西正常工作。那麼我的更新查詢怎麼樣:我是否還需要在字符串中引用$ email,以便更新正確的記錄? – bill 2011-02-02 17:45:11

+0

起初,我認爲你應該檢查你是否真的從QUERY_STRING中獲得了所需的值。我認爲你應該用'&`而不是`&`爆炸。在HTML中使用`&`來編碼`&`,如果它使用例如對於URIs,但在QUERY_STRING裏面,它會是'&` – 2011-02-02 18:42:45

2

我不知道你的數據庫的結構,但我認爲用戶ID是自動遞增鍵。我猜你的問題是userid='1'這部分代碼,你總是假設用戶的ID是1.

你也可以通過直接查詢激活密鑰來簡化你的代碼。

即。

$dbname->Query('select activationkey, id, email from users WHERE activationkey="'.$queryString.'" and email = "'.$email.'"'); 

此外,你應該確保你正在逃避你的queryString和電子郵件,以防止數據庫注入攻擊。您可以使用mysql_real_escape_string或基於數據庫類的替代方案。