fish_007 发表于 2004-8-6 17:14:29

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

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 selectdatabase!");

//设置查询语句,语句中使用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
您需要进行身份认证!

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


请问各路高手是什么问题!???
谢谢~~~~~

jiangtao9999 发表于 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 语句有问题

fish_007 发表于 2004-8-7 06:11:28

那请问版主:
我的那个Header()是包在一个自定义函数auth()里面的!
要怎样改才能使其能执行??
我是个PHP菜鸟!!
请版主大人,教下我要怎样做好吗?谢谢!
如查Header()不包在auth()里面,可以没有回车和空格,但后面就调用不了呀!
要怎么办才好~~~~?? :oops:

fish_007 发表于 2004-8-7 06:15:32

还有你说SQL语句有错!我找了很久都看不出错在哪里,能不能帮我点出来,好吗?谢谢先!

jiangtao9999 发表于 2004-8-7 09:00:54

那请问版主:
我的那个Header()是包在一个自定义函数auth()里面的!
要怎样改才能使其能执行??
我是个PHP菜鸟!!
请版主大人,教下我要怎样做好吗?谢谢!
如查Header()不包在auth()里面,可以没有回车和空格,但后面就调用不了呀!
要怎么办才好~~~~?? :oops:
这就看你的代码怎么写了,使用 Header() 要保证之前没有执行过 echo,也没有 HTML 语句,而且 <? 也要在文件的头部就出现。

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

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

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

或者使用 HTML 的刷新语句。

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

jiangtao9999 发表于 2004-8-7 09:07:58

还有你说SQL语句有错!我找了很久都看不出错在哪里,能不能帮我点出来,好吗?谢谢先!
你在执行

mysql_query($query);

之前先

echo $query;

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

idej 发表于 2004-9-17 09:08:13

身份认证我觉得用session比较好
页: [1]
查看完整版本: 关于一个PHP的身份认证问题?