我能做些什么来让它工作


what can I do to get this working

这是我的代码,我无法让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>";
?>

正如其他人所提到的,mysql_num_rows()就是您的答案。这里的一个主要问题是,当您应该使用$row时,您还使用$result作为关联数组。我已经重写了你的代码:

<?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);
?>

现在,我还没有测试它,但它看起来很合适。让我知道它是否有效!

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

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

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

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

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

我认为上面的注释是有用的建议-看看使用prepare命令和绑定变量。除此之外,您引用的是$result而不是$row。

我也会在你对$result进行检查后进行提取。使用(!($result===false))也是一种很好的做法(即测试它不是特定的false)。我也认为这是一个很好的实践使用!strcmp()来准确比较字符串。说了这么多,你可以通过对用户名和密码的匹配进行计数(散列)来简化事情。显然,如果您需要从查询中的users表中选择其他详细信息,那么这是不合适的。这种方法省去了对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>";

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