php / sql查询返回错误的响应

时间:2013-01-31 02:12:54

标签: php mysql

好吧所以我正在运行一个重置密码脚本,它应该用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>";
}
?> 

3 个答案:

答案 0 :(得分:1)

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

我想你想说点什么

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

if (mysql_query($sql)) {
    // etc.

答案 1 :(得分:1)

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

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

if ($sql) {

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

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

答案 2 :(得分: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)) {

马特