write.aspx
ÀÌÁ¦ ±Û¾²±â¶õºÎÅÍ, ½ÇÁ¦ À¥ ÆäÀÌÁö¸¦ ¸¸µé¾î º¸°Ú½À´Ï´Ù. ¿ì¼± /bin µð·ºÅ͸®¿¡, ÆÄÀÏÀ» Çϳª ´õ ¸¸µì´Ï´Ù. À̸§Àº cstMessageBoard.cs·Î ÇÕ´Ï´Ù.
cstMessageBoard.cs:
using System;
using System.Data;
using System.Data.SqlClient;
namespace cstDB {
public class MessageBoard : OrderedTableReader {
public MessageBoard( String _tableName )
: base( _tableName, "seq" ) {}
public bool AddMessage(
String writer,
String email,
String title,
String pwd,
int mode,
String content )
{
String sql;
bool ret=false;
sql = "insert into "+tableName
+ "( writer,email,title,pwd,ip,writeDate,readed,mode,content) "
+ "values( @writer,@email,@title,@pwd,@ip,"
+ "getdate(), 0, @mode, @content )";
SqlCommand cmd= new SqlCommand(sql, dbConnection );
cmd.Parameters.Add(new SqlParameter("@writer",
SqlDbType.VarChar,20)).Value=writer;
cmd.Parameters.Add(new SqlParameter("@email",
SqlDbType.VarChar,100)).Value=email;
cmd.Parameters.Add(new SqlParameter("@title",
SqlDbType.VarChar,200)).Value=title;
cmd.Parameters.Add(new SqlParameter("@pwd",
SqlDbType.VarChar,20)).Value=pwd;
cmd.Parameters.Add(new SqlParameter("@ip",
SqlDbType.Int)).Value=cstUtil.GetClientIP();
cmd.Parameters.Add(new SqlParameter("@mode",
SqlDbType.TinyInt)).Value=mode;
cmd.Parameters.Add(new SqlParameter("@content",
SqlDbType.Text)).Value=content;
try {
cmd.ExecuteNonQuery();
ret=true;
}
catch(Exception) {}
return ret;
}
}
}
|
OrderedTableReader¸¦ »ó¼Ó ¹Þ¾Æ¼ MessageBoard ¶ó´Â Ŭ·¡½º¸¦ ¸¸µå´Â °ÍÀÌÁÒ.
±»ÀÌ OrderedTableReader ¶ó´Â Å×À̺íÀ» ³¢¿ö ³ÖÀº °ÍÀº, ±× Ŭ·¡½º¿¡ ´Ù¸¥µ¥¼µµ ¾²ÀÏ ¸î°³ÀÇ ¸Þ¼µå¸¦ ³ÖÀ»
¿¹Á¤À̱⠶§¹®Àä, ´ÙÀ½ °Á¿¡¼ ¼³¸íÇÏ°Ô µË´Ï´Ù.
MessageBoard¿¡, Áö±ÝÀº AddMessage ¶ó´Â ¸Þ¼µå ¹Û¿¡ ¾øÁö¸¸, DeleteMessage ( ±Û »èÁ¦ ), ModifyMessage ( ±Û ¼öÁ¤ ), ReadPage ( ±Û ¸ñ·Ï ) µîÀÇ ¸Þ¼µå°¡ Ãß°¡µÉ °ÍÀÔ´Ï´Ù.
±×¸®°í ¸î°¡Áö ÀÚÁÖ ¾²ÀÏ ÇÔ¼ö¸¦ ³ÖÀ» cstUtil.cs ¶ó´Â ÆÄÀÏÀ» ¸¸µì´Ï´Ù.
cstUtil.cs
using System;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;
namespace cstDB {
public class cstUtil {
public static void Die_DoScript( string msg,string script )
{
string umsg="<"+"script language="javascript" "+">"
+"alert(\""+msg+"\");"
+script
+"<"+"/script"+">";
HttpContext.Current.Response.Write(umsg);
HttpContext.Current.Response.End();
}
public static void Die( string msg )
{
Die_DoScript( msg, "history.back()" );
}
public static void Die_Redirect( string msg, string url )
{
Die_DoScript( msg, "location.replace('"+url+"')" );
}
public static string Int32ToIP(Int32 ip)
{
IPAddress ipa = new IPAddress(ip);
return ipa.ToString();
}
public static Int32 IPToInt32(string ip)
{
return IPAddress.Parse(ip).Address;
}
public static Int32 GetClientIP()
{
return IPToInt32( HttpContext.Current.Request.UserHostAddress );
}
public static string RegExReplace(string str,
string regexpr,
string replacement)
{
Regex rex=new Regex(regexpr);
return rex.Replace(str, replacement );
}
public static string TagReplace(string src, params string[] tags)
{
for( int i=0; i<tags.Length; i++)
src=RegExReplace( src, "(\\<\\/?\\s*)("+tags[i]+"[^\\>]*\\>)", "$1_$2" );
return src;
}
public static string LinkURL(string str,string target)
{
return RegExReplace(str,
"http\\:\\/\\/\\S+",
"<a href='$0' target='"+target+"'>$0</a>" );
}
public static string LinkEmail(string str)
{
return RegExReplace( str,
"\\S+\\@\\S+",
"<a href='mailto:$0'>$0</a>" );
}
public static string Nl2Br (string src)
{
return src.Replace("\n","\n<br>");
}
};
};
|
ÀÌ ÆÄÀÏÀ» ÄÄÆÄÀÏÇØ¾ß °Ú´Âµ¥¿ä, ¾Õ °Á¿¡¼ ó·³ cmd¸¦ ½ÇÇà½ÃÄѼ /bin Æú´õ·Î À̵¿ÇÑ ÈÄ,
csc /t:library /out:cstDB.dll /debug+ /optimize+ cstDB.cs cstMessageBoard.cs cstUtil.cs
|
ÀÌ·¸°Ô ÄÄÆÄÀÏÇϸé cstDB.dll ÀÌ ´Ù½Ã ¸¸µé¾îÁú °Ì´Ï´Ù.
1. cstMessageBoard.cs
¿©±â¼± MessageBoard¶ó´Â °´Ã¼°¡ Á¤ÀǵǾú°í, Constructor(»ý¼ºÀÚ)¿Í ¸Þ¼µå Çϳª°¡ Ãß°¡ µÇ¾ú½À´Ï´Ù.
public MessageBoard( String _tableName )
: base( _tableName, "seq" ) {}
|
¾Õ °Á¿¡¼ Àá½Ã ³ª¿ÔÁö¸¸, °´Ã¼ À̸§°ú °°Àº ¸Þ¼µå´Â Constructor ȤÀº »ý¼ºÀÚ ¶ó°í ÇÕ´Ï´Ù.
ÀÌ ¸Þ¼µå´Â °´Ã¼¸¦ »ý¼º½Ãų¶§ ½ÇÇàÇÏ°Ô µÇÁÒ. À§ ó·³ Á¤ÀÇÇß´Ù¸é,
MessageBoard mb = new MessageBoard("cstBoard")
½ÄÀ¸·Î »ý¼ºÇϰí mb.AddMessage(...) ½ÄÀ¸·Î ¾²°Ô µË´Ï´Ù. À§ »ý¼ºÀÚ´Â »óÀ§ °³Ã¼( base, Áï OrderedTableReader)ÀÇ »ý¼ºÀÚ¸¦
È£ÃâÇÒ »ÓÀÔ´Ï´Ù. MessageBoard ¶ó´Â °³Ã¼¸¦ ¸¸µé·Á¸é À§Ã³·³ Å×À̺í À̸§À» Á¤Çϵµ·Ï ÇØ³ù´Âµ¥¿ä, À̰ÍÀº
³ªÁß¿¡, ÀÌ ¼Ò½º Çϳª·Î ¿©·¯°³ÀÇ °Ô½ÃÆÇ( ¼ÒÀ§, Multi-°Ô½ÃÆÇ )À» ¸¸µé±â À§Çؼ ÀÔ´Ï´Ù.
public bool AddMessage(
String writer,
String email,
String title,
String pwd,
int mode,
String content )
{
...
} |
µÎ¹øÂ°·Î ¸¸µç ¸Þ¼µå´Â À̹ø °Á¿¡¼ ¾²ÀÌ°Ô µÉ AddMessage¶õ ¸Þ¼µåÀä, ±Û¾´ÀÌ, ¸ÞÀÏÁÖ¼Ò, Á¦¸ñ, ¾ÏÈ£, Çü½Ä( Html ÅÂ±× Çã¿ë ¿©ºÎ ), ³»¿ëµîÀ» Àμö·Î ÁÖ¸é ±× °ªÀ» ÀÌ¿ëÇØ¼ DB¿¡ ÀúÀåÇÏ°Ô µË´Ï´Ù.
String sql;
bool ret=false;
sql = "insert into "+tableName
+ "( writer,email,title,pwd,ip,writeDate,readed,mode,content) "
+ "values( @writer,@email,@title,@pwd,@ip,"
+ "getdate(), 0, @mode, @content )";
SqlCommand cmd= new SqlCommand(sql, dbConnection );
|
insert ¹® »ç¿ëÇØ¼ ÀúÀåÇÏ°Ô µÇ´Âµ¥¿ä, ÀÔ·ÂÀÏÀÎ writeDate´Â getdate() ÇÔ¼ö·Î ÀÔ·Â ½Ã°£À» ³Ö°í, Á¶È¸
¼öÀÎ readed´Â 0À¸·Î ÃʱⰪÀ» ÁÝ´Ï´Ù. ±× ¿ÜÀÇ
@writer ó·³ @À¸·Î ½ÃÀÛÇÏ´Â °ÍÀº ´ÙÀ½ ó·³ ÆÄ¶ó¸ÞÅ͸¦ ÁöÁ¤Çؼ °ªÀ» ³Ö¾îÁÖ°Ô µË´Ï´Ù.
cmd.Parameters.Add(new SqlParameter("@writer",
SqlDbType.VarChar,20)).Value=writer;
cmd.Parameters.Add(new SqlParameter("@email",
SqlDbType.VarChar,100)).Value=email;
cmd.Parameters.Add(new SqlParameter("@title",
SqlDbType.VarChar,200)).Value=title;
cmd.Parameters.Add(new SqlParameter("@pwd",
SqlDbType.VarChar,20)).Value=pwd;
cmd.Parameters.Add(new SqlParameter("@ip",
SqlDbType.Int)).Value=cstUtil.GetClientIP();
cmd.Parameters.Add(new SqlParameter("@mode",
SqlDbType.TinyInt)).Value=mode;
cmd.Parameters.Add(new SqlParameter("@content",
SqlDbType.Text)).Value=content;
|
ÀÌÀüº¸´Ù ¾à°£ º¹ÀâÇØÁ³³×¿ä. SqlCommand °³Ã¼ÀÇ Parameters ¿¡ Çϳª¾¿ Ãß°¡ÇÏ´Â °ÍÀä,
cmd.Parameters.Add(new SqlParameter("@writer",
SqlDbType.VarChar,20)).Value=writer;
|
ÀÌ°Ç Á»´õ ±æ°Ô ¾²¸é,
param = new SqlParameter("@writer",SqlDbType.VarChar,20);
param.Value=writer;
cmd.Parameters.Add(param);
|
ÀÌ·¸°Ôµµ ¾µ ¼ö ÀÖ½À´Ï´Ù. ³Ñ°ÜÁÙ °ª(ÆÄ¶ó¸ÞÅÍ)ÀÇ Çü½Ä( À§¿¡¼ SqlDbType.VarChar ), ±æÀÌ(À§¿¡¼ 20)µîµµ
Á¤ÇÏ°Ô µË´Ï´Ù.
IP °ªÀº ´ÙÀ½¿¡ ¼³¸íÇÒ cstUtil °³Ã¼¿¡ Á¤ÀÇÇØµÐ GetClientIP() ¶ó´Â ¸Þ¼µå·Î Çö »ç¿ëÀÚÀÇ IP°ªÀ» ³Ö½À´Ï´Ù.
±×¸®°í Äõ¸®¹®À» ½ÇÇàÇÕ´Ï´Ù.
try {
cmd.ExecuteNonQuery();
ret=true;
}
catch(Exception) {}
return ret;
|
SqlCommandÀÇ ExecuteNonQuery() ¸Þ¼µå·Î ½ÇÇàÇÕ´Ï´Ù. ¾Õ °Á¿¡¼ ¼³¸íÇßÁö¸¸, ExecuteNonQuery´Â °á°ú °ªÀÌ ¾ø´Â Äõ¸®¹® ½ÇÇàÇÒ¶§ ¾²ÀÔ´Ï´Ù.
¿©±â c#¿¡¼ Á¾Á¾ ¾²ÀÏ ¿¡·¯ ó¸® ±¸¹®ÀÎ try/catch ¹®ÀÌ ¾²¿´´Âµ¥¿ä, ¿ì¼± Äõ¸®¹®À» ½ÇÇàÇØ º¸°í( try ), ¿¡·¯°¡ ³ª¸é ±× ¿¡·¯¸¦ Àâ°Ô(catch) µË´Ï´Ù. catch¿¡´Â ¾Æ¹« ³»¿ëÀÌ ¾ø´Âµ¥¿ä, ÀÌ ¸Þ¼µå ¸Ç ¾Õ¿¡ ret °ªÀ» false·Î ÇØ³õ¾ÒÀ¸´Ï, ¿¡·¯°¡ ³ª¸é false°¡ ¸®ÅÏµÇ°Ô µË´Ï´Ù. Á¦´ë·Î ½ÇÇàµÇ¸é true°¡ ¸®Åϵǰí¿ä. »ç¿ëÇÒ¶§´Â if(AddMessage(...)) { /*¼º°øÃ³¸®*/ } else { /*½ÇÆÐó¸®*/ } ½ÄÀ¸·Î ¾²¸é µÇ°ÚÁÒ.
* µð¹ö±ëÇÒ¶©, try - catch ¾øÀÌ ÇϽô °ÍÀÌ ³ªÀ» °Ì´Ï´Ù. ´Ù¸¥ ¿¡·¯µµ catch µÇ¾î ¹ö·Á¼¿ä. ^^;
* ÄÄÆ÷³ÍÆ® dll µð¹ö±ëÇÒ¶§, Response.Write¸¦ ¸ø½á¼ Àú´Â throw new Exception("lalala"); °°Àº ¹®ÀåÀ» ½ÇÇà½Ãŵ´Ï´Ù.
À§¿¡¼ sql ¹® º¸°í ½ÍÀ¸¸é throw new Exception(sql) ÀÌ µÇ°ÚÁÒ. °á°ú´Â ÇØº¸½Ã¸é ¾Ð´Ï´Ù. - Response.Write¿Í ºñ½ÁÇÑ È¿°ú°¡ ³³´Ï´Ù.
À̿ܿ¡, ¾ÆÁ÷Àº Àß ¸ô¶ó ¼³¸í¸øµå¸³´Ï´Ù¸¸, Trace.Write() ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖÀ¸´Ï±î¿ä, Trace µµ ã¾Æº¸½Ã±â ¹Ù¶ø´Ï´Ù.
|
¿©±â¼ SqlParameter·Î, Äõ¸®¹® ÆÄ¶ó¸ÞÅ͸¦ ÇϳªÇϳª ÁöÁ¤Çϵµ·Ï ÇØ³õ¾Ò´Âµ¥¿ä, Àüó·³,
sql = "insert into .... "values( '"+writer+"','"+email+"'....)"
ÀÌ·¸°Ô, Á÷Á¢ Äõ¸®¹®¿¡ ÀÛÀº µû¿ÈÇ¥·Î µÑ·¯½×¾Æ¼ °ªÀ» ³Ö¾îµµ µË´Ï´Ù.
´Ù¸¸ ÀÌ·¸°Ô SqlParameter °³Ã¼¸¦ ÇϳªÇϳª Ãß°¡ÇÏ´Â ¹æ½ÄÀº, ¼Ò½º´Â ¾à°£ ±æ¾îÁöÁö¸¸ ¸î°¡Áö ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.
- varcharÇü °ª ¾È¿¡ ÀÛÀºµû¿ÈÇ¥(') °¡ À־ Á¦´ë·Î º¯È¯µË´Ï´Ù. Áï, Àüó·³ replace·Î ÀÛÀºµû¿ÈÇ¥ Çϳª¸¦ ÀÛÀºµû¿ÈÇ¥ µÎ°³·Î ¹Ù²ÙÁö ¾Ê¾Æµµ µË´Ï´Ù.
- ¸¸¾à Á¤ÇØÁø ±æÀ̺¸´Ù ±æ¸é, ±× ±æÀÌ¿¡¼ À߸®±â ¶§¹®¿¡ ¿¡·¯°¡ ¾È³³´Ï´Ù.
¿¹¸¦µé¾î DB¿¡ varchar(2)À¸·Î Á¤Çسù´Âµ¥, 'aaa' ó·³ ¼¼±ÛÀÚ¸é "String or Binary data would be truncated" ¶ó´Â ¿¡·¯°¡ ³ª°í Á¾·áµÇÁÒ. ±×·±µ¥ À§¿¡¼ ó·³ SqlParameter¿¡ ±æÀ̸¦ Á¤ÇØµÎ¸é ±× ±æÀÌ¿¡¼ ÀÚµ¿À¸·Î À߸³´Ï´Ù. ( Áï, 'aa'¸¸ µé¾î°©´Ï´Ù )
±×·±µ¥ À̰Ô, ÇÑ±Û ¹®Á¦´Â ¿©ÀüÈ÷ ³²¾ÆÀÖ½À´Ï´Ù. SqlDbType.VarChar¿¡ ±æÀÌ 10À¸·Î ÇØµµ, ÇÑ±Û 10ÀÚ¸é 20byte°¡ µÇ¾î ¿¡·¯°¡ ³ª°Ô µË´Ï´Ù. VarChar ´ë½Å NVarChar·Î ÇÏ¸é µË´Ï´Ù¸¸, ³¶ºñÇÏ´Â °Í °°¾Æ¼ »ç¿ëÇϱâ Á» ±×·¸´õ±º¿ä(¿µ¾îµµ 2byte·Î µé¾î°©´Ï´Ù). Á¦ °æ¿ì º¸Åë, Å×À̺íÀº ÇÊµå±æÀ̸¦ µÎ¹è·Î Àâ¾Æ¼, VarChar(20)À¸·Î Àâ¾ÒÀ¸¸é, SqlParameter¿¡´Â ±æÀ̸¦ 10À¸·Î ÇÕ´Ï´Ù. ±×·³ ¿¡·¯´Â ¾È³³´Ï´Ù¸¸, ¿µ¹®µµ 10ÀÚ¿¡¼ À߸®´Â ¹®Á¦°¡ ÀÖÁÒ. ÇѱÛ/¿µ¹®µû¶ó ½ÇÁ¦ ¹ÙÀÌÆ®¼ö ±¸Çؼ Àß¶ó³ÖÀ» ¼ö ÀÖ°Ú½À´Ï´Ù¸¸, º¹ÀâÇϱ⸸ ÇÑ°Í °°¾Æ ´Ù·çÁö ¾Ê½À´Ï´Ù.
cstUtil.cs
¿©±â¿¡´Â ¸î°¡Áö Á¾Á¾ ¾²ÀÌ°ÔµÉ ÇÔ¼öµéÀ» ³Ö¾î³ù½À´Ï´Ù. ¸ðµÎ static ÇÔ¼öµéÀä, staticÀ̶ó¼ new·Î »ý¼º ¾ÈÇϰí, cstUtil.Die("...") ½ÄÀ¸·Î ¾²°Ô µË´Ï´Ù. ¾Õ °Á¿¡¼ ¼³¸íµå·Èµí, ¿¹ÀüÀÇ Àü¿ª ÇÔ¼ö/º¯¼ö ¾²°í ½ÍÀ¸½Ã¸é ¿øÇÏ´Â °³Ã¼¿¡ ¸ô¾Æ³Ö°í, ¼±¾ðÇÒ¶§ static ºÙÀÌ¸é µË´Ï´Ù.
* ´å³Ý µµ¿ò¸» º¸½Ã´Ù°¡, Ŭ·¡½º ¸â¹ö¶õ¿¡, Public static (shared) methods/properties ·Î ºÐ·ù µÇ¾î ÀÖ´Â °ÍÀº Ŭ·¡½ºÀ̸§.¸Þ¼µåÀ̸§ À¸·Î È£ÃâÇÏ°Ô µË´Ï´Ù. ÇÑÆí Public Instance methods/properties ·Î ºÐ·ùµÇ¾î ÀÖ´Â °ÍµéÀº new·Î »ý¼ºÇÑ ÈÄ, »ý¼ºÇѰ³Ã¼À̸§.¸Þ¼µåÀ̸§À¸·Î È£ÃâÇÏ°Ô µË´Ï´Ù. µµ¿ò¸» º¸½Ç¶§ Âü°íÇϼ¼¿ä.
* MessageBoard mb = new MessageBoard("cstBoard") ½ÄÀ¸·Î »ý¼ºÇϸé, MessageBoard´Â °³Ã¼°í, mb ´Â ±× °³Ã¼ÀÇ ÀνºÅϽºInstance¶ó°í ºÎ¸¨´Ï´Ù. Àúµµ Á» Çò°¥¸®°Ô »ç¿ëÇϰí ÀÖ°í, Çò°¥¸³´Ï¸¸, ÀÏ´Ü Instance ¶æÀº ±×·¸½À´Ï´Ù.
À̰æ¿ì static ¸Þ¼µå´Â MessageBoard.xxx() ½ÄÀ¸·Î È£ÃâÇÒÅ×°í, Instance ¸Þ¼µå´Â mb.xxx() ½ÄÀ¸·Î È£ÃâÇϰÚÁÒ
|
¼¼ºÎ ¼³¸íÀº »ý·«Çϰí¿ä, ¾î¶² ÇÔ¼öµéÀÎÁö¸¸ ¼³¸íÇÏ°í ³Ñ¾î°¡°Ú½À´Ï´Ù.
public static void Die( string msg )
public static void Die_DoScript( string msg, string script )
public static void Die_Redirect( string msg, string url )
|
Die´Â PHP dieÇÔ¼ö¿¡¼ µû¿Â À̸§Àä, msg¸¦ alert âÀ¸·Î ¶ç¿ì°í, history.back()À¸·Î ÀÌÀüÆäÀÌÁö·Î µ¹¾Æ°¡´Â ±â´ÉÀ» ÇÕ´Ï´Ù. Die_DoScript( msg, script )´Â msg¸¦ alert âÀ¸·Î ¶ç¿ì°í, script¸¦ ½ÇÇà, Die_Redirect(msg, url)Àº msg¸¦ alertâÀ¸·Î ¶ç¿ì°í url ·Î À̵¿ÇÕ´Ï´Ù. ÆäÀÌÁö ¿¡·¯ 󸮸¦ À§ÇÑ ¸Þ¼µå µéÀÔ´Ï´Ù.
public static string Int32ToIP(Int32 ip)
public static Int32 IPToInt32(string ip)
|
Int32ToIP´Â Á¤¼ö·ÎµÈ ip °ªÀ» ¹®ÀÚ¿·Î, IPToInt32´Â ¹®ÀÚ¿·Î µÈ ip¸¦ Á¤¼ö·Î ¹Ù²ß´Ï´Ù.
¾ÆÀÌÇÇ´Â ¾Æ½Ã´Ù½ÃÇÇ, 127.0.0.1 ó·³, 0 ~ 255ÀÇ ¼ýÀÚ ³×°³°¡ Á¡À¸·Î ±¸ºÐµÇ¾î ÀÖ¾î¼,
Á¤¼ö 4byte ·Î ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù. DB ÀúÀåÇÒ¶§ ¸îbyte¶óµµ ÁÙ¿©º¸°íÀÚ ¸¸µç ÇÔ¼öÀÔ´Ï´Ù.
* À̰Š¿ø·£ Á» ±ä ÇÔ¼ö¿´´Âµ¥, °Á ¾²´Ù ã¾Æº¸´Ï IPAddress¶ó´Â °£´ÜÇÑ Å¬·¡½º°¡ ÀÖ´õ±º¿ä. ^^; ¹¹µç »ý°¢³ª¸é ¿ì¼± MSDNÀ» ã¾ÆºÁ¾ß°Ú½À´Ï´Ù.
public static Int32 GetClientIP()
{
return IPToInt32( HttpContext.Current.Request.UserHostAddress );
}
|
GetClientIP() ´Â ÇöÀç »ç¿ëÀÚÀÇ IP¸¦ ±¸ÇÏ´Â ¸Þ¼µåÀä, AddMessage ¸Þ¼µå¿¡¼ ¾ÆÀÌÇÇ ³ÖÀ»¶§ ¾²ÀÔ´Ï´Ù.
Àüó·³ ¾²ÀÚ¸é, Request.ServerVariables["REMOTE_ADDR"] ÀÌ µÇ°Ú´Âµ¥, ã¾Æº¸´Ï UserHostAddress¶õ ÇÁ·ÎÆÛƼ¸¦ µû·Î Á¦°øÇϳ׿ä. Áö±Ý ÀÌ ¼Ò½º°¡ ÆäÀÌÁö°¡ ¾Æ´Ï¶ó ÄÄÆ÷³ÍÆ®(dll) À̱⠶§¹®¿¡, ÇöÀç »ç¿ëÀÚÀÇ ¾ÆÀÌÇǸ¦ ¾Ë¾Æ³»±â À§Çؼ ¾Õ¿¡ HttpContext.Current.À» ºÙ¿´½À´Ï´Ù.
public static string RegExReplace(string str, string regexpr, string replacement)
|
À̰ÍÀº Á¤±Ô½Ä(RegularExpression)À» ÀÌ¿ëÇØ¼ ¹®ÀÚ¿À» ġȯ(Replace) ÇÏ´Â ÇÔ¼öÀä, ÀÌ ÀÚüº¸´Ù´Â ´ÙÀ½¿¡ ¼³¸íÇÒ ¸Þ¼µå¿¡¼ È£ÃâµÇ¾î ¾²ÀÌ°Ô µË´Ï´Ù.
public static string TagReplace(string src, params string[] tags)
public static string LinkURL(string str,string target)
public static string LinkEmail(string str)
public static string Nl2Br (string src)
|
À̰ÍÀº ±Û º¸±â(view.aspx) ¿¡ ¾²ÀÏ ¸Þ¼µåµéÀÔ´Ï´Ù.
TagReplace´Â ÁöÁ¤ÇÑ Å±׸¦ ¾à°£ ¹Ù²ã¼ ¸ø¾²°Ô(?) ÇÕ´Ï´Ù. ¿¹¸¦µé¾î,
s = cstUtil.TagReplace( "<xmp> lalala", "xmp")
ÀÌ·¸°Ô Çϸé s¿¡ "<_xmp> lalala" ·Î, ÅÂ±× ¾Õ¿¡ _ °¡ µé¾î°¡¼, űװ¡ ½ÇÇàÀÌ ¾ÈµË´Ï´Ù. xmp °°Àº ¿äÁÖÀÇ(?)
ű׸¦ ½áµµ ½ÇÇà ¾ÈµÇµµ·Ï Çϱâ À§ÇØ ¸¸µç ¸Þ¼µåÀÔ´Ï´Ù. űװ¡ ¿©·¯°³¸é s = cstUtil.TagReplace( s, "xmp", "pre", "table", "tr", "td" ) ½ÄÀ¸·Î ¿©·¯°³ ½áµµ µË´Ï´Ù.
LinkURL, LinkEmail Àº ±Û ³»¿ëÁß¿¡ http://www.corebiz.co.kr , cassatt@hanmir.com ó·³ urlÀ̳ª ¸ÞÀÏÁÖ¼Ò¿¡
¸µÅ©¸¦ °É±â À§ÇØ ¸¸µç ¸Þ¼µåÀÔ´Ï´Ù. Nl2BrÀº PHP¿¡¼ µû¿Â À̸§Àä, ¸®ÅÏ Äڵ带 <br>·Î ¹Ù²Ù´Â ÀÛ¿ë( New Line to <BR> ) À» ÇÕ´Ï´Ù. ( ¾îµð¿¡ ¾²ÀÏÁö´Â ¾Æ½Ã°ÚÁÒ? )
ÀÌÁ¦ ±Û¾²±â - write.aspx, ½ÇÁ¦ ÆäÀÌÁö¸¦ ÀÛ¼ºÇÒ Â÷·ÊÀÔ´Ï´Ù.
write.aspx:
<%@ Page Language="C#" EnableSessionState="false" Debug="true" %>
<%@ Import Namespace="cstDB" %>
<%@ Register TagPrefix="cst" TagName="header" Src="pagelet/cstHeader.ascx" %>
<%@ Register TagPrefix="cst" TagName="footer" Src="pagelet/cstfooter.ascx" %>
<script runat=server language="C#">
void SubmitBtn_Click( Object src, EventArgs e ) {
if( Page.IsValid ) {
using( MessageBoard cmb=new MessageBoard("cstBoard") )
{
bool r=
cmb.AddMessage( txtWriter.Text,
txtEmail.Text,
txtTitle.Text,
txtPassword.Text,
rdoMode.SelectedIndex,
txtContent.Text );
}
}
Response.Redirect("list.aspx");
}
}
</script>
<html>
<head>
<title>°Ô½ÃÆÇ</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<meta name="Author" content="cassatt">
<link rel="stylesheet" type="text/css" href="stylesheets/cstBoard.css" >
<link rel="stylesheet" type="text/css" href="stylesheets/write.css" >
</head>
<body bgcolor="#ffe0e0">
<cst:header title="ÀÚÀ¯°Ô½ÃÆÇ" runat="server" />
<form id=writeForm runat="server" >
<table width=600 border=0 cellspacing=0 cellpadding=0 align=center>
<tr>
<td class="cwTitle" > ±Û¾²±â</td>
</tr>
</table>
<!-- main table start -->
<table width=600 border=0 cellspacing=0 cellpadding=4 align=center class="cwMainBox">
<tr>
<td class="cwName" nowrap>À̸§</td>
<td nowrap>
<asp:RequiredFieldValidator
id="txtWriterValidator"
runat="server"
ControlToValidate="txtWriter"
ErrorMessage="À̸§"
Display="Static"
Text="*" />
</td>
<td class="cwField" width=1000>
<ASP:TextBox
id=txtWriter
name=txtWriter
size=10 maxlength=10
class="cwTextBox"
style="width:200"
runat="server" />
</td>
</tr>
<tr>
<td class="cwName">¸ÞÀÏ</td>
<td nowrap>
<asp:RegularExpressionValidator
id="txtEmailValidator"
runat="server"
ControlToValidate="txtEmail"
ValidationExpression="^\s*\S+\@\S+\s*$"
ErrorMessage="¸ÞÀÏÁÖ¼Ò"
Display="Static"
Text="*" />
</td>
<td class="cwField">
<ASP:TextBox
id=txtEmail
name=txtEmail
size=10
class="cwTextBox"
style="width:200"
runat="server" />
</td>
</tr>
<tr>
<td class="cwName">Á¦¸ñ</td>
<td nowrap>
<asp:RequiredFieldValidator
id="txtTitleValidator"
runat="server"
ControlToValidate="txtTitle"
ErrorMessage="Á¦¸ñ"
Display="Static"
Text="*" />
</td>
<td class="cwField">
<ASP:TextBox
id=txtTitle
name=txtTitle
size=50
runat="server"
class="cwTextBox"
style="width:100%" />
</td>
</tr>
<tr>
<td class="cwName">³»¿ë</td>
<td nowrap> </td>
<td class="cwField">
<asp:TextBox
TextMode="multiline"
id=txtContent
class="cwTextBox"
rows=15 cols=50
runat="server"
style="width:100%; overflow:hidden;" />
</td>
</tr>
<tr>
<td class="cwName">Çü½Ä</td>
<td> </td>
<td class=cwField width=1000>
<asp:RadioButtonList
id="rdoMode"
RepeatLayout="flow"
RepeatDirection="Horizontal"
class="cwField"
runat="server">
<asp:ListItem>ÅØ½ºÆ®</asp:ListItem>
<asp:ListItem>HTML</asp:ListItem>
</asp:RadioButtonList>
</td>
</tr>
<tr>
<td class="cwName" nowrap>ºñ¹Ð¹øÈ£</td>
<td nowrap>
<asp:RequiredFieldValidator
id="txtPasswordValidator"
runat="server"
ControlToValidate="txtPassword"
ErrorMessage="ºñ¹Ð¹øÈ£"
Display="Static"
Text="*" />
</td>
<td class="cwField">
<asp:TextBox
TextMode="Password"
id=txtPassword
size=10 maxlength=10
class="cwTextBox"
style="width:200"
runat="server"/>
</td>
</tr>
<tr>
<td colspan=2> </td>
<td class="cwName">
<asp:ValidationSummary
id="valSummary"
HeaderText="<font color=darkred>´ÙÀ½À» Á¤È®È÷ ÀÔ·ÂÇØÁÖ¼¼¿ä</font> : "
DisplayMode="SingleParagraph"
runat="server"/>
</td>
</tr>
</table>
<table width=600 border=0 cellspacing=0 cellpadding=4 align=center>
<tr>
<td>
<input type=reset class="cwResetBtn" value="´Ù½Ã¾²±â" />
</td>
<td align=right>
<asp:Button
class="cwSubmitBtn"
Text="±Û ¾² ±â"
OnClick="SubmitBtn_Click"
runat="server" />
</td>
</tr>
</table>
<!-- main table end -->
</form>
<cst:footer runat="server" />
</body>
</html>
|
µðÀÚÀÎÀº ¸ðµÎ css ÆÄÀÏ·Î »©³õ¾Ò½À´Ï´Ù. /pagelet/Header.ascx ³ª /pagelet/Footer.ascx ´Â ´Ù¿î¹ÞÀº ¼Ò½º¸¦ ÂüÁ¶ÇϽñ⠹ٶø´Ï´Ù. ( º¸½Ã¸é ÀÌÇØ°¡ µÇ½Ç °Ì´Ï´Ù )
<form runat="server">
<ASP:TextBox
id=txtWriter
name=txtWriter
size=10
maxlength=10
class="cwTextBox"
style="width:200"
runat="server" />
...
</form>
|
¿ì¼±, ¼¹ö¿¡¼ ½ÇÇàµÇ´Â Æû( <form runat="server"> ) ÀÌ »ç¿ëµÇ°í¿ä, <input type=text > ´ë½Å À§Ã³·³, ASP:TextBox¶ó´Â ´Ù¸¥ À̸§ÀÇ ÄÁÆ®·ÑÀÌ ¾²À̰í ÀÖ½À´Ï´Ù. ¸¶Áö¸·¿¡ ºÙÀº runat="server" ¶ó´Â °ÍÀÌ ÀÌ Å±װ¡, ¼¹ö¿¡¼ ½ÇÇàµÈ´Ù´Â °ÍÀ» ¸»ÇØÁÖÁÒ.
ÀÌó·³, html ÅÂ±× ¿Ü¿¡µµ asp.net¿¡¼ Á¦°øÇÏ´Â ¼¹ö ÄÁÆ®·ÑµéÀÌ ¿©·µ Á¸ÀçÇÕ´Ï´Ù. °ÅÀÇ ¸ðµç html ÄÁÆ®·ÑÀº ´Ù¸¥ À̸§ÀÇ ¼¹ö ÄÁÆ®·Ñ µéÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
<input type="text"> -> <ASP:TextBox runat="server" />
<input type="password"> -> <ASP:TextBox TextMode="Password" runat="server"/>
<textarea></textarea> -> <ASP:TextBox TextMode="MultiLine" runat="server"/>
<input type="button"> -> <ASP:Button runat="server"/>
<input type="radio"> -> <ASP:RadioButton runat="server"/>
ȤÀº <ASP:RadioButtonList runat="server">...</ASP:RadioButtonList>
|
µî ÀÔ´Ï´Ù. À̰ÍÀº html ű×ÀÇ ´Ü¼ø ´ëü Á¤µµÀÔ´Ï´Ù¸¸, ¿©±â¿¡ ´õÇØ¼, ´Ù¾çÇÑ ¼¹ö ÄÁÆ®·Ñ µéÀÌ Á¸ÀçÇÕ´Ï´Ù.
* <form runat="server">¿¡¼ º¸µí, <input type="text" runat="server" /> ó·³ ´Ù¸¥ html Æû ÄÁÆ®·Ñµµ runat="server" ¸¸ ºÙ¿©Á൵ ¼¹ö ÄÁÆ®·ÑÀÌ µË´Ï´Ù. »ç¿ë¹ýÀÌ ¾à°£ ´Ù¸£°í¿ä( Text ´ë½Å Value°¡ »ç¿ëµÈ´Ù°Å³ª,...), Å« ÀåÁ¡À̳ª ´ÜÁ¡Àº ... ¾ÆÁ÷ Àß ¸ð¸£°Ú½À´Ï´Ù. -.-
* <ASP:TextBox runat="server" /> ¿©±â¼ űװ¡ /> ·Î ³¡³ª´Âµ¥¿ä, </ASP:TextBox> ½ÄÀ¸·Î, ´Ý´Â űװ¡ ¾øÀÌ Å±×ÇϳªÀ϶© ÀÌó·³ ²À /> ·Î ³¡³»¾ß ÇÕ´Ï´Ù. xml ÇüÅÂÀε¥, ¼¹ö ÄÁÆ®·ÑÀº ÀÌ ·êÀ» ÁöÄÑ¾ß ÇÕ´Ï´Ù.
|
¾Æ¹«Æ°, "¼¹ö" ÄÁÆ®·Ñ, ¿©±â¼ "¼¹ö"´Â ¹«¾ùÀ» ¶æÇÏ´Â °ÍÀΰ¡?
°£´ÜÈ÷ ¸»Çؼ, ¼¹ö¿¡¼ ½ÇÇàµÇ´Â ¼Ò½º¿¡¼ txtWriter.Text ó·³ ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀ» ±×³É °¡Á®¿Ã ¼öµµ ÀÖ°í,
<asp:Button ... OnClick="SubmitBtn_Click" runat="server" />
|
ÀÌó·³ ButtonÀ» Ŭ¸¯ÇßÀ»¶§( OnClick À̺¥Æ® ½Ã¿¡ ) ¼¹ö¿¡¼ ¹«½¼ ÀÏÀ» ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù´Â ¾ê±âÀÔ´Ï´Ù. ¼¹ö¿¡¼ ½ÇÇàµÇ´Ï±î¿ä.
»ç¿ëÇÏ´Â ÀÔÀå¿¡¼±, ¹öư Ŭ¸¯½Ã¿¡ (OnClick) ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀ¸·Î( txtWriter.Text ... ) ¹«¾ùÀ» ÇÏ¸é ±×¸¸ÀÔ´Ï´Ù. À§ ¼Ò½º°¡ º¹ÀâÇØ º¸ÀÏÁö ¸ô¶óµµ ÁÙ±â´Â °£´ÜÇÕ´Ï´Ù. ¹öư OnClick ½Ã¿¡ SubmitBtn_Click À̶õ ¸Þ¼µå ½ÇÇàÇϰí, ±× ¸Þ¼µå¿¡¼ ÇØ´ç ÄÁÆ®·Ñ °ªÀ¸·Î AddMessage¸¦ È£ÃâÇÏ´Â °ÍÀÌÁÒ. ¸¶Ä¡ javascript ¾²µí, ¼¹ö½ºÅ©¸³Æ®¸¦ ¾²°Ô µÈ °ÍÀÔ´Ï´Ù.
* ±×·¸´Ù ÇØµµ, Ŭ¶óÀ̾ðÆ®/¼¹ö°¡ µ¿½Ã¿¡ ½ÇÇàµÇ´Â °Ô ¾Æ´Ï¶ó´Â °Í, ¼¹ö¿¡¼ html ÆäÀÌÁö¸¦ ¸¸µé¾î¼ Ŭ¶óÀÌ¾ðÆ®·Î Àü¼ÛÇϰí, Ŭ¶óÀÌ¾ðÆ®¿¡¼ ÀÔ·Â¹Þ¾Æ ¼¹ö·Î Àü¼ÛµÇ´Â ·ÎÁ÷À» ÀÌÇØÇÒ Çʿ䰡 ÀÖ´Ù´Â »ý°¢ÀÌ µì´Ï´Ù.
Á¤¸»·Î javascriptó·³, OnClick Áï½Ã ¹«¾ùÀÌ ½ÇÇàµÇ°í, ÅØ½ºÆ® ¹Ú½º¿¡ ÀÔ·ÂµÈ °ªÀ» Á÷Á¢ °¡Á®¿À°í ÇÏ´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù.
½ÇÇàÇØ¼ ¼Ò½ºº¸±â ÇØº¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸, hidden Çʵ忡 ¿ø·¡ ÀÔ·ÂÇÑ °ªÀ» ÀÎÄÚµùÇØ¼ ÀúÀåÇϰí, ±× °ªÀ» ´Ù½Ã ¼¹ö·Î Àü¼ÛÇÏ´Â °ÍÀ» ¹Ýº¹ÇÏ´Â, ¾à°£ º¹ÀâÇÑ ·ÎÁ÷¿¡ ÀÇÇØ ÀÌ·ç¾îÁý´Ï´Ù. ÀÌ°É ¿ÏÀüÈ÷ Àذí ÄÚµùÇØµµ µÉ¸¸ÅÀÌ¸é »ó°ü¾ø°ÚÁö¸¸, ³ªÁß¿¡ Page.IsPostBack °°Àº ÇÁ·ÎÆÛƼ ÇÒ¶§ ¾îÂ÷ÇÇ ´Ù·ç°Ô µË´Ï´Ù.
°Ô½ÃÆÇ ´äº¯ÇÒ¶§, ASP¿¡¼ alert âÀ» ¸ø¶ç¿ì´Â°¡, ȤÀº ÀÚ¹Ù½ºÅ©¸³Æ® º¯¼ö¸¦ asp¿¡¼ ¸ø¾²´Â °¡ ÇÏ´Â Áú¹®À» ÀǿܷΠ¿©·¯¹ø º¸¾Ò½À´Ï´Ù. ±×¶§¸¶´Ù ASP´Â html/javascript ¸¸µå´Â ±â°è´Ù, ASP°¡ º¸±â¿¡ ÀÚ¹Ù½ºÅ©¸³Æ®´Â ±×Àú text ÀÏ »ÓÀÌ´Ù, ¶ó´Â ½ÄÀ¸·Î ´äÀ» Çß¾ú´Âµ¥¿ä, asp.net¿¡¼ ¸¶Ä¡ OnClick ½Ã¿¡ ¼¹ö½ºÅ©¸³Æ® ¸Þ¼µå°¡ ½ÇÇàµÇ´Â ½ÄÀ¸·Î µÇ¾î¼, Ãʺ¸ÀÚ´Â ´õ ÀÌÇØÇÏ±â ¾î·Æ°Ô µÈ °Í ¾Æ´Ñ°¡ ÇÏ´Â »ý°¢ÀÌ µå³×¿ä.
|
Form Validation - Æû À¯È¿¼º°Ë»ç
¼¹ö ÄÁÆ®·Ñ¿¡´Â ¿©·¯°¡Áö°¡ ÀÖ½À´Ï´Ù. ±×Áß¿¡, ±Û¾²±â¶õ¿¡¼, À¯¿ëÇÏ°Ô ¾²ÀÌ´Â °ÍÀÌ Validator ControlÀ̶ó´Â °ÍÀÔ´Ï´Ù.
<asp:RequiredFieldValidator
id="txtWriterValidator"
runat="server"
ControlToValidate="txtWriter"
ErrorMessage="À̸§"
Display="Static"
Text="*" />
|
RequiredFieldValidator ¶õ, ControlToValidate ¿¡¼ ÁöÁ¤ÇÑ id¿¡ ÇØ´çÇÏ´Â ÄÁÆ®·Ñ¿¡ °ªÀ» ³Ö¾ú´ÂÁö üũÇÏ´Â ÄÁÆ®·ÑÀÔ´Ï´Ù. ±Û¾²±â¶õ¿¡¼± À̸§, Á¦¸ñ, ºñ¹Ð¹øÈ£°¡ Çʼö »çÇ×À̱⠶§¹®¿¡ ÀÌ ÄÁÆ®·ÑÀ» »ç¿ëÇÏ°Ô µÇÁÒ.
¸¸¾à °ªÀ» ³ÖÁö¾Ê°í ¹öưÀ» ´©¸£¸é Text ¿¡ ÁöÁ¤ÇÑ ³»¿ë(À§¿¡¼ *)ÀÌ ±× À§Ä¡¿¡ Ãâ·ÂµË´Ï´Ù.
ErrorMessage´Â ³ªÁß¿¡ ¼³¸íÇÒ ValidationSummary À§Ä¡¿¡ Ãâ·ÂµÇ°Ô µË´Ï´Ù.
¾î´À Çʵ尡 Çʼö ÀÔ·ÂÇ׸ñÀ϶§, Àü¿£ submit ¹öư Ŭ¸¯½Ã ( º¸Åë form ű×ÀÇ onsubmit À̺¥Æ® ÀÌ¿ë ) ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼ ÀÔ·ÂÇß´ÂÁö üũÇß¾úÁÒ. ±× üũÇÏ´Â ·çƾÀ» asp.net¿¡¼± ¼¹öÄÁÆ®·Ñ·Î Á¦°øÇÏ´Â °Ì´Ï´Ù. ¾î´À Çʵ带 Çʼö ÀÔ·ÂÇϵµ·Ï Çϱâ À§Çؼ± À§Ã³·³, ÇÊ¿äÇÑ validator ÄÁÆ®·Ñ(À§¿¡¼ RequiredFieldValidator ) ¸¦ ¸¸µé¾îµÎ°í, ControlToValidate¿¡ ÇØ´ç ÄÁÆ®·ÑÀÇ id °ªÀ» ³Ö¾îÁÖ¸é ³¡ÀÔ´Ï´Ù. ( asp.net¿¡¼± name ´ë½Å id·Î ÄÁÆ®·ÑÀ» ±¸ºÐÇÕ´Ï´Ù )
ÀÌ ÄÁÆ®·ÑÀº Ŭ¶óÀÌ¾ðÆ® »Ó ¾Æ´Ï¶ó ¼¹ö¿¡¼µµ üũÇϱ⠶§¹®¿¡, Àüó·³ ¼¹ö ½ºÅ©¸³Æ®¿¡µµ °°Àº ³»¿ëÀ» ½áÁÙ Çʿ䰡 ¾ø½À´Ï´Ù. ( html Á÷Á¢ ¸¸µé¾î¼ submit ÇØµµ ¾ÈµÈ´Ù´Â ¾ê±âÀÔ´Ï´Ù )
±×¸®°í VS.netÀ» ¾´´Ù¸é ´Ü¼ø Drag-drop¸¸À¸·Îµµ 󸮰¡ µË´Ï´Ù.
<asp:RegularExpressionValidator
id="txtEmailValidator"
runat="server"
ControlToValidate="txtEmail"
ValidationExpression="^\s*\S+\@\S+\s*$"
ErrorMessage="¸ÞÀÏÁÖ¼Ò"
Display="Static"
Text="*" />
|
RegularExpressionValidator´Â Unix¿¡¼ ÀüÅëÀûÀ¸·Î ¾²¿´´ø, Á¤±Ô½Ä ( Regular Expression ) À» ÀÌ¿ëÇØ¼, ÄÁÆ®·ÑÀÇ ³»¿ëÀ» Á¦´ë·Î ÀÔ·ÂÇß´ÂÁö üũÇÏ´Â ÄÁÆ®·ÑÀÔ´Ï´Ù. »ç¿ë¹ýÀº RequiredFieldValidator¿Í °ÅÀÇ °°À¸¸ç, ValidationExpression¿¡ ÀÔ·Â ±ÔÄ¢(Á¤±Ô½Ä)À» ÁöÁ¤ÇÏ°Ô µË´Ï´Ù.
À§¿¡ ¾²ÀÎ °ÍÀº ¸ÞÀÏÁÖ¼Ò¿ë Á¤±Ô½ÄÀä,
^\s*\S+\@\S+\s*$ ÀÌ ¶æÀ» ¸»·Î ¼³¸íÇϸé,
¹®ÀÚ¿½ÃÀÛ(^) ÈÄ, °ø¹é(\s)ÀÌ 0°³ÀÌ»ó(*) ³ª¿À°í, °ø¹é¾Æ´Ñ±ÛÀÚ(\S)°¡ 1°³ ÀÌ»ó(+) ³ª¿À°í, @ (\@) ÀÌ ³ª¿À°í,
°ø¹é¾Æ´Ñ±ÛÀÚ(\S)°¡ 1°³ÀÌ»ó(+) ³ª¿À°í, °ø¹é±ÛÀÚ(\s)°¡ 0°³ À̻󳪿À°í ³¡³ª´Â($) ¹®ÀÚ¿
À» ¸»ÇÕ´Ï´Ù. ^^; ±×·¯´Ï±î, xx@xx, xx@xx.com x@x °°Àº °ÍÀº ¸Â°í, xx, xx@, @xx ´Â Ʋ¸®°Ô µË´Ï´Ù. Áß°£¿¡ @±âÈ£¸¸ ÀÖÀ¸¸é Á¤È®ÇÑ ¸ÞÀÏÁÖ¼Ò·Î °£ÁÖÇÏÁÒ.
Á¤±Ô½ÄÀº ÀÌó·³, ¹®ÀÚ¿ÀÌ ¾î¶²½ÄÀ¸·Î ±¸¼ºµÇ´Â°¡, ÇÏ´Â ±ÔÄ¢À» ³ªÅ¸³»´Â ½ÄÀä, ¿©±â¿¡´Â °£´ÜÈ÷ ¾²¿´½À´Ï´Ù¸¸, ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î ÀÀ¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡, °ÅÀÇ ¸ðµç ÇüÅ¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Ù ÇØµµ °ú¾ðÀÌ ¾Æ´Õ´Ï´Ù. ¿¹¸¦µé¾î,
- ÀüȹøÈ£ : 0\d{2,3}\-\d{2,4}\-\d{3,4}
- ÈÞ´ëÆù¹øÈ£ : 01[16789]\-\d{2,4}\-\d{3,4}
- Áֹεî·Ï¹øÈ£: \d{6}\-\d{7}
- domain : http\:\/\/[\w\-]+(\.\[\w\-]+)+
ÀÌ·± ½ÄÀ¸·Î, ÀÀ¿ëÇϱ⠳ª¸§ÀÌÁÒ.
¾Æ¸¶µµ RequiredFieldValidator ´ÙÀ½À¸·Î ¸¹ÀÌ ¾²ÀÌ°Ô µÉ Validator ÄÁÆ®·ÑÀÌ ¾Æ´Ò±î ÇÕ´Ï´Ù.
Á¤±Ô½ÄÀº ¾à°£ ¾î·ÆÁö¸¸, Àͼ÷ÇØÁö¸é Âü À¯¿ëÇÕ´Ï´Ù. ¿©±â »Ó ¾Æ´Ï¶ó, ¾Õ¿¡ cstUtil ¿¡¼ Àá½Ã º¸¾ÒÁö¸¸ ¹®ÀÚ¿ ó¸®ÇÒ¶§µµ ÀÚÁÖ ¾²ÀÌ°Ô µË´Ï´Ù.
* ¸ÞÀÏÁÖ¼Ò´Â Çʼö°¡ ¾Æ´Ï¶ó¼, RequiredFieldValiator¸¦ ¾²Áö ¾Ê¾Ò½À´Ï´Ù¸¸, ¸¸¾à ¸ÞÀÏÁÖ¼Òµµ Çʼö¶ó¸é, RequiredFieldValidator¸¦ Çϳª ´õ ½áÁÖ¸é µË´Ï´Ù. ¸ðµç Çʼö ÀÔ·Â ÄÁÆ®·Ñ¿¡´Â RequiredFieldValidator¸¦ ½áÁà¾ß ÇÕ´Ï´Ù.
|
À̿ܿ¡µµ, ¿©±â ´Ù·çÁö ¾Ê¾Ò½À´Ï´Ù¸¸, µÎ °ª ºñ±³ÇÒ¶§ ¾²ÀÌ´Â CompareValidator ´Â ºñ¹Ð¹øÈ£¿Í ºñ¹Ð¹øÈ£ È®ÀÎ °ª ºñ±³ÇÒ¶§ À¯¿ëÇÏ°Ô ¾²À̰í¿ä, RangeValidator ¸¦ ÀÌ¿ëÇØ¼ °ªÀÌ ÁöÁ¤ÇÑ ¹üÀ§ ³»ÀÎÁö üũÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, ±×¿Ü ³Ê¹«³ª(?) ƯÀÌÇÑ °ÍÀº CustomValidator·Î Á¤ÀÇÇØ¼ ÇÒ ¼ö ÀÖ½À´Ï´Ù. CustomValidator´Â ³ªÁß¿¡ ±ÛÁö¿ì±â(delete.aspx)¿¡¼ ´Ù·ç°Ú½À´Ï´Ù.
<asp:ValidationSummary
id="valSummary"
HeaderText="<font color=darkred>´ÙÀ½À» Á¤È®È÷ ÀÔ·ÂÇØÁÖ¼¼¿ä</font> : "
DisplayMode="SingleParagraph"
runat="server"/>
|
ValidationSummary´Â Validator ÄÁÆ®·Ñ·Î üũÇÑ ³»¿ëÀ» ÇѰ÷¿¡ ¸ñ·ÏÀ¸·Î Ãâ·ÂÇÒ¶§ ¾²ÀÔ´Ï´Ù.
¾Õ¿¡¼ º¸¾ÒÁö¸¸, <asp:RequiredFieldValidator ... ErrorMessage="¸ÞÀÏÁÖ¼Ò" Text="*" />
¿©±â¼ Text¿Í ErrorMessage°¡ ¾²¿´´Âµ¥¿ä, ÀÔ·ÂÇÑ ³»¿ë¿¡ À߸øÀÌ ÀÖÀ»¶§, Text´Â ÄÁÆ®·ÑÀÌ ÀÖ´Â ±× ÀÚ¸®¿¡ ÂïÈ÷°í, ErrorMessage´Â
ValidationSummary ÀÚ¸®¿¡ ¸ðµÎ ¸ð¿©¼(?) Ãâ·ÂµË´Ï´Ù. ShowMessageBox="true" ShowSummary="false" °ªÀ» ÁÖ¸é ȸ鿡 Ç¥½ÃÇÏ´Â ´ë½Å ¸Þ½ÃÁö ¹Ú½º·Î Ãâ·ÂÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
Validator ÄÁÆ®·Ñ µéÀº ½áº¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸, ¾ÆÁÖ °£ÆíÇÕ´Ï´Ù. ÀåÁ¡Àº ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ Çʿ䰡 ¾ø´Ù, Ŭ¶óÀÌ¾ðÆ® »Ó¾Æ´Ï¶ó ¼¹ö¿¡¼µµ üũÇϹǷΠȮ½ÇÇÏ´Ù, VS.NET ¾²¸é Drag-DropÀ¸·Î µÈ´Ù, ºê¶ó¿ìÀú°¡ ¹«¾ùÀÎÁö´Â ½Å°æ ¾È½áµµ µÈ´Ù´Â µîÀÌ µÇ°Ú½À´Ï´Ù.
´Ù¸¸, Á¦ »ý°¢¿¡ ¾à°£ÀÇ ´ÜÁ¡ÀÌ Àִµ¥¿ä,
ù¹øÂ°·Î, ³»¿ëÀ» üũÇÏ´Â °ÍÀÌ, IE 5 À̻󿡼´Â Ŭ¶óÀÌ¾ðÆ®¿¡¼µµ µÇÁö¸¸, ´Ù¸¥ ºê¶ó¿ìÀú¿¡¼´Â ¼¹ö¿¡¼¸¸ µË´Ï´Ù. Áï, ¹öư Ŭ¸¯ÇÏ¸é ¼¹ö±îÁö ÀÚ·á°¡ Àü¼ÛµÇ¾ú´Ù°¡, À߸øÀÌ ÀÖÀ¸¸é ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®·Î ÀçÀü¼Û µÇ¾î¾ß ÇÑ´Ù´Â °ÍÀÌÁÒ. ¸ðµ© ¾²´Â NN »ç¿ëÀÚ´Â Á» ±ÍÂúÀ»°Í °°½À´Ï´Ù. ¾îÂ÷ÇÇ javascript ¾µ°Å, NNÀ̳ª IE4¿¡¼µµ µÇ¾úÀ¸¸é ÁÁ°Ú³×¿ä.
±×¸®°í µÎ¹øÂ°·Î, À̰ÍÀÌ ¸Å¿ì È®À强 ÀÖ±â´Â Çѵ¥, Áֹεî·Ï¹øÈ£ °°Àº ƯÀÌÇÑ °Í ÇÏ·Á´Ï Á» ¾î·Æ´õ±º¿ä. (¾ÕÀÚ¸® µÞÀÚ¸®¸¦ ³ª´©¸é - ±ò²ûÇÑ ¹æ¹ýÀÌ Àß »ý°¢ÀÌ ¾È³³´Ï´Ù ) ½¬¿î ÇÑÆí, ƯÀÌÇÑ °Í ÇÏ·Á´Ï Á» ¾î·Æ´Ù´Â °Ì´Ï´Ù.
* ÀÌ°Í ¾²·Á¸é Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³Æ®°¡ À¥»çÀÌÆ®¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. /aspnet_client ¶õ Æú´õ¿¡ ÀúÀåµÇ¾î ÀÖ½À´Ï´Ù. ´å³Ý ±ò¸é ÀÚµ¿À¸·Î ¼³Ä¡µÇÁö¸¸, »õ·Î À¥»çÀÌÆ® ¸¸µé¸é ¼öµ¿À¸·Î ¼³Ä¡ÇØ¾ß ÇÕ´Ï´Ù. ±×·¯·Á¸é cmd »ó¿¡¼ aspnet_regiis -c ¸¦ ½ÇÇàÇϽðųª, ·çÆ® Æú´õ¿¡ ÀÖ´Â aspnet_client Æú´õ¸¦ ÇØ´ç »çÀÌÆ® ·çÆ®·Î º¹»çÇÏ½Ã¸é µÉ°Ì´Ï´Ù.
* ¿©±â¼´Â üũ ¾ÈÇÕ´Ï´Ù¸¸, <asp:TextBox TextMode="multiline" > Àΰæ¿ì, Áï html¿¡¼ <textarea></textarea>·Î Ç¥ÇöµÇ´Â °ÍÀ» RequiredFieldValidatorÀÌ¿ëÇØ¼ üũÇÏ·ÁÇϸé, üũ°¡ Àß ¾ÈµÉ°Ì´Ï´Ù. ÀÌ°Ç ´å³Ý beta 2ÀÇ ¹ö±×¶ó »ý°¢µÇ´Âµ¥¿ä, ±»ÀÌ ÇÏ¼Å¾ß ÇÒ »óȲÀ̸é, Á¦°æ¿ì
/aspnet_client/system_web/1_0_2914_16/WebUIValidation.js ¿¡¼ ValidatorTrim ÇÔ¼ö¸¦
function ValidatorTrim(s) {
return s.replace(/(^\s+)|(\s+$)/g,"");
}
ÀÌ·¸°Ô ¹Ù²ã¼ ÀÓ½Ã·Î ÇØ°áÇØ¼ ¾²´Ï Âü°íÇϼ¼¿ä.
|
ÀÌÁ¦ Validator ÄÁÆ®·Ñ·Î üũÇßÀ¸´Ï, ¹öư Ŭ¸¯½Ã ½ÇÇàµÉ Äڵ带 º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
<asp:Button
class="cwSubmitBtn"
Text="±Û ¾² ±â"
OnClick="SubmitBtn_Click"
runat="server" />
|
¿ì¼± asp:Button OnClick¿¡ ½ÇÇàµÉ ÇÔ¼ö À̸§(À§¿¡¼ SubmitBtn_Click)À» ÁÖ°í, ±× ÇÔ¼ö À̸§À¸·Î Äڵ带 ÀûÀ¸¸é µË´Ï´Ù. ÇÔ¼ö À̸§Àº ¾î¶² °ÍÀÌµç »ó°ü¾ø½À´Ï´Ù.
void SubmitBtn_Click( Object src, EventArgs e ) {
if( Page.IsValid ) {
using( MessageBoard cmb=new MessageBoard("cstBoard") )
{
bool r=
cmb.AddMessage( txtWriter.Text,
txtEmail.Text,
txtTitle.Text,
txtPassword.Text,
rdoMode.SelectedIndex,
txtContent.Text );
}
}
Response.Redirect("list.aspx");
}
}
|
Validator ÄÁÆ®·ÑÀº ¾Õ¼ Àá±ñ ¸»Çßµí, Ŭ¶óÀÌ¾ðÆ®¿¡¼ »Ó ¾Æ´Ï¶ó ¼¹ö¿¡¼µµ üũÇÕ´Ï´Ù. ¸¸¾à Ã¼Å©ÇØ¼ Á¦´ë·Î ÀÔ·ÂÇßÀ¸¸é Page.IsValid °¡ true °ªÀ» °®°Ô µË´Ï´Ù. À§ÀÇ if¹®Àº ±×·¯ÇÑ ÀǹÌÀÔ´Ï´Ù. Ã¼Å©ÇØ¼ °ªÀÌ Á¤È®ÇÒ ¶§¸¸ (Áï, À̸§,Á¦¸ñ, ºñ¹Ð¹øÈ£ ¸ðµÎ ÀÔ·ÂÇϰí, ¸ÞÀÏÁÖ¼Ò¸¦ ÀÔ·ÂÇÑ °æ¿ì, °ªÀÌ Á¤È®Çß´Ù¸é ) ±ÛÀ» DB¿¡ ÀúÀåÇÏ´Â °ÍÀÌÁÒ.
usingÀº °ÁÂ4¿¡¼ Àá½Ã ¼³¸íÇß½À´Ï´Ù¸¸, {} ºí·°À» ºüÁ®³ª°¥¶§ using ¾È¿¡¼ »ý¼ºÇÑ °³Ã¼ ( À§¿¡¼ cmb ) ÀÇ Dispose() ¸Þ¼µå¸¦ ÀÚµ¿À¸·Î È£ÃâÇØÁÝ´Ï´Ù. MessageBoardÀÇ »óÀ§ °³Ã¼ÀÎ DBConnectedObject¿¡ Á¤ÀǵǾî ÀÖµí, À̰æ¿ì¿£ DB ConnectionÀ» Close() ÇÏ°Ô µË´Ï´Ù.
±×¿Ü¿¡´Â ¼¹öÄÁÆ®·Ñ °ªÀ¸·Î ¾Õ¿¡¼ Á¤ÀÇÇÑ MessageBoard.AddMessage ¸Þ¼µå¸¦ È£ÃâÇÏ´Â °Í ¹Û¿¡ ¾ø½À´Ï´Ù. rdoMode.SelectedIndex ´Â, ¼³¸í ¾ÈÇÏ°í ³Ñ¾î°¬½À´Ï´Ù¸¸( ^^; )¼Ò½º¿¡¼ RadioButtonList °¡ ¾²¿´´Âµ¥¿ä, ±× ÄÁÆ®·ÑÀº ¶óµð¿À¹öưÀ» ±×·ìÁö¾î »ç¿ëÇÒ¶§ ¾²´Âµ¥, ¼Ó¼ºÁß SelectedIndex´Â ¸î¹øÂ°°¡ ¼±ÅõǾú´ÂÁö¸¦ ³ªÅ¸³À´Ï´Ù. javascript¿¡¼ select ¹Ú½º ¾²´Â °Í°ú ºñ½ÁÇÑ ¹æ½ÄÀÔ´Ï´Ù.
±×¸®°í AddMessage È£Ãâ ÈÄ, Response.Redirect·Î ¾ÕÀ¸·Î ¸¸µé°Ô µÉ list.aspx ·Î À̵¿ÇÕ´Ï´Ù.
¿ì¼±Àº ÀÌ·¸°Ô ¸¸µé¾î ½ÇÇàÇØ¼, Query Analyser¿¡¼ È®ÀÎÇßÀ»¶§ Å×ÀÌºí¿¡ °ªÀÌ µé¾î°¡ ÀÖÀ¸¸é ¼º°øÀÔ´Ï´Ù.
ÀÌ write.aspx´Â ¼Ò½º¸¦ ¾à°£ ¹Ù²ã¼, ±Û ¼öÁ¤¿¡µµ »ç¿ëÇÏ°Ô µË´Ï´Ù. ±× ³»¿ëÀº ´ÙÀ½¿¡ Çϵµ·Ï ÇϰڽÀ´Ï´Ù.
Á¦°¡ ¼³¸íÀ» ÀßÇϰí ÀÖ³ª ¸ð¸£°Ú³×¿ä.
ÆäÀÌÁöÀÇ ·ÎÁ÷À» ´Ù½ÃÇѹø ¿ä¾àÇØº¸ÁÒ.
- <asp:TextBox ... runat="server">, <asp:RadioButtonList ... runat="server"> µîÀÇ ¼¹öÄÁÆ®·ÑÀ» ÀÌ¿ëÇØ¼ ³»¿ëÀ» ÀԷ¹޴µ¥,
- <asp:RequiredFieldValidator ... runat="server">, <asp:RegularExpressionValidator ... runat="server"> µîÀÇ Validator ÄÁÆ®·ÑÀ» ÀÌ¿ëÇØ¼ ³»¿ëÀ» Á¤È®È÷ ÀÔ·ÂÇß´ÂÁö üũÇÕ´Ï´Ù.
- ÀÔ·ÂµÈ ³»¿ëÀÌ ¸ðµÎ Á¤È®Çϸé Page.IsValid°¡ true°¡ µË´Ï´Ù.
- ÀÔ·ÂµÈ ³»¿ëÀÌ Á¤È®ÇÏÁö ¾ÊÀ¸¸é ÇØ´ç Validator ÄÁÆ®·Ñ À§Ä¡¿£ ±× ÄÁÆ®·ÑÀÇ Text°ªÀÌ ³ª¿À°í, <asp:ValidationSummary ... runat="server"> ÄÁÆ®·Ñ À§Ä¡¿¡ ErrorMessage °ªÀÌ ¸ð¿©¼ Ãâ·ÂµË´Ï´Ù.
- <asp:Button ... runat="server"> ÀÇ OnClick À̺¥Æ®¸¦ Á¤ÀÇÇØ¼, ¹öư Ŭ¸¯½Ã, SubmitBtn_ClickÀ̶õ ¸Þ¼µå¸¦ È£ÃâÇϵµ·ÏÇÕ´Ï´Ù.
- SumitBtn_Click ÇÔ¼ö¿¡¼± ¿ì¼± ÀÔ·ÂÇÑ ³»¿ëÀÌ Á¤È®ÇÑÁö È®ÀÎÇØ¼(Page.IsValid°¡ trueÀÎÁö È®ÀÎ) Á¤È®ÇÏ¸é µ¥ÀÌÅ͸¦ ÀúÀåÇÑ ÈÄ ±Û ¸ñ·ÏÆäÀÌÁö(list.aspx) ·Î À̵¿ÇÕ´Ï´Ù.
À̹ø °Á¿¡¼ Á¦°¡ Áß¿äÇÏ°Ô »ý°¢ÇÏ´Â ºÎºÐÀº,
- Äõ¸®¹® ½ÇÇà½Ã Parameter °ª ¼³Á¤Çϱâ
- ¼¹öÄÁÆ®·Ñ, ƯÈ÷ Validator ÄÁÆ®·Ñ »ç¿ëÇϱâ
- asp:ButtonÀÇ OnClickÀ¸·Î À̺¥Æ® Á¤ÀÇÇϱâ
- Page.IsValid
µîÀÌ µÇ°Ú½À´Ï´Ù.
ÀÌ·¸°Ô ¸¸µé¾î¼, css¸¦ Àû¿ëÇϸé ȸéÀÌ ´ÙÀ½°ú °°½À´Ï´Ù. ¾Æ¹« ³»¿ëµµ ÀԷ¾ÈÇϰí "±Û¾²±â" ¹öư Ŭ¸¯ÇÑ È¸éÀä, À̸§, Á¦¸ñ, ºñ¹Ð¹øÈ£°¡ Çʼö¶ó¼ ¿·¿¡ »¡°£»ö º°Ç¥(ValidatorÄÁÆ®·ÑÀÇ Text¿¡ ÁöÁ¤ÇÑ ³»¿ë)°¡ Ç¥½ÃµÇ¾î ÀÖ½À´Ï´Ù. ±×¸®°í ValidationSummary À§Ä¡¿¡ ¿¡·¯ ³»¿ë(ValidatorÄÁÆ®·ÑÀÇ ErrorMessage)ÀÌ Á¤¸®µÇ¾î Ãâ·ÂµË´Ï´Ù.
´ÙÀ½¿£ ±Û¸ñ·Ï º¸¿©ÁÖ´Â ºÎºÐ( list.aspx)À» ÇϰڽÀ´Ï´Ù.
Back
|