<?
session_start();
require "connect.inc.php";
if($_GET["action"]=="login"){
$UserName=$_POST["UserName"];      //从表单获取用户名
$Password=md5($_POST["Password"]); //从表单获取密码
$authority=$_POST["authority"];    //从表单获取单选框值
                //若单选项值为admin,即管理员身份
if($authority=="admin"){
                //sql命令
$sql="select * from  admin_login where UserName='{$UserName}' and Password='{$Password}'";
$result=mysql_query($sql); 
                        //尝试输出$result,结果返回Resource id #4,是出错吗?
                        echo $result;
if(mysql_fetch_array($result)>0){
  $row=mysql_fetch_assoc($result);
$_SESSION["UserName"]=$UserName;
$_SESSION["islogin"]=1; 
header("Location:index.php");
}
else{
echo '<font color=red size=14px>用户名或密码错误</font>';
}
?>用以上代码处理登录时总是报错,求大神指点!!急!!

解决方案 »

  1.   

    没有出错。mysql_query()返回的是一个查询结果集资源标识符(可以看作是对一个内存指针)。
    你的代码的问题在于判断结果集是否为空的方法有误,因为如果查询返回了数据,调用mysql_fetch_array()方法后,指针就移动的(每次调用返回当前指针指向的记录,然后指针指向下一条记录)。判断是否为空集的方法是使用mysql_num_rows():
    //if(mysql_fetch_array($result)>0){
    if (mysql_num_rows($result) > 0) {
    ...
      

  2.   

    mysql_query()成功时返回的是资源类型变量,查询失败返回布尔类型的false。echo用来输出一个字符串,而你要输出的变量需要被强制类型转换为字符串后才行,因此得到 Resource id #4mysql_fetch_array($result) 返回的是一个数组或布尔值false,它也不能直接和数字比较,需要先强制类型转换为数值。而你又在之后使用了类似功能的 mysql_fetch_assoc(),错误百出如果是哪个教程上教的,那么你最好尽快放弃这本教程。如果是你自己随意写的,那么先看看官方手册上的基础,关于类型部分,以及mysql系列函数的说明
    http://www.php.net/manual/zh/language.types.intro.php
    http://www.php.net/manual/zh/book.mysql.php
      

  3.   


    根据你的提示,我修改了一下代码: 
     <?
    session_start();
    //require "connect.inc.php";
    $mysqli=new mysqli("localhost","root","111111","uems");
    if(mysqli_connect_errno()){
    printf("失败:%s<br>",mysqli_connect_error());
    exit;
    }
    if($_GET["action"]=="login"){
    $UserName=$_POST["UserName"];      //从表单获取用户名
    $Password=md5($_POST["Password"]); //从表单获取密码
    $authority=$_POST["authority"];    //从表单获取单选框值
    if($authority=="admin"){
    $sql="select * from admin_login where UserName='{$UserName}' and Pwd='{$Password}'";
    $result=$mysqli->query($sql); 
    echo $result->num_rows;
    if($result->num_rows>0){
      $row=mysql_fetch_assoc($result);
    $_SESSION["UserName"]=$UserName;
    $_SESSION["islogin"]=1; 
    header("Location:index.php");
    }
    else{
    echo '<font color=red size=14px>用户名或密码错误</font>';
    }
    }else if($authority=="tch"){ }else{ } }

     ?>
    这次使用mysqli_result类来尝试执行,可echo $result->num_rows;这条就只输出0。导致代码不向下执行,求解。
      

  4.   

    另外,$num_rows作为mysqli_result类的一个成员属性,若这样使用:$result->num_rows>0,num_rows不变颜色,是否正常呢?已经配置过mysqli了,就是在php.ini中把extension=php_mysqli.dll前的分号去掉,还需要做什么吗?
      

  5.   

     $result->num_rows 为 0 ,即说明输入的密码或用户名错误,和代码没关系。若这样使用:$result->num_rows>0,num_rows不变颜色,是否正常呢?
    不变颜色?那是你的文本编辑器的问题。语法上没问题
      

  6.   

    Resource id #4 这个是 资源标识符. 你要使用mysql_fetch_array 取出数据
      

  7.   


    mysqli有没有起作用你得看你的phpinfo.
    而且看你的代码似乎没有提示相关错误那就是起作用咯.