2013-07-16 17 views
0

我是數據庫新手。我的問題是我想用他/她的安全代碼更新用戶密碼。這裏的安全代碼將由用戶在註冊時輸入(任何地點/城市/朋友/叔叔的名字等)。我已經創建了表名details如何使用用戶唯一的安全代碼更新數據庫中的密碼

FNAME 
LNAME 
PASS 
BDAY 
EMAIL 
CODES(//users security code) 

我有一個PHP文件,檢查了這一點,但是,有些事情腳麻Secured.php:

<? $CODES = $_POST['CoDes']; 
$PASS = $_POST['pass']; 

mysql_connect('localhost','user','pass'); 
mysql_selectdb('userdb') or die(mysql_error()); 

$query = mysql_query(sprintf("UPDATE `details` SET PASS = '$PASS' WHERE CODES = '$CODES'")); 
mysql_real_escape_string($CODES) or die(mysql_error()); while($row = mysql_fetch_assoc($query)) 
{$rows[1] = $row;} 
if(empty($rows[1][CODES])) 
{ header("Location: http://localhost/Error.html"); } 
else{ 
echo "Welcome,"; 
echo " your password has changed successfully to $PASS"; 
} 
?> 
<b>You can login</b><a href="http://localhost/login.html><em> here.</em></a><br> 
<img src="http://localhost/images/logo.gif"> 

本頁面並沒有給我任何PHP錯誤,而是去/錯誤。 html即使用戶的安全代碼存在於代碼中012ES任何幫助都會非常感謝。

+2

您正在使用[an **過時的**數據庫API](http://stackoverflow.com/q/12859942/19068)並應使用[現代替換](http://php.net/manual/) EN/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻擊](http://bobby-tables.com/)**,現代的API會使[防禦]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin

+2

除了SQL注入:永遠不要保存密碼而不散列它,永遠不會打印出密碼進行確認。另外,發佈代碼時永遠不要使用真實的URL,特別是與安全相關的東西。 – Mario

+0

是啊,你是100%正確的關於真正的URL和安全風險,但我是學習者,一定會刪除郵政編碼和使用很安全option.Will肯定照顧下一個到來。謝謝馬里奧。 –

回答

2

UPDATE/INSERT/DELETE不給結果集,所以你不能使用mysql_fetch_assoc檢索結果。

SELECT查詢只給出結果集。

你有這樣

if($query) { 
    // query executed successfully 
} else { 
    // query not executed successfully 
} 

OR

if(mysql_affected_rows() > 0) { 
    // query executed successfully 
} else { 
    // query not executed successfully 
} 
+3

非常感謝您的第二個代碼正確地完成了我的工作。並且還從您那裏獲得更多關於結果集和我的代碼中出現錯誤的知識。再次感謝 –

0
$pass = some_type_of_security($_POST['pass']); 

SELECT ... FROM ... WHERE codes=:codes AND user=:user 

檢查的行數等於1,則

UPDATE table SET pass=:pass WHERE user=:user 

我建議使用PDO數據庫操作

相關問題