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

题记:用“易语言.飞扬”(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>
"];
}
posted @ 2008-04-29 18:26  fortest  阅读(312)  评论(0编辑  收藏  举报