这是我的代码我无法获得if语句工作,如果名称不存在则显示“Record found”和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>";
?>
答案 0 :(得分:0)
mysql_query
返回查询是否成功。 Findig零记录是成功的。
您必须检查$row
,或检查结果集的长度。
注意:检查评论,你的代码有很多问题。
答案 1 :(得分:0)
$result
将是一个真正的值 - 即使没有返回任何行 - 除非查询出错。您需要count the number of rows查看是否有任何匹配。
(但请参阅我对该问题的评论,您不应该首先使用该数据库API。)
答案 2 :(得分: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);
?>
现在,我还没有测试过,但它看起来对我来说是对的。让我知道它是否有效!
答案 3 :(得分:0)
我认为上面的评论是有用的建议 - 看看使用prepare命令和绑定变量。除此之外,您正在引用$ result而不是$ row。
在检查$ result后我也会进行提取。使用(!($ result === 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>";
不确定您对第3页的继续href是否符合授权值。