无法使用php将密码更新到mysql

时间:2013-05-31 10:12:29

标签: php mysql

所以,我正在尝试更改表用户的密码,因为我正在使用以下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";
}
?>

4 个答案:

答案 0 :(得分: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)如上所述,update语句会将每个单行密码设置为$ newpassword中的值 - 您忘记使用WHERE子句。

4)这个代码容易受到SQL注入攻击,这意味着如果黑客提交SQL代码而不是密码,则会运行SQL代码。一种解决方案是使用预备语句。见How can I prevent SQL injection in PHP?

答案 1 :(得分: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查询没有执行。

答案 2 :(得分:1)

UPDATE语句中需要WHERE条件:

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

还要执行查询

$result2=mysql_query($mysql);

问候。

答案 3 :(得分:-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);
?>