2013-05-31 39 views
-3

更新密碼到MySQL所以,我試圖改變表用戶的密碼,爲此,我使用下面的PHP代碼,但它沒有得到更新。無法使用php

<?php 
session_start(); 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="bloodbank"; // Database name 
$tbl_name="users"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username ,password and newpassword sent from form 
$username=$_POST['username']; 
$password=$_POST['password']; 
$newpassword=$_POST['newpassword']; 
$sql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 

?> 

然後我試圖使用此代碼,雖然我得到「更新成功」,在現實中卻是沒有得到在數據庫中更新,誰能告訴我哪裏錯誤。

<?php 
session_start(); 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="bloodbank"; // Database name 
$tbl_name="users"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username,password and newpassword sent from form 
$username=$_POST['username']; 
$password=$_POST['password']; 
$newpassword=$_POST['newpassword']; 
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

if($count==1) 
{ 
$mysql="UPDATE $tbl_name SET password='$newpassword'"; 
echo "Updated Successfully"; 
} 
else 
{ 
echo "Wrong password or Username"; 
} 
?> 
+2

那麼,那是因爲你沒有執行查詢。 –

+0

你能告訴我怎麼做。 – manju

+0

查詢的執行在哪裏? –

回答

-2

在您的第一個代碼中,您永遠不會執行mysql查詢。第二個代碼只是做一個無用的sql查詢。 嘗試:

<?php 
session_start(); 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="bloodbank"; // Database name 
$tbl_name="users"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username ,password and newpassword sent from form 
$username=mysql_real_escape_string($_POST['username']); 
$password=mysql_real_escape_string($_POST['password']); 
$newpassword=mysql_real_escape_string ($_POST['newpassword']); 
$sql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 
?> 
+0

@manju確保您真正考慮到Patashu發佈的所有內容,如果您打算在公共網站上使用此功能。這真的很重要! – noamik

5

在這段代碼

if($count==1) 
{ 
$mysql="UPDATE $tbl_name SET password='$newpassword'"; 
echo "Updated Successfully"; 
} 

存在以下問題:

1)爲你做什麼你剛剛構建的SQL - 你忘了運行一個查詢使用它。 2)是你不用哈希密碼加密 - 在你的數據庫中以明文存儲密碼是超級糟糕的,第一次任何人以任何方式獲得你的數據庫時,你的每一個用戶的密碼是在互聯網上,現在他們的銀行帳戶和電子郵件處於危險之中。不要以爲它不會發生,只需要一個錯誤或一個你忽略的東西,並且很大一部分人使用一個密碼來處理所有事情,所以當用戶名/密碼數據庫泄露到互聯網上時,犯罪分子喜歡它。閱讀http://www.martinstoeckli.ch/php/php.html#bcrypt

3)是寫入的更新語句會將EVERY SINGLE ROW的密碼設置爲$ newpassword中的值 - 您忘記使用WHERE子句。 4)是這個代碼易受SQL注入的影響,這意味着如果黑客提交SQL代碼而不是密碼,SQL代碼將會運行。一種解決方案是使用預處理語句。見How can I prevent SQL injection in PHP?

+0

謝謝你,我是新來的這個主題,會做你所展示的。 – manju

1

您需要WHERE條件在你UPDATE語句:

mysql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 

而且還執行查詢

$result2=mysql_query($mysql); 

問候。

+0

舊密碼也應該被檢查,因爲否則所有的ppl都可能改變某個用戶的密碼。 –

+0

你是對的Bojane :) – mirkobrankovic

2

變化:

$sql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 

if($count==1) 
{ 
$mysql="UPDATE $tbl_name SET password='$newpassword'"; 
echo "Updated Successfully"; 
} 

要:

$sql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 

if($count==1) 
{ 
$mysql="UPDATE $tbl_name SET password='$newpassword'"; 
$result2=mysql_query($mysql); 
echo "Updated Successfully"; 
} 

它不更新的原因是因爲$sql查詢沒有執行。

+0

非常感謝你 – manju

+0

沒問題。如果這對你有效,不要忘記掩蓋正確的答案。 :) –