QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1054|回复: 6

关于一个PHP的身份认证问题?

[复制链接]
发表于 2004-8-6 17:14:29 | 显示全部楼层 |阅读模式
PHP源码:

<?php
function auth()
{
header("WWW-Authenticate: Basic realm=www.fish.com");
header("HTTP/1.1 401 Unauthorized");
echo "<h2>您需要进行身份认证!</h2>";
echo "<br>请重新选择刷新,重新加载!";
exit;

}
//显示欢迎信息
function showWelcome($msg="祝贺您,您已经通过了身份认证!")
{
  echo "<table border='0'>";
  echo "<tr><td align = 'center'><h4>";
  echo "<font color=#ff0000>$msg</font>";
  echo "</h4></td></tr>";
  echo "<table>";
  
}
//检查变量$PHP_AUTH_USER
if(!isset($PHP_AUTH_USER))
{
//身份认证信息发送
auth();

}
else {
  //用户信息设定,则连接数据库进行检查
  mysql_connect("localhost","root","******")
      or die("Unable to connect to database!");
  mysql_select_db("web_db")
     or die("Unable to select  database!");

//设置查询语句,语句中使用PASSWORD函数
$query="select usr_id
              from http_auth
              where uname='$PHP_AUTH_USER'
                      and userpass='PASSWORD('$PHP_AUTH_pw')";
                                 
//数据库查询
$result=mysql_query($query);
$numRows=mysql_num_rows($result);

//判断结果
if($numRows==0){
  // 用户不存在,身份不合法
  //重新发送认证信息
  auth();
  
}
else {
  //用户身份合法,显示欢迎信息
  showWelcome();
}
}
?>

-------------------------------------------------------------------------------------------
浏览器返回的错误信息:


Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/fish/PHP操作MYSQL/php身份认证.php on line 43

Warning: Cannot add header information - headers already sent by (output started at /var/www/html/fish/PHP操作MYSQL/php身份认证.php:43) in /var/www/html/fish/PHP操作MYSQL/php身份认证.php on line 4

Warning: Cannot add header information - headers already sent by (output started at /var/www/html/fish/PHP操作MYSQL/php身份认证.php:43) in /var/www/html/fish/PHP操作MYSQL/php身份认证.php on line 5
您需要进行身份认证!

请重新选择刷新,重新加载!


请问各路高手是什么问题!???
谢谢~~~~~
发表于 2004-8-6 17:24:07 | 显示全部楼层
Warning: Cannot add header information - headers already sent by (output started at /var/www/html/fish/PHP操作MYSQL/php身份认证.php:43) in /var/www/html/fish/PHP操作MYSQL/php身份认证.php on line 4

Warning: Cannot add header information - headers already sent by (output started at /var/www/html/fish/PHP操作MYSQL/php身份认证.php:43) in /var/www/html/fish/PHP操作MYSQL/php身份认证.php on line 5

PHP 在执行 Header() 之前已经有了输出(前面连回车、空格都不许有)
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/fish/PHP操作MYSQL/php身份认证.php on line 43

可能你的 SQL 语句有问题
回复

使用道具 举报

 楼主| 发表于 2004-8-7 06:11:28 | 显示全部楼层
那请问版主:
我的那个Header()是包在一个自定义函数auth()里面的!
要怎样改才能使其能执行??
我是个PHP菜鸟!!
请版主大人,教下我要怎样做好吗?谢谢!
如查Header()不包在auth()里面,可以没有回车和空格,但后面就调用不了呀!
要怎么办才好~~~~??
回复

使用道具 举报

 楼主| 发表于 2004-8-7 06:15:32 | 显示全部楼层
还有你说SQL语句有错!我找了很久都看不出错在哪里,能不能帮我点出来,好吗?谢谢先!
回复

使用道具 举报

发表于 2004-8-7 09:00:54 | 显示全部楼层
[quote:1b4fca0052="fish_007"]那请问版主:
我的那个Header()是包在一个自定义函数auth()里面的!
要怎样改才能使其能执行??
我是个PHP菜鸟!!
请版主大人,教下我要怎样做好吗?谢谢!
如查Header()不包在auth()里面,可以没有回车和空格,但后面就调用不了呀!
要怎么办才好~~~~?? [/quote]
这就看你的代码怎么写了,使用 Header() 要保证之前没有执行过 echo,也没有 HTML 语句,而且 <? 也要在文件的头部就出现。

如果实在找不到哪里有输出,可以输出个 JavaScript:

echo "<script language='javascript'>document.location = '此处放入你要的页面'</script>";

(不知道这个的兼容性怎么样)

或者使用 HTML 的刷新语句。

<meta http-equiv="refresh" content="时间;URL=地址">
回复

使用道具 举报

发表于 2004-8-7 09:07:58 | 显示全部楼层
[quote:799f19975c="fish_007"]还有你说SQL语句有错!我找了很久都看不出错在哪里,能不能帮我点出来,好吗?谢谢先![/quote]
你在执行

mysql_query($query);

之前先

echo $query;

把输出的 SQL 语句粘贴到 MySQL 的命令解释器里执行一下,看看有什么错误输出没有。
(我经常这么干)
回复

使用道具 举报

发表于 2004-9-17 09:08:13 | 显示全部楼层
身份认证我觉得用session比较好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 14:44 , Processed in 0.039998 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表