我该怎么做才能让这个工作

时间:2013-07-20 17:54:27

标签: php

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

4 个答案:

答案 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是否符合授权值。