2013-06-20 22 views
-1

我還有另一個問題。但是這次它與用戶確認。用戶註冊後,他們收到一封電子郵件,鏈接爲mydomain.co.uk/confirm.php?username=(username)& id =(id)。一切都有效,但即使當用戶名和用戶名正確時,用戶仍未得到確認。繼承人的腳本:用戶確認腳本不工作,即使它應該PHP MYSQL

<?php 
    $id = $_REQUEST['id']; 
    $username = $_REQUEST['username']; 
    $link = mysql_connect('localhost', 'website', 'mypasswordtroll'); 
    if(!$link) { 
    die('could not connect: ' . mysql_error()); 
    } 
    $db_selected = mysql_select_db('website', $link); 
    if (!$db_selected) { 
    die ('Cant use database : ' . mysql_error()); 
    } 

    $result = mysql_query("SELECT * FROM unconfirmedusers WHERE username = '$username' and id = $id"); 
    if(mysql_num_rows($result)==0){ 
    $continue = false; 
    } 
    while($row = mysql_fetch_array($result)) 
    { 
    $usr = $row['username']; 
    $pass = $row['password']; 
    $email = $row['email']; 
    $day = $row['day']; 
    $month = $row['month']; 
    $year = $row['year']; 
    } 
    if($continue == false){ 
    echo '<div class="alert alert-error"><b>Oh man!</b> No such user or id found!</div>'; 
    echo $result; 
    }else{ 
    $query2 = "DELETE FROM unconfirmedusers WHERE id='$id' and username='$username'"; 
    $query3 = "INSERT INTO users (username, password, email, day, month, year) VALUES ('$usr', '$pass', '$email', $day, $month, $year)"; 
    $result2 = mysql_query($query2); 
    $result3 = mysql_query($query3); 
    echo '<div class="alert alert-success"><b>Great! </b>You can now log in!</div>'; 
    } 
    ?> 

我找不到任何不妥之處,我不知道哪一部分是不正確......任何人都可以發現任何錯誤,這將幫助我?

+6

您需要立即停止使用此代碼。它容易受到SQL注入的影響。 [**不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。 – Kermit

+0

您是否想過在查詢中添加一些檢查項,以便在運行時查看是否有任何錯誤? – andrewsi

+1

當你想正確縮進你的代碼時,你的編輯器會問你更多的錢嗎?如果否,那麼感到有義務這樣做。你會感謝我以後。 –

回答

2

$continue == false將始終爲真,因爲您從未設置過$continue。如果未設置變量$var,則($var == false)將始終返回true。另一方面,($var === false)僅在您明確將$var設置爲false時纔會返回true

您需要將該行更改爲if($continue === false),或者您需要在檢查之前添加$continue = true;以查看是否有任何結果。

也就是說,正如FreshPrinceOfSO所評論的那樣,您需要修改此代碼並對MySQL注入進行一些研究。另外,我應該注意到,mysql函數已被棄用,您應該使用MySQLi來代替。

+0

是的,這工作,非常感謝你! –