免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xfly_t
打印 上一主题 下一主题

一个perl连数据库的小问题[已解决] [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-12-26 11:05 |只看该作者
试了一下,还是不行,有知道的帮帮忙

下面是一个cgi文件如auth.cgi

  1. #!/usr/bin/perl -w

  2. #use strict;
  3. use lib ".";
  4. use Bugzilla;

  5. print "Content-type:text/plain\n\n";

  6. if($ENV{'REQUEST_METHOD'}eq"GET"){
  7.     my $username1;
  8.     my $FORM;
  9.     my $buffer=$ENV{'QUERY_STRING'};
  10.     my @pairs=split(/&/,$buffer);
  11.     my $dbh = Bugzilla->dbh;
  12.     foreach my $pair (@pairs){
  13.         my ($name,$value) = split(/=/,$pair);
  14.         $value =~ tr/+/ /;
  15.         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  16.         $FORM{$name} = $value;  #用变量$FORM{$name}来对应$value的值。
  17.     }
  18.    
  19.     #my $username = "aaaaaa\@gmail.com"; #<- 可以查询出数据
  20.     my $username = $FORM{'username'};   #<- 查询不出数据
  21.    
  22.     print $username;
  23.     my $sth =
  24.         $dbh->prepare('SELECT t1.cryptpassword FROM `profiles` t1 WHERE login_name = ?');
  25.     $sth->execute($username);
  26.     my ($password) = ($sth->fetchrow_array());
  27.     print $password;
  28. }
  29. else {
  30.     exit;
  31. }
复制代码

[ 本帖最后由 xfly_t 于 2006-12-26 11:11 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2006-12-26 17:30 |只看该作者
这里没人用perl做过CGI??

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
13 [报告]
发表于 2006-12-26 17:53 |只看该作者
原帖由 xfly_t 于 2006-12-26 17:30 发表
这里没人用perl做过CGI??

就这么点问题你都自己搞不定?
  1. #my $username = "xxx\@china.com.cn" <- 可以查询出数据
  2. my $username = $FORM('username');   <- 查询不出数据
复制代码

你就没比较(eq)一下 "xxx\@china.com.cn" 和 $FORM('username') 有没有什么不同?
  1. #下面打印是完全一样的
  2. print "xxx\@china.com.cn";
  3. print $FORM('username');
复制代码

眼睛看见的未必真实,
也许下面的这个帖子可能会对你有帮助:
http://bbs.chinaunix.net/viewthread.php?tid=866888
最后再给你特别引用一下我在那个帖子中的一个回复
原帖由 flw 于 2006-12-7 15:25 发表
题外话,
  1.        print "mac: $one\n";
  2.        print "readmac: $readmac\n";
复制代码

这种写法很不专业,一看就是没吃过亏的,我不论是什么语言,一般都是
  1.        print "mac: [$one]\n";
  2.        print "readmac: [$readmac]\n";
复制代码

这样子。

论坛徽章:
0
14 [报告]
发表于 2006-12-27 08:55 |只看该作者
to flw
呵呵,真的就这点小问题实在是搞不定.

  1.     #my $username = "xxx\@china.com.cn" <- 可以查询出数据
  2.    my $username = $FORM('username');   <- 查询不出数据
  3.     if ($username eq "xxx\@china.com.cn") {
  4.         print "[$username]\n";
  5.     }
复制代码

我加了这句话,可以证明就是相同的,但用了$FORM('username')
就是打印不出来,

好像从URL上GET下的数据就是不可以

论坛徽章:
0
15 [报告]
发表于 2006-12-27 09:08 |只看该作者
寒。我不是很明白楼主想说什么,且让我细细看来。。。

论坛徽章:
0
16 [报告]
发表于 2006-12-27 09:15 |只看该作者
告诉我,你是怎么访问那个cgi的? url写来看看


还有 你的代码里面

    #my $username = "aaaaaa\@gmail.com"; #<- 可以查询出数据
    my $username = $FORM{'username'};   #<- 查询不出数据
   
    print $username;


试试改成下面的代码,可以看一下究竟是不是一样的:
    my $username_t = "aaaaaa\@gmail.com"; #<- 可以查询出数据
    my $username = $FORM{'username'};   #<- 查询不出数据
   
    if ( $username_t eq  $username ) {
        print "user name is the same!!\n":
    } else {
        print "user name is not the same!!\n";
    }

论坛徽章:
0
17 [报告]
发表于 2006-12-27 18:26 |只看该作者
URL

  1. http://127.0.0.1/msgauth.cgi?username=aaaaaa@gmail.com
复制代码

还是相同的 我试了不加@gmail.com(SQL也换了查相应的字段)也不行,感觉可能是设置的问题,

  1.     URL:http://127.0.0.1/msgauth.cgi?username=1

  2.     my $username_t = "1"; #<- 可以查询出数据
  3.     my $username = $FORM{'username'};   #<- 查询不出数据
  4.    
  5.     if ($username eq $username_t) {
  6.         print "[$username]\n";
  7.     }
  8.    
  9.     my $sth =
  10.         $dbh->prepare("SELECT cryptpassword FROM `profiles` WHERE userid = ?");
  11.     $sth->execute($username);  #换成username_t 就可以查出来数据了
复制代码


只要从url取下来的数据就是不能在sql语句中用,但打印出来却一一样的 也能eq

[ 本帖最后由 xfly_t 于 2006-12-27 18:30 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
18 [报告]
发表于 2006-12-27 18:30 |只看该作者
原帖由 xfly_t 于 2006-12-27 18:26 发表
URL

  1. http://127.0.0.1/msgauth.cgi?username=aaaaaa@gmail.com
复制代码

还是相同的 我试了不加@gmail.com(SQL也换了查相应的字段)也不行,感觉可能是设置的问题,

只要从url取下来的数据就是不能在sq ...

你扯淡。
两个量 eq,一个能用,一个不能用,除非是在扯淡。
建议你不要迷信,好好查原因。
估计等原因查出来的时候,
要么就是你都不好意思告诉大家,
要么就是告诉了之后被人鄙视致死。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
19 [报告]
发表于 2006-12-27 18:32 |只看该作者
print "[$username]\n";
这一行能出来吗?

论坛徽章:
0
20 [报告]
发表于 2006-12-27 18:35 |只看该作者
to flw
这是真的不知你装了bugzilla没有,如果装了你可以试一下,把这个文件放到bugzilla目录下,然后
URL:http://127.0.0.1/msgauth.cgi?username=1
代码就在附件中

真的我就奇怪了?不样也不会这样问了,也请有bugzilla的朋友试一下,验证一下

[ 本帖最后由 xfly_t 于 2006-12-27 21:39 编辑 ]

msgauth.zip

666 Bytes, 下载次数: 12

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP