免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2006-12-27 18:38 |只看该作者
原帖由 flw 于 2006-12-27 18:32 发表
print "[$username]\n";
这一行能出来吗?

都可以出来,就是从url取值时就只有一行
写死在程序里的就能打印出密码

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

论坛徽章:
0
22 [报告]
发表于 2006-12-27 22:11 |只看该作者
你自己处理的GET方式能正确取到值吗?(指那个username)
print看看能否得到这个值,不行就换CGI.pm吧.

论坛徽章:
0
23 [报告]
发表于 2006-12-28 08:47 |只看该作者
原帖由 兰花仙子 于 2006-12-27 22:11 发表
你自己处理的GET方式能正确取到值吗?(指那个username)
print看看能否得到这个值,不行就换CGI.pm吧.


晕,崩溃了,都eq了就是输出不了密码,

$sth->execute($username_t);换成这样就可以输出密码


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

  2.     my $username = $cgi->param('username'); #<- 查询不出数据
  3.     my $username_t = "1"; #<- 可以查询出数据
  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);
  12.     my ($password) = ($sth->fetchrow_array());
  13.     print $password;
复制代码

[ 本帖最后由 xfly_t 于 2006-12-28 08:49 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
24 [报告]
发表于 2006-12-28 09:44 |只看该作者
唉~
楼主怎么就这么迷信呢?
自以为你发现了逻辑学的 BUG?想得到一套新的逻辑体系?
我现在可以认定:
1,要么你给我们的代码是虚假的;
2,要么你口述的现象是虚假的。

论坛徽章:
0
25 [报告]
发表于 2006-12-28 09:46 |只看该作者
flw兄太有个性了,呵呵

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
26 [报告]
发表于 2006-12-28 09:47 |只看该作者
顺便问一下楼主,你说的“都 eq 了”是什么意思?是 eq 所在的那个 if 分支不幸被执行了?还是成功地跳过了那个分支没有执行 print $username?
如果真的是成功地跳过了,那么你又如何得知?如果不幸被执行了,你又如何得知?

论坛徽章:
0
27 [报告]
发表于 2006-12-28 14:10 |只看该作者
原帖由 flw 于 2006-12-28 09:47 发表
顺便问一下楼主,你说的“都 eq 了”是什么意思?是 eq 所在的那个 if 分支不幸被执行了?还是成功地跳过了那个分支没有执行 print $username?
如果真的是成功地跳过了,那么你又如何得知?如果不幸被执行了,你 ...


to flw
执行了 print "[$username]\n"; 应当是username eq username_t

说实话,我也不相信,但事实就是如果从url取下来的变量,就是取不出数据,我很想知道为什么?

环境
xp
ActivePerl-5.8.8.819-MSWin32-x86-267479.msi
apache_2.0.58-win32-x86-no_ssl.msi
bugzilla-2.20.3.tar.gz
mysql-noinstall-4.1.22-win32(1).zip

[ 本帖最后由 xfly_t 于 2006-12-28 14:13 编辑 ]

msgauth.zip

498 Bytes, 下载次数: 12

论坛徽章:
0
28 [报告]
发表于 2006-12-28 14:38 |只看该作者
楼主原来是在windows下?

可以试试调试一下

装一个ActiveState PDK, 一步一步执行代码,看看问题究竟是在哪里

linux上可以试试

env QUERY_STRING=username=1 REQUEST_METHOD=GET perl -wd msgauth.cgi

调试看看

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
29 [报告]
发表于 2006-12-28 15:11 |只看该作者

  1.     my $sth =
  2.         $dbh->prepare('SELECT t1.cryptpassword FROM `profiles` t1 WHERE login_name = ?');
  3.     $sth->execute($username);
  4.     my ($password) = ($sth->fetchrow_array());
  5.     print $password;
复制代码

通常用place holder我都会用
    my $sth =
        $dbh->prepare(qq{"SELECT t1.cryptpassword FROM `profiles` t1 WHERE login_name = ?"})
       ||die $dbh->errstr;
$sth->execute("$username") || die $dbh->errstr;
自己多加两个 ""..不管是不是String或integer...
因为有发生过.某些情况下..会回报SQL有问题..
请注意看看後面到底有什麽error产生在apache的error_log

[ 本帖最后由 apile 于 2006-12-28 15:19 编辑 ]

论坛徽章:
0
30 [报告]
发表于 2006-12-28 16:21 |只看该作者
谢谢,各位的热心帮助,问题已经解决

to flw
代码是真的,口述也是真的

[ 本帖最后由 xfly_t 于 2006-12-28 16:45 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP