免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1473 | 回复: 1
打印 上一主题 下一主题

写入问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-27 09:36 |只看该作者 |倒序浏览
一个在线调查程序,为什么我的vote.dat里面写入的内容不正确。
出现
4294967295
4294967295
源程序如下:
界面:


PHP源码:
--------------------------------------------------------------------------------

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">;
  2. <HTML>;
  3. <HEAD>;
  4. <TITLE>; 问卷调查 </TITLE>;
  5. </HEAD>;

  6. <BODY>;
  7. <h1>;问卷调查</h1>;
  8. 请你选择最喜欢的网站:
  9. <FORM METHOD = "POST" ACTION="servey.cgi">;
  10. <INPUT TYPE="radio" NAME="isp" VALUE="A" Checked>;首都在线 263.net<br>;
  11. <INPUT TYPE="radio" NAME="isp" VALUE="B">;广州网易 163.net<br>;
  12. <INPUT TYPE="radio" NAME="isp" VALUE="C">;搜狐 SOHU.net<br>;
  13. <INPUT TYPE="radio" NAME="isp" VALUE="D">;是聆听 21cn.com<br>;
  14. <INPUT TYPE="radio" NAME="isp" VALUE="E">;亿唐 etang.com<br>;
  15. <INPUT TYPE="submit" VALUE="递交">;
  16. <INPUT TYPE="reset" VALUE="取消">;
  17. </FORM>;
  18. 欢迎您在线查询<a href="http://127.0.0.1/perltest/sview.cgi">;问卷调查结果</a>;
  19. </BODY>;
  20. </HTML>;
复制代码

--------------------------------------------------------------------------------




2.servey.cgi

PHP源码:
--------------------------------------------------------------------------------

  1. #!/usr/bin/perl

  2. read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

  3. @pairs=split(/&/, $buffer);
  4. foreach $pair (@pairs) {
  5.     ($name, $value)=split(/=/, $pair);
  6.     $value=~tr/+//;
  7.     $value=~s/%([a-f A-F 0-9][a-f A-F 0-9])/pack("C", hex($1))/eg;
  8.     $FORM{$name} = $value;
  9. }

  10. $filename="vote.dat";
  11. %NAME=("A", "首都在线", "B", "网易", "C", "搜狐", "D", "是聆听", "E", "亿唐", "E", "亿唐");
  12. print "Content-type:text/html\n\n";
  13. print "<HTML>;";
  14. print "<TITLE>;问卷调查</TITLE>;";
  15. print "<BODY>;";
  16. print "<H1>;问卷调查</H1>;";
  17. open(FILE,"<$filename")||die print"不能打开文件,请和管理员联系\n";
  18. for ($i=0; $i<2;$i++) {
  19.     $file[$i] = <FILE>;;
  20.     $file[$i] = ~s/n$//;
  21. }
  22. close(FILE);

  23. @item = split(/:/,$file[0]);
  24. @vote = split(/:/,$file[1]);

  25. for ($i=0; $i<@item+1; $i++) {
  26.     if ($FORM{'isp'} eq $item[$i])
  27.         {
  28.         $vote[$i]++;
  29.     }
  30. }

  31. open(FILE, ">;$filename") || die "Can't open the file";
  32. $item=join(":", @item);
  33. $vote=join(":", @vote);
  34. print FILE "$item\n";
  35. print FILE "$vote\n";
  36. close(FILE);

  37. print "<h2>;您是投票给$NAME{$FORM{'isp'}},谢谢您的支持!</h2>;";
  38. print "查询<a href=\"http://127.0.0.1/perltest/sview.cgi\">;投票结果</a>;";
  39. print "</table>;";
  40. print "</body>;</html>;";
  41. exit;
复制代码

--------------------------------------------------------------------------------



3.查看程序sview.cgi

PHP源码:
--------------------------------------------------------------------------------

  1. #!/usr/bin/perl

  2. $filename="vote.dat";
  3. %NAME=("A", "首都在线", "B", "网易", "C", "搜狐", "D", "是聆听", "E", "亿唐", "E", "亿唐");
  4. print "Content-type:text/html\n\n";
  5. print "<HTML>;";
  6. print "<TITLE>;问卷调查</TITLE>;";
  7. print "<BODY>;";
  8. print "<h1>;问卷调查</h1>;";
  9. print "当前结果如下:<br>;";
  10. open(FILE, "$filename") || die "文件打开错误";

  11. for ($i=0;$i<2 ;$i++) {
  12. $file[$i] = <FILE>;;
  13. $file[$i]=~s/n$//;
  14. }
  15. close(FILE);
  16. @item=split(/:/,$file[0]);
  17. @vote=split(/:/,$file[1]);
  18. print"<table border=1>;";
  19. for ($i=0;$i<@item+1 ;$i++) {
  20.     print "<tr>;<td>;网站</td>;<td>;$NAME{$item[$i]}</td>;<td>;票数</td>;<td>;$vote[$i]</td>;<tr>;";
  21. }
  22. print "</table>;";
  23. print "</body>;</html>;";
  24. exit;
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-04-30 08:27 |只看该作者

写入问题。

for ($i=0;$i<2 ;$i++) {
$file[$i] = <FILE>;;
$file[$i]=~s/n$//;
}
close(FILE);
@item=split(/:/,$file[0]);
@vote=split(/:/,$file[1]);
print"<table border=1>;";
for ($i=0;$i<@item+1 ;$i++) {
    print "<tr>;<td>;网站</td>;<td>;$NAME{$item[$i]}</td>; <td>;票数</td>;<td>;$vote[$i]</td>;<tr>;";
}


上面有兩個地方有問題...
$file[$i] =~s/\n$//;
才對...
$file[$i]=~s/[\r\n]//g;
好一點點..
for ($i=0;$i<@item+1 ;$i++) {
這邊如果是C/C++,或Java..
會給你一個index out of bound 的Error...
仔細想想@item是什麼....
@item +1有沒有意義?

至於為什麼會有上面那串數字...不清楚...
試試看調整IE的編碼...
如果還不行...在有可能出現問題的地方..用print  $XXX,"<br>;";
檢查看看....

最後..這兒是Perl版..你貼的是Perl代碼..不是PHP.....
別搞錯了...:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP