-3

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

4 回答 4

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) 是更新语句,如所写,会将每行的密码设置为 $newpassword 中的值 - 您忘记使用 WHERE 子句。

4) 是该代码易受 SQL 注入攻击,这意味着如果黑客提交 SQL 代码而不是密码,则 SQL 代码将被运行。一种解决方案是使用准备好的语句。请参阅如何防止 PHP 中的 SQL 注入?

于 2013-05-31T10:16:15.023 回答
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查询没有执行。

于 2013-05-31T10:18:01.983 回答
1

您需要在 UPDATE 语句中使用 WHERE 条件:

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

并且还执行查询

$result2=mysql_query($mysql);

问候。

于 2013-05-31T10:17:43.370 回答
-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);
?>
于 2013-05-31T10:15:40.523 回答