0

好的,所以我正在运行一个重置密码脚本,它应该用 sha1 散列版本替换密码,password01如果成功,它应该返回成功消息,否则返回失败消息,但它返回失败消息天气它是否有效总是这样!有任何想法吗?我已插入以下代码:

<?php 
session_start();
$host= $_SESSION["dbhost"]; 
$username= $_SESSION["dbuser"]; 
$password= $_SESSION["dbpass"]; 
$db_name= $_SESSION["dbname"];
$tbl_name="users"; // Table name 

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$userid = $_POST['id'];
$password = 'password01';    
$hashpass = sha1($password);

//$result = mysql_query("SELECT password FROM $tbl_name WHERE id='$userid'");
$sql=mysql_query("UPDATE $tbl_name SET password='$hashpass' where id='$userid'"); 

if (mysql_query($sql)) {
echo "<ul id='breadcrumbs-one'>";
echo "<li><a href=''>Users</a></li>";
echo "<li><a href='' class='current'>Reset</a></li>";
echo "</ul>";
echo "<div class='tn-box tn-box-color-3 mcenterlow'>";
echo "<p>The Opperation was Sucessful!<br><a href='?users'>Add Another?</a></p>";
echo "<div class='tn-progress'></div>";
echo "</div>";
}
else {
echo "<ul id='breadcrumbs-one'>";
echo "<li><a href=''>Users</a></li>";
echo "<li><a href='' class='current'>Reset</a></li>";
echo "</ul>";
echo "<div class='tn-box tn-box-color-1 mcenterlow'>";
echo "<p>The Opperation was Not Sucessful!<br><a href='?users'>Try Again?</a></p>";
echo "<div class='tn-progress'></div>";
echo "</div>";
}
?> 
4

3 回答 3

1

您的代码调用了 mysql_query() 两次,一次使用实际的 SQL 字符串,另一次使用第一次调用的返回结果值!因此,“if”检查的第二次调用总是失败;它不是有效的 SQL。

我想你想说的是

$sql = "UPDATE $tbl_name SET password='$hashpass' where id='$userid'";

if (mysql_query($sql)) {
    // etc.
于 2013-01-31T02:19:42.043 回答
1

除了您问题下方的评论之外,您if失败的原因是您正在使用mysql_query另一个调用的结果mysql_query

为了解决这个问题,您应该将您的条件更改为:

if ($sql) {

(对于UPDATE查询,mysql_query返回true成功和false失败)

你真的应该使用准备好的语句和绑定变量切换到 PDO(或 mysqli),以摆脱你遇到的 sql 注入问题。

于 2013-01-31T02:19:55.663 回答
1

您正在设置$sql等于 的结果mysql_query("UPDATE $tbl_name SET password='$hashpass' where id='$userid'");。在 UPDATE 语句上,mysql_query返回一个布尔值。mysql_quert($sql)你在if声明中被调用。这在逻辑上是不正确的,因为您检查了结果,mysql_query(<bool>);因为 $sql 是查询的结果。

任何一个:

$sql=mysql_query("UPDATE $tbl_name SET password='$hashpass' where id='$userid'"); 

if ($sql) {

或者

$sql = "UPDATE $tbl_name SET password='$hashpass' where id='$userid'"; 

if (mysql_query($sql)) {

马特

于 2013-01-31T02:21:23.700 回答