2013-06-24 117 views
-1

我试图为我的MySQL数据库用户提供一个简单的表单,以便他们可以更改其数据库密码。到目前为止,我已经实现了以下文件:changepass.html - 密码更改表单页面和pass.php,执行器php。我不是一个专业的PHP编码器,因此我无法走得更远。我的代码没有验证用户名和/或当前的数据库密码。使用PHP更改MYSQL用户密码

我想添加一个简单的检查数据库中用户名的验证,也是当前密码,所以它应该在任何更改之前验证它们。像“错误:您的用户名不存在”和“错误:您当前的密码无效”

请问谁能帮我解决这个问题?

我知道我的代码很危险,所以你的安全建议值得赞赏。

非常感谢。

pass.html:

<form method="POST" action="pas.php"> 
<table> 
<tr> 
<td>Enter username:</td> 
<td><input type="text" size="10" name="username"></td> 
</tr> 
<tr> 
<td>Enter your password:</td> 
<td><input type="password" size="10" name="password"></td> 
</tr> 
</table> 
<p><input type="submit" value="Update Password"> 
</form> 

pas.php:

<?php 

session_start(); 

//Database Information 

$dbhost = "localhost"; 
$dbname = "mysql"; 
$dbuser = "root"; 
$dbpass = "rootpasswd"; 

//Connect to database 

$conn = mysql_connect ($dbhost, $dbuser, $dbpass)or die("Could not connect: ".mysql_error()); 
mysql_select_db($dbname, $conn) or die(mysql_error()); 

$username = $_POST['username']; 
$password = $_POST['password']; 

    mysql_query("UPDATE mysql.user SET Password = PASSWORD('$password') WHERE User='$username'"); 
    echo("Thank You. Your Password has been successfully changed."); 
?> 
+2

请勿使用不推荐使用的'mysql_ *'函数。改用PDO或'mysqli_'。你的代码也很容易受到SQL注入的攻击,你不会检查用户是否被允许更改密码。 – Voitcus

+0

使用'SET PASSWORD'来更改密码 – DevZer0

+0

当我解决验证问题时,我会这样做。你会建议你的代码改变了安全性吗? –

回答

0

您只需创建数据库第一验证与用户输入的用户名/密码。 如果它们存在且很好:返回true否则返回false。

如果为true,则使用位置重定向页面上的用户以更改密码。如果是假,显示错误;)

+0

这就是我在这里问的原因。 –

+0

我给你答案。 你需要什么? – marshallino16

+0

如何做到这一切? –

0

您可以使用此: -

$result = mysql_query("UPDATE mysql.user SET Password = PASSWORD('$password') WHERE User='$username'"); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 
0

试试这个,这也可以帮助SQL注入。

$query = sprintf("UPDATE mysql.user SET Password = '%s' WHERE User='%s'",mysql_real_escape_string($password),mysql_real_escape_string($username)); 
$result = mysql_query($query); 
if($result){ 
    echo "change success"; 
} 

注意:mysql_query在php 5.5.0上正式被弃用。所以,你可以使用mysqli_query()或PDO :: query()。 HERE