论坛: 网站建设 标题: RE:成员xysj1111 复制本贴地址    
作者: Aoming [aoming]    版主   登录
引用:

  做个公开部分权限的网页,比如有个新闻发布栏,设个用户和密码,知道的人可以修改这部分内容(能在线修改最好),但不可以修改其他部分,应该怎么搞?

==============================
你好!首先想说的是我不是一个程序员,所以提供的程序设计会存在很多不爽。欢迎对设计提出质疑并进一步讨论。
一个比较简单的思路:

静态页面分区域,比如分头部title,底部bottom,中间主题部分用表格分开,每一个单元格中放置不同的脚本,脚本可由asp代码或者javascript、perl、php等完成。脚本的作用是调用后台CGI程序部分已经处理好的输出结果,这部分输出结果可以用文本数据的形式保存,也可以写入数据库文件。

举个例子来说MY动力文章系统(免费版),它是将处理的结果保存到ACCESS的数据库文件中,然后在首页通过<% call function %>这样的形式激活另一个asp文件读取数据库。

接着说后台CGI部分设计,这部分当然会比较复杂,但简化程序功能,我用Perl做脚本语言,结合javascript举一个只需要2个管理员,分管2个单元格(一个负责更新网页通知,一个负责更新网页问候语)

===========
流程图:
===========
打开
静态网页───提交管理员验证给CGI后台
 │                │
  │           │
  │       管理员验证
 │          │
        ┌──┴────────┬──────────┐
 ┇    A管理员通过            B管理员通过      未通过────  ……
 ┇      │                    │
      转到发通知部分     转到更新欢迎辞部分
       │             │
  │    打开Note文本            打开Hello文本
 │    写入新内容              写入新内容
  │          │                      │
  │          ├────────────┤
  └─────          脚本调用      │
              ├────────────│
              │                      │
            显示Note                显示Hello



以下是一段例子,比较龌龊的代码,希望各位看了不要反胃,我不是程序员,见谅。

==================================
静态页面部分  Try.htm
==================================

<html>
<!-- .....头部略 -->
<body>
<!-- 显示通知 -->
<table>
  <tr><td><script language="JavaScript" src="/cgi-bin/script/Note.pl"></script></td></tr><!-- 显示通知 -->
  <tr><td><script language="JavaScript" src="/cgi-bin/script/Hello.pl"></script></td></tr> <!-- 显示欢迎语句 -->
</table>

<!-- 2个管理员登陆 -->
<form action="/cgi-bin/script/process.pl" method="post" name="guanli" target="_logon" id="guanli">
  <p><font size="2" face="Verdana, Arial, Helvetica"><br>
  管理员姓名
  <input name="name" type="text" id="name" size="10" maxlength="20"><br>
  管理员密码
  <input name="pass" type="password" id="pass3" size="10" maxlength="20">
  <br><br>
  <input name="submit" type=submit value="提交">&nbsp;<input name="reset" type="reset" value="重填">
  </p>
</form>
========================================

===================================
后台主CGI程序process.pl
===================================
 
#!/usr/bin/perl
print "content-type:text/html\n\n";
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}
elsif ($ENV{'REQUEST_METHOD'} eq "GET"){
$buffer=$ENV{'QUERY_STRING'};
}
else{
exit;
}

####################################################
##    CGI解码,读取用户数据,未对非法字符过滤    ##
####################################################
@pairs=split(/&/,$buffer);

foreach $pair(@pairs){
($name,$value)=split(/=/,$pair);
$name=~tr/+/ /;
$name=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$value=~tr/+/ /;
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$form{$name}=$value;
}

###############################
##        用户身份认证      ##
###############################
#
######### 明星会员管理认证 ########
$user_mxhy="猫子";
$pass_mxhy="010203";
$user_xxmx="小辑";
$pass_xxmx="897011";
if(($form{'name'} eq $user_mxhy) && ($form{'pass'} eq $pass_mxhy))
{
if($form{'edit'} eq "done"){
& mxhy_edit;            # 打开date_cssy_guanli文本写入新数据
print "修改成功";
exit;
}
& mxhy;            # 明星会员管理,包括非法字符过滤
}
elsif(($form{'name'} eq $user_xxmx) && ($form{'pass'} eq $pass_xxmx)){
if($form{'edit'} eq "done"){
& xxmx_edit;            # 打开date_cssy_guanli文本写入新数据
print "修改成功";
exit;
}
& xxmx;            # 明星会员管理,包括非法字符过滤
exit;
}
else{
print "sorry,口令或用户名错误,你没有管理权限";
exit;
}

################################################

###############################
##        子程序部分        ##
###############################
sub mxhy  #明星会员管理部分,包括非法字符过滤
{
open(SCHOOLSTAR,"./date_cssy_guanli/mxhy.txt");
$line=<SCHOOLSTAR>;
@pix=split(/ /,$line);
close(SCHOOLSTAR);
$mxhy_text=$pix[3];
$mxhy_text=~s/<br>/\n/g;
$zxdt_text=$pix[4];
$zxdt_text=~s/<br>/\n/g;
# 文本中格式为“图片URL 宽度 高度 明星会员介绍 社团最新动态”
# 所以$pix[0]为图片URL,$pix[1]为宽度、$pix[2]为高度
# 当前明星会员的介绍文本用变量$mxhy_text表示,社团最新动态用$zxdt_text表示

print<<MXHY;
<html><head><title>首页明星会员发布管理</title></head>
<body><h3 align=center>首页明星会员发布管理</h3><hr width=80%>
  <table width=80% align=center>
    <tr><td><font color=red>NOTE:鉴于社区网页结构,图片的宽度最好不要超过145pix</font><br></td></tr>
    <tr>
    <td>
      <form action="process.cgi" method=POST>
      <p>当前首页明星会员照片:
      <script language=javascript>
      document.write('<img src=$pix[0] width=$pix[1] height=$pix[2] align=left>');
      </script></p>
      <p><input type=hidden name=name value=$user_mxhy></p>
      <p><input type=hidden name=pass value=$pass_mxhy></p>
      <p><input type=hidden name=edit value=done></p>
      <p>图片的地址:<input type=text name=mxhy_pix_url value=$pix[0] size=40></p>
      <p>图片的宽度:<input type=text name=mxhy_pix_width value=$pix[1] size=4>pix 高度:<input type=text name=mxhy_pix_height value=$pix[2] size=4>pix</p>
      <h width=70% align=center>
      <p>当前首页明星会员介绍: </p>
      <p><textarea name="mxhy_info" cols="80" rows="10" wrap="VIRTUAL">$mxhy_text</textarea></p>
      <p>社团最新动态: </p>
      <p><textarea name="zxdt_info" cols="80" rows="10" wrap="VIRTUAL">$zxdt_text</textarea></p>
      <p align=right><input type=submit name="Submit"> <input type=reset name="reset"></p>
    </td>
    </tr>
  </table> 
MXHY
}
###############################
sub mxhy_edit #打开date_cssy_guanli文本写入新数据部分
{
$form{'mxhy_pix_url'}=~s/ //g;

if($form{'mxhy_pix_width'}=~/\D/){
  print "$form{'mxhy_pix_width'}\n";
  print "图片宽度设置有误,请检查";
  exit;
}
if($form{'mxhy_pix_height'}=~/\D/){
  print "$form{'mxhy_pix_height'}\n";
  print "图片高度设置有误,请检查";
  exit;
}

$form{'mxhy_info'}=~s/\cM\n/<br>/g;
$form{'mxhy_info'}=~s/ /&nbsp;/g;
$form{'mxhy_info'}=~s/</&lt;/g;
$form{'mxhy_info'}=~s/>/&gt;/g;
$form{'mxhy_info'}=~s/&lt;br&gt;/<br>/g;
$form{'zxdt_info'}=~s/\cM\n/<br>/g;
$form{'zxdt_info'}=~s/ /&nbsp;/g;
$form{'zxdt_info'}=~s/</&lt;/g;
$form{'zxdt_info'}=~s/>/&gt;/g;
$form{'zxdt_info'}=~s/&lt;br&gt;/<br>/g;
$space=" ";
$line=$form{'mxhy_pix_url'}.$space.$form{'mxhy_pix_width'}.$space.$form{'mxhy_pix_height'}.$space.$form{'mxhy_info'}.$space.$form{'zxdt_info'};
open(MXHY_INFO,">./date_cssy_guanli/mxhy.txt");
print MXHY_INFO "$line";
close(MXHY_INFO);
}

###############################
sub xxmx  #学习明星管理部分,包括非法字符过滤
{
open(SCHOOLSTAR,"./date_cssy_guanli/xxmx.txt");
$line=<SCHOOLSTAR>;
@pix=split(/ /,$line);
close(SCHOOLSTAR);
# 文本中格式为“图片URL 宽度 高度 明星会员介绍 社团最新动态”
# 所以$pix[0]为图片URL,$pix[1]为宽度、$pix[2]为高度

print<<XXMX;
<html><head><title>学习明星发布管理</title></head>
<body><h3 align=center>学习明星发布管理</h3><hr width=80%>
  <table width=80% align=center>
    <tr><td><font color=red>NOTE:鉴于社区网页结构,图片的宽度最好不要超过165pix</font><br></td></tr>
    <tr>
    <td>
      <form action="process.cgi" method=POST>
      <p>当前学习明星照片:
      <script language=javascript>
      document.write('<img src=$pix[0] width=$pix[1] height=$pix[2] align=left>');
      </script></p>
      <p><input type=hidden name=name value=$user_xxmx></p>
      <p><input type=hidden name=pass value=$pass_xxmx></p>
      <p><input type=hidden name=edit value=done></p>
      <p>图片的地址:<input type=text name=xxmx_pix_url value=$pix[0] size=40></p>
      <p>图片的宽度:<input type=text name=xxmx_pix_width value=$pix[1] size=4>pix 高度:<input type=text name=xxmx_pix_height value=$pix[2] size=4>pix</p>
      <h width=70% align=center>
      <p align=right><input type=submit name="Submit"> <input type=reset name="reset"></p>
    </td>
    </tr>
  </table> 
XXMX
}
###############################
sub xxmx_edit #打开date_cssy_guanli文本写入新数据部分
{
$form{'xxmx_pix_url'}=~s/ //g;

if($form{'xxmx_pix_width'}=~/\D/){
  print "$form{'xxmx_pix_width'}\n";
  print "图片宽度设置有误,请检查";
  exit;
}
if($form{'xxmx_pix_height'}=~/\D/){
  print "$form{'xxmx_pix_height'}\n";
  print "图片高度设置有误,请检查";
  exit;
}

$space=" ";
$line=$form{'xxmx_pix_url'}.$space.$form{'xxmx_pix_width'}.$space.$form{'xxmx_pix_height'};
open(MXHY_INFO,">./date_cssy_guanli/xxmx.txt");
print MXHY_INFO "$line";
close(MXHY_INFO);
}
###############################

#程序末尾部分
exit;


===================================
脚本 mxhy_info.pl
===================================
#!/usr/bin/perl
print "content-type:text/html\n\n";
open(SCHOOLSTAR,"../date_cssy_guanli/mxhy.txt");
$line=<SCHOOLSTAR>;
@pix=split(/ /,$line);
close(SCHOOLSTAR);

print "document.write('$pix[3]')";

exit;

===================================
脚本 mxhy_pix.pl
===================================
#!/usr/bin/perl
print "content-type:text/html\n\n";
open(SCHOOLSTAR,"../date_cssy_guanli/mxhy.txt");
$line=<SCHOOLSTAR>;
@pix=split(/ /,$line);
close(SCHOOLSTAR);
print "document.write('<a href=$pix[0] target=blank><img src=$pix[0] width=$pix[1] height=$pix[2] alt=点击浏览></a>')";

exit;

…………………………
类似的还有两个脚本就不列举出来了。

地主 发表时间: 04-04-20 00:40

回复: darkslayer [xysj1111]   论坛用户   登录
多谢了

B1层 发表时间: 04-04-22 09:01

回复: zmdxl [zmdxl]   论坛用户   登录
其实Aoming [aoming]还是很用心的

可能说话、做事有点个性

大家多谅解他

一起学习

B2层 发表时间: 04-04-24 12:54

回复: q70213526 [q70213526]   版主   登录
已收藏。
谢谢

B3层 发表时间: 04-04-24 18:53

回复: RunwinY [runwin]   论坛用户   登录
不用心还会写这么多吗?我就不会啦。。。呵

B4层 发表时间: 04-04-24 21:44

论坛: 网站建设

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号