用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> 展开
[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> 展开
4个回答
展开全部
最大的可能是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
你可以用 var_dump(mysql_num_rows($res)); 打印看看值和类型。
检查下你的 php.ini 配置,是否配置了display_errors=1 而导致了sql执行失败没有错误信息输出。
参考:http://cn2.php.net/manual/zh/function.mysql-num-rows.php
展开全部
把你的if语句改一下
if(mysql_num_rows($res)==0){
改成
if(!mysql_num_rows($res)){
试试
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");
试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题其实很容易查啊,第一这个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过滤等等
希望你找一个规范的教程学习 不然学了也没多大用
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过滤等等
希望你找一个规范的教程学习 不然学了也没多大用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,你想执行的是什么?
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出错了
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出错了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询