用php写的一个判断语句,结果为何总是执行if里面。不执行else里面的语句

我用php写了一段代码是从mysql数据库中判断能否获得信息,如果能够获得就跳转到管理用户界面,不能的话,让其重新输入,这是我前台的login.php[root@cent... 我用php写了一段代码是从mysql数据库中判断能否获得信息,如果能够获得就跳转到管理用户界面,不能的话,让其重新输入,这是我前台的login.php
[root@centos htdocs]# cat login.php
<html>
<head>
<title>It is login </title>
</head>

<body>

<form action="control.php" method="post">
<table border>
<tr> <td>username:</td> <td><input type="text" name="username"</td> </tr>
<tr> <td>password:</td> <td><input type="password" name="password"> </td> </tr>
<tr> <td><input type="submit" value="submit"></td> <td><input type="reset" value="reset"></td> </tr>
</table>
</form>

</body>

</html>
而这是我作为判断输入用户信息界面
[root@centos htdocs]# cat control.php
<html>
<head>
<title>
</title>
</head>
<body>

<?php

$username = $_POST["username"];

$password = $_POST["password"];

$conn=mysql_connect("192.168.1.4","root","xugang");

mysql_select_db("learn",$conn);
$sql="select * from users where username='$username' and password='$password'";
echo $sql;
$res=mysql_query($sql,$conn);
if(mysql_num_rows($res)==0){

echo "account or password is not right<a href='login.php'>return back to login.php</a>";
}else{

header("Location:ManageUsers.php");
}

?>
</body>
</html>
可是我发觉结果相当奇怪,无论如何都只是跳转到if语句里面。我将其条件转化一下
[root@centos htdocs]# cat control.php
<html>
<head>
<title>
</title>
</head>
<body>

<?php

$username = $_POST["username"];

$password = $_POST["password"];

echo $username;
echo "---";
echo $password;
echo "---";

$conn=mysql_connect("192.168.1.4","root","xugang");

mysql_select_db("learn",$conn);
$sql="select * from users where username='$username' and password='$password'";
echo $sql;
$res=mysql_query($sql,$conn);
echo "---";
echo $res;
if(mysql_num_rows($res)!==0){
header("Location:ManageUsers.php");

}else{
echo "account or password is not right<a href='login.php'>return back to login.php</a>";

}
结果就一直跳到ManageUser.php这个页面。请问错误在哪里?

?>
</body>
</html>
展开
 我来答
本逸春vL
2013-05-14 · TA获得超过1567个赞
知道小有建树答主
回答量:812
采纳率:0%
帮助的人:653万
展开全部
最大的可能是sql执行出错,mysql_num_rows返回是boolean类型的false。
你可以用 var_dump(mysql_num_rows($res)); 打印看看值和类型。

检查下你的 php.ini 配置,是否配置了display_errors=1 而导致了sql执行失败没有错误信息输出。

参考:http://cn2.php.net/manual/zh/function.mysql-num-rows.php
jiangxibaiyi
2013-05-13 · 跟随风去旅行-伤心的歌
jiangxibaiyi
采纳数:3973 获赞数:14412

向TA提问 私信TA
展开全部
把你的if语句改一下
if(mysql_num_rows($res)==0){
改成
if(!mysql_num_rows($res)){
试试
追问
还是不行啊
追答
$conn=mysql_connect("192.168.1.4","root","xugang");
改成
$conn=mysql_connect("localhost","root","xugang");
试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xujinzi123
2013-05-14 · TA获得超过424个赞
知道小有建树答主
回答量:756
采纳率:68%
帮助的人:407万
展开全部
这个问题其实很容易查啊,第一这个if(mysql_num_rows($res)==0){
echo "account or password is not right<a href='login.php'>return back to login.php</a>";
}
既然一直执行if里面语句说明满足条件 那就把mysql_num_rows 打印出来看看是多少!,如果是0,,那就往上找原因,看你输入是否正确和数据库里面数据是否一致!
还有既然你把结果集取出来了,那么那就用mysql_fetch_array 看看是不是能取到值!
还有你的 SQL 还有取值赋值 写的都不规范,没有经行长度啊判断等等,
以后如果写入数据库,还必须过滤单引号双引号 判断get_magic_quotes_gpc是否开启,未开启的话用 函数addslashes,或者链接数据库用mysql_real_escape_string过滤等等
希望你找一个规范的教程学习 不然学了也没多大用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yeyoulanqq
2013-05-14
知道答主
回答量:7
采纳率:0%
帮助的人:3.6万
展开全部
首先,你想执行的是什么?
mysql_num_rows($res)!==0 这是判断查询的,如果有结果则执行if里面的内容,没有值则执行else里面的内容
执行if当中的内容说明你的查询是成功的,查询到了内容并返回了,如果执行else的话,那说明你没有查到结果,从代码来看,如果你输入的username和password没有错误的话,执行if里面的语句是正确的,没有错误
另外 给出一些检查错误的小方法

$conn=mysql_connect("192.168.1.4","root","xugang");
改为
$conn=mysql_connect("192.168.1.4","root","xugang") or die("error LINK!");

mysql_select_db("learn",$conn);
改为
mysql_select_db("learn",$conn) or die("error SELECT!");

$res=mysql_query($sql,$conn);
在这行下面增加
if($res){}else{die("error SQL");}//如果$res不为假执行后续语句,为假则返回
//根据需求不同自行判断使用echo提示错误信息还是return提示错误信息

看看页面会输出什么东西?error LINK 说明连接数据库失败 error SELECT 说明选择数据库失败
再出现error SQL的话 那就是sql出错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式