试用EF开发WEB应用程序(11): 在线留言系统

23 篇文章 0 订阅
22 篇文章 0 订阅

题记:用“易语言.飞扬”(EF)开发WEB应用程序,此前还没有先例。但因为EF本地开发包(EFNDK)已经发布,用C/C++开发一个EF类库,使其支持EF开发WEB应用程序,应该并非难事。当然也可想而知,其中必有诸多难点有待解决。此系列文章,为本人探索过程之记录,对外人未必有多大价值。如有网友乐观其事,还请理性待之。作者:liigo。转载请务必注明出处:http://blog.csdn.net/liigo/在线留言


试用EF开发WEB应用程序(11): 在线留言系统 

 

在线留言系统入口   (非常感谢好友龚辟愚提供网络服务器)

此留言板的“易语言.飞扬”(EF)完整源代码如下:

引入 fastcgi, sqlite, 工具;

公开 类 启动类
{
    静态 Sqlite数据库 _db;

    公开 静态 启动()
    {
        _db 
=   new  Sqlite数据库();
        _db.打开(
" ../db/msgboard.file " true );
        
if (_db.表是否存在( " messages " ==   false )
            createTable();

        FCGI fcgi 
=   new  FCGI;
        
while (fcgi.Accept()  >=   0 )
        {
            
if (fcgi.REQUEST_METHOD.到小写()  ==   " post " )
                fcgi.ReadContentAsQueryString();

            文本 html 
=  html_template.替换全部( " $(title) " " 留言板(由EF开发) " );

            
if (fcgi.QUERY_STRING( " name " !=   ""   ||  fcgi.QUERY_STRING( " message " !=   "" )
                insertMessage(fcgi);

            
// delete all messages
             if (fcgi.QUERY_STRING( " cleandb " ==   " byliigo " )
                _db.执行SQL(
" delete from messages where 1=1 " );

            string messages; 
int  count;
            (messages,count) 
=  listAllMessages();
            html 
=  html.替换( " $(messages) " , messages);
            html 
=  html.替换( " $(count) " , count.到文本());

            fcgi.Output(html.到UTF8());
        }
        _db.关闭();
    }

    
private   static  createTable()
    {
        Sqlite表结构 tdef 
=   new  Sqlite表结构();
        tdef.添加字段(
" id " , Sqlite字段类型.主键整数);
        tdef.添加字段(
" name " , Sqlite字段类型.文本);
        tdef.添加字段(
" message " , Sqlite字段类型.文本);
        tdef.添加字段(
" ip " , Sqlite字段类型.文本);
        tdef.添加字段(
" date " , Sqlite字段类型.文本);
        _db.创建表(
" messages " , tdef);
    }
    
    
private   static  bool insertMessage(FCGI fcgi)
    {
        
private   static  string GetDate()
        {
            日期时间类 t 
=   new  日期时间类();
            
return  t.年().到文本()  +   " / "   +  t.月().到文本()  +   " / "   +  t.日().到文本()  +   "   "   +  t.时().到文本()  +   " : "   +  t.分().到文本()  +   " : "   +  t.秒().到文本();
        }

        string name 
=  fcgi.QUERY_STRING( " name " );
        
if (name  ==   "" ) name  =   " EF爱好者 " ;
        string message 
=  fcgi.QUERY_STRING( " message " );
        
if (message  ==   "" ) message  =   " 他/她很懒,什么都没说:) " ;
        string ip 
=  fcgi.REMOTE_ADDR;
        string date 
=  GetDate();

        string sql 
=   " insert into messages(name, message, ip, date) values(' "   +  name  +   " ',' "   +  message  +   " ',' "   +  ip  +   " ',' "   +  date  +   " ') " ;
        
return  _db.执行SQL(sql);
    }

    
private   static  string, int  listAllMessages()
    {
        
private   static  string fixHTMLChars(string s)
        {
            s 
=  s.替换全部( " & " " & " );
            s 
=  s.替换全部( " < " " &lt; " );
            s 
=  s.替换全部( " > " " &gt; " );

            
// someone note this? :)
            s  =  s.替换全部( " [b] " " <b> " ); s  =  s.替换全部( " [/b] " " </b> " );
            s 
=  s.替换全部( " [red] " " <font color="red"> " ); s  =  s.替换全部( " [/red] " " </font> " );
            s 
=  s.替换全部( " [blue] " " <font color="blue"> " ); s  =  s.替换全部( " [/blue] " " </font> " );
            s 
=  s.替换全部( " [green] " " <font color="green"> " ); s  =  s.替换全部( " [/green] " " </font> " );
            
return  s;
        }

        
private   static  string formatMessage(string name, string message, string ip, string date)
        {
            
static  string  msg_template  =   " <p>$(name) ($(ip)) 于 $(date) 留言:$(message)</p> " ;
            string msg 
=  msg_template.替换( " $(name) " , name);
            msg 
=  msg.替换( " $(ip) " , ip);
            msg 
=  msg.替换( " $(message) " , fixHTMLChars(message));
            msg 
=  msg.替换( " $(date) " , date);
            
return  msg;
        }

        Sqlite记录集 query 
=   new  Sqlite记录集(_db,  " select* from messages order by _ROWID_ desc " );
        string messages 
=   "" ;
        
int  count  =   0 ;
        
if (query.打开())
        {
            count 
=  query.取记录数();
            
while (query.到下一记录())
            {
                messages 
+=  formatMessage(query.读字段值( " name " , Sqlite字段类型.文本), query.读字段值( " message " , Sqlite字段类型.文本), query.读字段值( " ip " , Sqlite字段类型.文本), query.读字段值( " date " , Sqlite字段类型.文本));
            }            
        }
        
return  (messages, count);
    }

    常量 文本 html_template 
=  [ " Content-type: text/html

< html >< head >
< meta http - equiv = " content-type "  content = " text/html;charset=utf-8 " >
< title > $(title) </ title >
</ head >
< body >
< h1 > $(title) </ h1 >
< hr ></ hr >

< form method = " post " >
    
< p > 姓名: < input type = " text "  name = " name "  size = 20   /></ p >
    
< p > 留言: < input type = " text "  name = " message "  size = 100   /></ p >

    
< p >< input type = " submit "  value = " 提交留言 " ></ input ></ p >
</ form >
        
< p >< a href = " msgboard.txt "  target = " _blank " > 此留言板的EF源代码 </ a ></ p >

< hr ></ hr >
< h1 > 所有留言(共 $(count) 条) </ h1 >

$(messages)

< hr ></ hr >
< p > by liigo,  < a href = " http://blog.csdn.net/liigo/ " > http://blog.csdn.net/liigo/</a></p>
</ body >
</ html >
" ];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值