-4

这是我的代码我无法让 if 语句工作,如果名称不存在,它会显示“找到记录”并且 page3.php 说密码不匹配可以有人帮我解决这个问题吗 谢谢

<?php
session_start();
//$_SESSION["authorized"]=0;
$name =  $_POST["name"];
$pass = ($_POST["password"]);

$connect = mysql_connect("localhost","tina","tinapassword") or die("Could not connect");

$selected = mysql_select_db("tinadatabase", $connect) or die("Could not connect to database");

$query = "SELECT * FROM users WHERE Uname='$name'"; 
$result = mysql_query($query, $connect);

$row = mysql_fetch_assoc($result);

if ($result)
{
    //$row ==1;
    print "Record found";

}
else
{
    //$row == 0;
    print "Record not found";   
}
print "<br>";

md5($pass);
if($name == $result["Uname"] && md5('$pass') == $result["Upassword"])
{   
    $_SESSION["authorized"] = 1;    
}
else
{
    $_SESSION["authorized"] = 0;
}
print "<br>";
print"<a href='page3.php'> continue</a>";
?>
4

4 回答 4

0

正如其他人所提到的,mysql_num_rows()这是您的答案。这里的一件主要事情是,$result当您应该使用$row. 我已经重写了你的代码:

<?php

session_start();

$name =  $_POST["name"];
$pass = $_POST["password"];

$conn = mysql_connect("localhost","tina","tinapassword") or die("Could not connect to MySQL server.");

if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}

if (!mysql_select_db("tinadatabase")) {
    echo "Unable to select <strong>tinadatabase</strong>: " . mysql_error();
    exit;
}

$sql = "SELECT * FROM users WHERE Uname='$name'";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query (<strong>$sql<strong>) on DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "Record not found.";
    exit;
} else
    echo "Record found."

$row = mysql_fetch_assoc($result);

print "<br>";

md5($pass);

if($name == $row["Uname"] && md5($pass) == $row["Upassword"]) {
    $_SESSION["authorized"] = 1;
    print "<a href='page3.php'>continue</a>";
} else {
    $_SESSION["authorized"] = 0;
    print "Username or password incorrect.";
}

mysql_free_result($result);

?>

现在,我还没有测试它,但它看起来对我来说是正确的。让我知道它是否有效!

于 2013-07-20T18:27:51.963 回答
0

mysql_query返回查询是否成功。Findig 零记录是成功的。

您必须检查$row,或检查结果集的长度。

注意:查看注释,您的代码有很多问题。

于 2013-07-20T18:12:58.670 回答
0

$result将是一个真值——即使没有返回任何行——除非查询出现错误。您需要计算行数以查看是否有任何匹配项。

(但请参阅我对这个问题的评论,您不应该首先使用该数据库 API)。

于 2013-07-20T18:13:14.930 回答
0

我认为上面的评论是有用的建议——看看使用准备命令和绑定变量。除此之外,您引用的是 $result 而不是 $row。

在您检查 $result 之后,我也会进行提取。使用 (!($result === false)) 也是一种很好的做法(即测试它不是特别为假)。我还认为使用 !strcmp() 准确比较字符串是一种很好的做法。说了这么多,您可以通过计算用户名和密码(散列)的匹配来简化事情。显然,如果您需要从查询中的用户表中选择其他详细信息,这将不适合。这种方法使您不必检查 num_rows 等强调的文本

我不像 Oracle 和 Postgres 那样使用 mysql,所以如果语法稍有错误,请见谅,但是.. 假设您的 UPassowrd 正在使用密码的 md5() 哈希......

$hpass=md5($pass);
$query = "SELECT count(1) FROM users WHERE Uname='$name' and UPassword='$hpass'"; 
$result = mysql_query($query, $connect);

$_SESSION["authorized"] = 0;
if (!($result === false))
{
  $row = mysql_fetch_row($result);

  echo "Query Worked<br>";
  // count(1) result of anything other than 0 is a match - though any more than 1 might be an issue.
  $_SESSION['authorized']=((intval($row[0]) == 0)?0:1);
} else {
    echo "Query Failed<br>";
    exit;
}
echo "<br>";
echo"<a href='page3.php'> continue</a>";

不确定您对 page3 的 continue href 是否是授权值的条件。

于 2013-07-20T18:40:05.823 回答