2008. 9. 9. 00:00

방법...1..

<script Language='javascript'>
function reSize() {
        try{
        var objBody = ifrm.document.body;
        var objFrame = document.all["ifrm"];
        ifrmHeight = objBody.scrollHeight + (objBody.offsetHeight - objBody.clientHeight);
       
        if (ifrmHeight > 300) {
                objFrame.style.height = ifrmHeight
        }else{
                objFrame.style.height = 300;
        }
        objFrame.style.width = '100%'
        }catch(e){}
}
function init_iframe() {
        reSize();
        setTimeout('init_iframe()',200)
}
init_iframe();
</script><iframe id='ifrm' src="보여질페이지주소" width="가로크기" height="세로크기" frameborder=0 marginheight=0 marginwidth=0></iframe>


방법2.

<script>
function doResize()
{
container.height = myframe.document.body.scrollHeight;
container.width = myframe.document.body.scrollWidth;
}
</script>
<table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td id="container"><iframe src="your_file.html" name="myframe" width="100%" height="100%" marginwidth="0" marginheight="0" frameborder="no" onload="doResize()"></iframe></td>
  </tr>
</table>





Posted by ToTb
2008. 9. 5. 23:48
<!--StartFragment-->
<script language="javascript">
    function Resize_Frame(name) {
         try {  
           var oBody  = document.frames(name).document.body;
           var oFrame  = document.all(name);
           tempWidth = oBody.offsetWidth-oBody.clientWidth;
           oFrame.style.width = oBody.scrollWidth + tempWidth;
           tempHeight = oBody.offsetHeight - oBody.clientHeight;
           oFrame.style.height = oBody.scrollHeight + tempHeight;
           if (oFrame.style.height == "0px" || oFrame.style.width == "0px") {
                oFrame.style.width = "570px";
                oFrame.style.height = "500px";
                window.status = 'iframe resizing fail.';
           } else {
                window.status = '';
           }
          }  catch(e) {
               window.status = 'Error: ' + e.number + '; ' + e.description;
               //window.status = 'No-IFrame';
          }
     }
 </script>

<iframe omload="Resize_Frame('idBoard')" width=570 height=300 valign=top frameborder=0 src="t_board_org_admin.jsp?listID=jungbo15" name="idBoard" id=idBoard></iframe>

위와 같이 하면 된다. 단, iframe에 들어갈 페이지가 현재 iframe을 포함하고 있는 페이지와 서로 다른 머신이나 웹서버에 존재하면...엑세스가 거부되 작동이 되질 않는다...

이럴때는 어쩔 수 없이 iframe에 들어갈 페이지에 아래와 같은 스크립트를 넣어야하지만, 문제가 많다.

일단 페이지를 수정할 수 있어야하고 그 페이지가 다른 사이트에서 하나의 페이지로 존재한다면 그 페이지를 호출하면 스스로 사이징이 되버리기 때문이다...

<script language="javascript">
     function resizeSelf() {
          self.resizeTo(document.body.scrollWidth , document.body.scrollHeight + 10);
     }
</script> 
<body leftmargin="0" topmargin="0" omLoad="resizeSelf();"> 

Posted by ToTb
2008. 9. 5. 23:46

<head> 와 </head> 사이에 넣어주셔야합니다.

<script language='JavaScript' SRC='다운 받은 js파일 경로'></script>
<script language='JavaScript'>
  MakeShortCut("Think Outside The Box", "사이트 주소", "아이콘 주소");
</script>

js파일을 열어서 적당히 수정해 주세요




Posted by ToTb
2008. 9. 5. 23:42
웹 기획자가 겪게되는 곤란하고 황당한 경우가 여러가지 있지요. 특히도 개발자와 디자이너, 컨텐츠 담당자와의 관계에서 충분히 생길만한, 아니 여러 번 겪었을 법한 상황을 나름대로 한번 정리해 보았습니다.

 Best 5. 간혹 누구를 위한 사이트 인지를 망각한다. (컨텐츠, 디자이너)

사이트를 개발하기 위해서는 같은 페이지를 수십번도 더 보게 되고 그러다 보면 어디에 어떤 버튼이 있고, 그것이 어떤식으로 연결이 되는지 눈감고도 알게 된다. 그러다 보면 프로젝트 중기쯤 네비게이션의 불편함에 대해서 말하기가 어려워진다.

이유는 뻔하다..^^ 무엇이 불편하냐는 것이다. 그들의 말은.. 눈감고도 훤히 아는데 왜 남들이 모르고, 왜 불편하겠냐는 것이다.. ㅡ.ㅡ  억지로 여러가지 이유를 들어 설득 시킨다면.. 과연 끝일까?...
또 다른 네비게이션상의 문제점이 나타난다.. 이런과정을 몇번씩 되풀이 하다보면..  결국 화를 낸다...
왜? "이만큼 양보했으면 됐지 또 뭘 양보하란 말야?" 어처구니가 없다. 홈페이지를 개발하기 위해서 전문가들이 모인 자리에서 왠 양보란 말인가?

특히 특정 분야에 전문지식을 가지고 있는 컨텐츠 담당자의 경우에는 컨텐츠의 내용이 난해하다는 지적에도 결코 물러서지 않는다. 이정도는 기본적인 내용이고 아주 쉽게 풀어썼다는 이유로….

 Best 4. 나를 설득(이해) 시키려고 한다.(컨텐츠, 프로그래머)

메뉴명이나 컨텐츠 제목이 난해할 경우, 너무 딱딱하고 온라인과는 맞지 않는 표현에 대해서 지적을 한다고 해 보자. 난 대부분의 인터넷 이용자들이 그러한 메뉴나 기사를 보면서 이게 무엇을 말하고자 하는지 쉽게 알아채지 못할것이라는 것을 전달하기 위해서 지적을 한것이다. 그런데 컨텐츠 담당자는 친절하게도 나에게 아주 자세히 설명을 해 준다. 가끔은 입가에 비웃음을 머금은채……

이 메뉴의 의미가 무엇이고, 이 기사의 제목에 씌여있는 이 용어는 이런저런 분야에서 사용되는 전문용어라고….. 그래 좋다. 어쨌든 난 이런 과정을 통해서 새로운 지식 하나 얻었다.
그럼 그 담당자는 도대체 그와 같은 설명을 몇 명에게 해야 할 것인가?

 3. 웹을 일종의 예술품으로 아는 사람,
 구색만 갖추면 된다고 생각하는 사람(컨텐츠, 디자이너)


오른쪽 하단에 A로 가는 버튼을 달아주고, 위쪽과 아래쪽에 이런 저런 링크를 걸어 주는 것이 훨씬 좋지 않겠는가? 라는 주문을 할 때 간혹.

"그렇게 되면 구성이 영 맞지 않는다. 너무 지저분해 지고, 산만해 진다. 꼭 필요한 거냐? 왠만하면 빼자, 그게 뭐 그리 중요하겠냐?" 라는 다자이너가 있는가 하면


"뭐하러 또 그런 버튼을 달아주냐, A페이지로 가는 버튼이라면 여기도 있다."라는 컨텐츠 담당자가 있어서 "여기"라는 곳을 보면… ㅎㅎㅎㅎ 정말 일부러 숨길라고 해도 힘들겠다 싶을 정도로 저 구석에 쳐박힌 링크를 하나 걸어놓고 아주 만족해 하는 경우가 너무도 많다.

 Best 2. 할일만 확실히 정리해 달라
 입에 넣기 좋게 다 갖추어 달라고 한다.(디자이너, 프로그래머)


사이트의 개발과 운영은 기획자만의 몫은 결코 아니다. 기획자와 프로그래머와 디자이너와 컨텐츠 담당자, 그리고 비즈니스 담당자, 임원들과 사장님까지 모두가 사이트의 목적과 목표, 컨셉, 방향성 등에 대한 공유가 이루어져야 하는 작업이다.

간혹 각 파트 담당자들을 모아놓고 지금까지 진행되어온 과정에 대해서 침을 튀기면서 열심히 설명하고, 질문에 답하고, 생각 못했던 부분을 지적하면 깨지고, 난해한 질문에 머리굴려 가며 대답하고 나면 이렇게 말한다.

"알겠습니다. 잘 들었습니다. 그럼 오늘 회의때 나왔던 내용을 더 정리하고 나서 내가 할 일을 확실히 결정해서 주세요." 막 화가 난다. 그럼 지들은 여태껏 뭐했고, 앞으로도 뭐하겠다는 거야? 내가 왜 공들여서 이런 자리를 만들었나.

좋다. 참자 참아, 힘없는 내가 참자. 하지만 두번다시 같은 실수를 범하지 말자. 하는 맘에 이제부터는 각개격파를 다짐하고 각 파트에서 해야 할 내용을 정리해서 담당자들에게 보내준다. 그럼 그들은 아주 열심히 일한다……. ?????

천만에. 그때부턴 정말 힘든 싸움이 시작된다.

누구 맘대로 한마디 상의도 없이 이렇게 하기로 했나? 응?
흐흐흐…..

 Best 1. 말도 안돼는 황당한 소리로 치부해 버린다.(프로그래머)

가장 많이 겪는 경우인거 같다. 특히 프로그램에 대해서 어느정도 기본지식이 없는 경우에는 정말 프로그래머에게 깨지는 기획자들을 많이 보아왔다.

그들은 간혹 내가 조언을 해주면 눈물겨워 하기 까지도 한다. (참고로 난 프로그램도 좀 공부를 했기에 그나마 이런 사람들보다는 좀 낮다.)

열심히 고민하고 기획서를 작성해 가면 너무 어렵다. 구현 불가능이다. 할 수는 있지만 시간이 많이 걸린다. 이렇게 하려면 솔루션을 구입해야 하는 데 가격이 아마 수천만원은 될꺼~얼~요?


'Website 세상 > Web Planning' 카테고리의 다른 글

웹에도 인간적인 요소가 필요하다  (0) 2008.09.09
웹 카피 쓰는 10가지 스타일  (0) 2008.09.09
Posted by ToTb
2008. 9. 5. 23:38
자주 사용되는 윈도우 명령어로
WinNT폴더(윈9x는 Window폴더)에 위치하며 시작메뉴-실행 명령으로 바로 실행되는 유용한 명령어입니다.

msconfig
(시작프로그램 제어등 많은기능 제공)
단, 윈2000은 지원 안함->
윈2000용 msconfig 다운받기
regedit(레지스트리 편집기)

sfc
(시스템 파일 검사및 복원)
단, 윈2000은 cmd - sfc 혹은 sfc /scannow
-윈2000의 경우 시디를 넣었음에도 불구하고 시디인식이 제대로 안될때 리부팅후 다시 해본다. 파일복구미지수
-위 방법보다는 윈2000시디부팅 후 설치화면상의 콘솔복구방법을 강추천한다.

winipcfg
(인터넷에 접속된 자신의 아이피 주소를 보여줌)
단, 윈2000은 ipconfig로 변경됨

dxdiag
(다이렉트X진단도구 및 그래픽과 사운드의 세부정보를 보여줌)

sysedit
(autoexec.bat , config.sys ,win.ini, system.ini  시스템구성편집기)

command
(도스명령프롬프트 실행)
윈2000은 cmd도 가능

telnet open 사이트주소
(텔넷접속명령어)

netstat -na
(현재 열린포트와 TCP/IP 프로토콜정보를 보여줌)
-열린포트로 트라이목마형 바이러스 침투 유무확인가능

systray
(사운드 볼륨설정 노란색 스피커 아이콘을 트라이목록에 띄움)

ping 사이트주소
(핑테스트 해당 사이트의 인터넷연결 유무 확인)

=윈2000&윈xp=
taskmgr.exe 또는 shift+ctrl+esc : 작업관리자 열기단축키
gpedit.msc : 로컬 컴퓨터 정책 ㅡ 관리템플릿[바탕화면, 작업표시줄및 시작메뉴, 제어판, 시스템등 사용자가 기능을 제어할 수 있다.
lusrmgr.msc : 로컬 사용자 및 그룹
compmgmt.msc : 컴퓨터 관리
devmgmt.msc : 장치관리자
diskmgmt.msc : 디스크 관리
dfrg.msc : 디스크 조각모음
eventvwr.msc : 이벤트 뷰어
fsmgmt.msc : 공유폴더
perfmon.msc : 성능모니터뷰
rsop.msc : 정책의 결과와 집합
secpol.msc : 로컬 보안설정
services.msc : 서비스

Posted by ToTb
2008. 9. 5. 23:37

작업환경 :
        OS = 한글windows2000 server
        DB = MS-SQL2000
        개발에디터 = Ultra Editor, Notepad (노트패드는 소스화일을 저장시 utf-8로 저장하기 위해 필요함)
        mail = sendmail, 기본smtp

1. 유니코드로 작성한다.
    -소스상단에 넣어야 할 것
        <% session.codepage = 65001 %>
        <% Response.CharSet = "utf-8" %>
    -html 부분과 중국어폰트적용
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    -화일을 저장시 노트패드 등을 이용하여 utf-8로 저장함

2. DB 작업
    -중국어가 들어가는 필드(문자열)를 nvarchar로 설정
    -소스 : 유니코드의 값부분에 N을 넣어준다. (insert, select, uodate, delete 동일)
        <%
            insert into tblName (title) value (N'&variable&')
        %>

3. window2000 설정
     -제어판->국가별옵션에서
        --사용자로케일을 중국어(RPC)로 설정(본토인경우)
        --시스템언어설정을 중국(간체)로 설정하고 기본값으로 설정
        --시간부분의 오전,오후를 중국어표기로 변경(그래야 now()함수를 사용시 중국시간표기로 나옴 2002-02-12 오전 10:00에서 오전자가 중국어로 나온다는 말)
        --시스템언어설정이 중국어로 되더라도 윈도우환경이 메뉴등은 한글로 표기되나... 폴더명, 화일명 등의 한국어는 깨지며 소스화일의 한국어가 ㅁ ? 등으로 표기됨, 중국어는 제대로 보임 즉, 한국어와 중국어가 바뀌는 현상발생함.

4.asp페이지와 페이지사이의 quertstring에서 중국어가 안 넘어가는 경우 해결법
    -server.urlencode을 이용하여 넘겨주면 해결
    -소스예
            <a class='MIME' href="page1.asp?param1=<%=server.urlencode("변수명")%>">클릭하세요</a> 여기서 변수명의 실제값이 중국어이다.

5.asp페이지의 스크립트부분에서 변수에 중국어를 넣을 때 에러나는 경우 해결법
    -소스상단에 <% session.codepage = 65001 %> 대신에 <%@ CODEPAGE = 65001 %>을 넣어줌.

6.abcupload, dextupload 등을 이용하여 폼을 넘길 경우 해결법
    -소스예
    <%
        set UploadForm = server.CreateObject("ABCUpload4.XForm") 'abs일 경우
        'Set uploadForm = Server.CreateObject("DEXT.FileUpload") 'dext일 경우
        UploadForm.CodePage = 65001
     %>

7.이메일발송시 중국어 깨지는 것 해결
    -소스예
    <%
        objMail.SetLocaleIDs(936) '로케일설정을 936(중국)으로 설정하며
        body =  "<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>" '보내는 바디부분에
        '이페이지 상단은 session.codepage = 65001 로 타페이지와 같음
    %>

8. now()사용시 오전/오후 한글로 표기되는 경우(한글OS에서 중국으로 셋팅하여 사용하는 경우)
 session.LCID=2052

9.
queryString으로 받았는데 중국어가 깨지는 경우가 있으면...
자바로 된 실시간 쪽지에서 유저애플릿으로 쪽지내용을 보내주고 이를 쿼리스트링으로 넘겨서 받는 사람에게 실시간으로 보여줄 때 중국어, 한국어 등등 모두 가능하게 해야 되기에 이런 방법을 써봤습니다.

<script language="JavaScript">
    strMsg = window.location.search.split("msg=");
    displayMsg = strMsg[1].replace(/%20/gi," "); //  /%20/gi 패턴정규식으로 space를 " "로 바꿔줍니다.
    document.writeln("      <iframe src='./paper_receive_iner.asp?msg="+String(displayMsg)+"' width='280' height='100'     frameborder='0' marginwidth='0' marginheight='0' style='border:none;background-color:#f5f5f5'>");
    document.writeln("      </iframe>");
</script>


Posted by ToTb
2008. 9. 5. 23:34
 

General syntax

ASP Comments, inline
'my dog has fleas
PHP Comments, inline
//my dog has fleas
ASP Comments, block

not available?
PHP Comments, block
/*
  The quick brown fox
  jumped over the lazy dogs.
*/
ASP, Escaping quotes
""

"var text1=""<img src=\""blank.gif\"">"";"
PHP, Escaping quotes
\" or use ' like javascript

'var text1="<img src=\"blank.gif\">";';
ASP Command termination
None, but only one command per line.
PHP Command termination
Each command must end with ; but
multiple commands per line are allowed.
ASP Screen output
response.write "hello"
PHP Screen output
echo "hello";
ASP Newline characters
vbCrLf

response.write "hello" & vbCrLf
PHP Newline characters
"\n" (must be inside "", not '')

echo "hello \n";
ASP Variable Names
Not case sensitive,
so fName is the same as FNAME
PHP Variable Names
Case sensitive AND must begin with $
so $fName is NOT the same as $FNAME

String Functions

ASP String concatenation
&

fname=name1 & " " & name2
emsg=emsg & "error!"
PHP String concatenation
. and .=

$fname=$name1." ".$name2;
$emsg.="error!";
ASP, Change case
LCase(), UCase()

lowerName=LCase(chatName)
upperName=UCase(chatName)
PHP, Change case
strtolower(), strtoupper()

$lowerName=strtolower($chatName);
$upperName=strtoupper($chatName);
ASP String length
Len()

n=Len(chatName)
PHP String length
strlen()

$n=strlen($chatName);
ASP, Trim whitespace
Trim()

temp=Trim(xpage)
PHP, Trim whitespace
trim() and also ltrim(), rtrim()

$temp=trim($xpage);
ASP String sections
Left(), Right(), Mid()

Left("abcdef",3)      result = "abc"
Right("abcdef",2)     result = "ef"
Mid("abcdef",3)       result = "cdef"
Mid("abcdef",2,4)     result = "bcde"
PHP String sections
substr()

substr("abcdef",0,3);     result = "abc"
substr("abcdef",-2);      result = "ef"
substr("abcdef",2);       result = "cdef"
substr("abcdef",1,4);     result = "bcde"
ASP String search forward, reverse
Instr(), InstrRev()

x=Instr("abcdef","de")        x=4 
x=InstrRev("alabama","a")     x=7
PHP String search forward, reverse
strpos(), strrpos()

$x=strpos("abcdef","de");      x=3
$x=strrpos("alabama","a");     x=6
ASP String replace
Replace(string exp,search,replace)

temp=Replace(temp,"orange","apple")
temp=Replace(temp,"'","\'")
temp=Replace(temp,"""","\""")
PHP String replace
str_replace(search,replace,string exp)

$temp=str_replace("orange","apple",$temp); $temp=str_replace("'","\\'",$temp);
$temp=str_replace("\"","\\\"",$temp);
ASP, split a string into an array
Split()

temp="cows,horses,chickens"
farm=Split(temp,",",-1,1)  
x=farm(0)
PHP, split a string into an array
explode()

$temp="cows,horses,chickens";
$farm=explode(",",$temp);
$x=$farm[0];
ASP, convert ASCII to String
x=Chr(65) x="A"
PHP, convert ASCII to String
$x=chr(65); x="A"
ASP, convert String to ASCII
x=Asc("A") x=65
PHP, convert String to ASCII
$x=ord("A") x=65

Control Structures

ASP, if statements
if x=100 then
  x=x+5 
elseif x<200 then 
  x=x+2 
else 
  x=x+1 
end if
PHP, if statements
if ($x==100) { 
  $x=$x+5; 
} 
else if ($x<200) { 
  $x=$x+2; 
} 
else { 
  $x++; 
}
ASP, for loops
for x=0 to 100 step 2 
  if x>p then exit for
next
PHP, for loops
for ($x=0; $x<=100; $x+=2) { 
  if ($x>$p) {break;}
}
ASP, while loops
do while x<100 
  x=x+1 
  if x>p then exit do
loop
PHP, while loops
while ($x<100) { 
  $x++; 
  if ($x>$p) {break;}
}
ASP, branching
select case chartName
  case "TopSales"
    theTitle="Best Sellers"
    theClass="S"
  case "TopSingles"
    theTitle="Singles Chart"
    theClass="S"
  case "TopAlbums"
    theTitle="Album Chart"
    theClass="A"
  case else
    theTitle="Not Found"
end select
PHP, branching
switch ($chartName) {
  case "TopSales":
    $theTitle="Best Sellers"; $theClass="S";
    break;
  case "TopSingles":
    $theTitle="Singles Chart"; $theClass="S";
    break;
  case "TopAlbums":
    $theTitle="Album Chart"; $theClass="A";
    break;
  default:
    $theTitle="Not Found";
}
ASP functions
Function myFunction(x)
  myFunction = x*16  'Return value
End Function
PHP functions
function myFunction($x) {
  return $x*16;  //Return value
}

HTTP Environment

ASP, Server variables
Request.ServerVariables("SERVER_NAME")
Request.ServerVariables("SCRIPT_NAME")
Request.ServerVariables("HTTP_USER_AGENT")
Request.ServerVariables("REMOTE_ADDR")
Request.ServerVariables("HTTP_REFERER")
PHP, Server variables
$_SERVER["HTTP_HOST"];
$_SERVER["PHP_SELF"];
$_SERVER["HTTP_USER_AGENT"];
$_SERVER["REMOTE_ADDR"];
@$_SERVER["HTTP_REFERER"];     @ = ignore errors
ASP Page redirects
Response.redirect("wrong_link.htm")
PHP Page redirects
header("Location: wrong_link.htm");
ASP, GET and POST variables
Request.QueryString("chat")
Request.Form("username")
PHP, GET and POST variables
@$_GET["chat"];       @ = ignore errors
@$_POST["username"];
ASP, prevent page caching
Response.CacheControl="no-cache"
Response.AddHeader "pragma","no-cache"
PHP, prevent page caching
header("Cache-Control: no-store, no-cache");
header("Pragma: no-cache");
ASP, Limit script execution time, in seconds
Server.ScriptTimeout(240)
PHP, Limit script execution time, in seconds
set_time_limit(240);
ASP, Timing script execution
s_t=timer 

...ASP script to be timed...

duration=timer-s_t
response.write duration &" seconds"
PHP, Timing script execution
$s_t=microtime();

...PHP script to be timed...
  
$duration=microtime_diff($s_t,microtime());
$duration=sprintf("%0.3f",$duration);
echo $duration." seconds";
  
//required function
function microtime_diff($a,$b) {
  list($a_dec,$a_sec)=explode(" ",$a);
  list($b_dec,$b_sec)=explode(" ",$b);
  return $b_sec-$a_sec+$b_dec-$a_dec;
}

File System Functions

ASP, create a file system object (second line is wrapped)
'Required for all file system functions
fileObj=Server.CreateObject
 ("Scripting.FileSystemObject")
PHP, create a file system object
Not necessary in PHP
ASP, check if a file exists
pFile="data.txt"
fileObj.FileExists(Server.MapPath(pFile))
PHP, check if a file exists
$pFile="data.txt";
file_exists($pFile);
ASP, Read a text file
pFile="data.txt"
xPage=fileObj.GetFile(Server.MapPath(pFile))
xSize=xPage.Size  'Get size of file in bytes

xPage=fileObj.OpenTextFile(Server.MapPath(pFile))
temp=xPage.Read(xSize)  'Read file
linkPage.Close
PHP, Read a text file
$pFile="data.txt";
$temp=file_get_contents($pFile);  //Read file

Time and Date Functions

ASP, Server Time or Date
Now, Date, Time
PHP, Server Time or Date
date()
ASP, Date format (default)
Now = 3/19/2007 8:13:10 AM
Date = 3/19/2007
Time = 8:13:10 AM

Various ASP functions extract date parts:

Month(Date) = 3
MonthName(Month(Date)) = March
Day(Date) = 19
WeekdayName(Weekday(Date)) = Monday
WeekdayName(Weekday(Date),False) = Mon
PHP, Date format
There is no default format in PHP.
The date() function is formatted using codes:

date("n/j/Y g:i:s A") = 3/19/2007 8:13:10 AM

date("n") = 3
date("F") = March
date("j") = 19
date("l") = Monday
date("D") = Mon

Numeric Functions

ASP, convert decimal to integer
Int()

n=Int(x)
PHP, convert decimal to integer
floor()

$n=floor($x);
ASP, determine if a value is numeric
IsNumeric()

if IsNumeric(n) then ...
PHP, determine if a value is numeric
is_numeric()

if (is_numeric($num)) {...}
ASP, modulus function
x mod y
PHP, modulus function
$x % $
Posted by ToTb
2008. 9. 5. 23:33

※설명 : 보통 smtp 로 메일 발송 코딩을 할때 상대방이 메일을 열어봤는지 체크해야할 경우가 있다. 그럴경우 아래와 같이 이미지 태그를 활용해 리턴값을 받아 메일 수신 여부를 확인할 수 있다.

// 메일 본문에 추가할 태그
<IMG SRC="MailOpen.asp?Email=받는사람메일주소&MailCode=메일코드" border="0" height="1" width="1">

// MailOpen.asp
<%
    Email =  Left(trim(request.querystring("Email")),50)
    MailCode = Left(trim(request.querystring("mailCode")),12)
    SQL =  "INSERT INTO MailOpen (MailCode, Email, OpenDate) VALUES ('" & MailCode & "','" & Email & "',getdate())"
    '디비연결 Dbcon 인스턴스 생성
    Dbcon.execute SQL
    '디비해제
%>

Posted by ToTb
2008. 9. 5. 23:32

javascript의 window.print()는 인쇄창(프린터 선택하는 화면)을 여는 기능외에 다른 커스터마이징이 불가능합니다.  인쇄를 하지 않고, 창을 닫았을 때, 처리 방법이 있으면 좋은데..
activeX로 해야할 것 같습니다. activeX로는 scriptX를 이용해 볼만 한데... advanced 기능은 유료로 구매한 경우에만 가능해서 그렇게 추천할 수는 없군요..
다만, scriptX의 기본 기능(무료)중에, 인쇄창을 열었는데... 고객이 인쇄를 하지 않고, 인쇄창을 닫아버리면 return value로 false를 돌려주는 기능이 있습니다. 페이지에서 인쇄창을 열고, 만약 return값이 false면 "인쇄안함"으로 다시 처리하고, true이면 "인쇄됨" 처리하면 100%는 아니지만, 근접한 결과를 얻을 수 있을 것입니다. (각종 프린터 오류가 있어 프린트가 안된 경우는 print에서 결과값을 return 받아야 하는데.. 그러려면, 유료기능을 사용해야 할 듯합니다)

아래에서는  printresult.asp?result=0(실패시) printresult.asp?result=1(성공시)로 처리했는데, 이를 통한 db 작업은 잘 알아서 하시면 되겠습니다..  참고로 scriptx의 기본기능(무료)를 이용하면 프린트 결과물의 header footer 위/아래/좌/우 여백 가로/세로출력 등을 설정할 수 있습니다.

참고 소스는
<OBJECT id="factory" style="DISPLAY: none"
   codeBase="http://www.meadroid.com/scriptx/smsx.cab#Version=6,2,433,14"
   classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext>
   </OBJECT>
<script>
function printPage(){
 factory.printing.header = "";   //머릿말 설정
 factory.printing.footer = "";    //꼬릿말 설정
 factory.printing.portrait = true;  //출력방향 설정: true-가로, false-세로
 factory.printing.leftMargin = 1.0;  //왼쪽 여백 설정
 factory.printing.topMargin = 1.0;  //위쪽 여백 설정
 factory.printing.rightMargin = 1.0;  //오른쪽 여백 설정
 factory.printing.bottomMargin = 1.0;  //아래쪽 여백 설정
 a = factory.printing.Print(true);   //출력하기
 if (!a) {
 window.location.href="printresult.asp?result=0" // 인쇄없이 닫은 경우 처리url  get방식
 }
 else {
 window.location.href="printresult.asp?result=1" // 인쇄한 경우 처리url  get방식
 }

 }
</script>
<body onload="printPage();">
인쇄할 내용
</body>


Posted by ToTb
2008. 9. 5. 23:31
일본어 사이트를 만들어 본 일이 있다. utf-8로 만들면 된다는 힌트를 듣고, 아주 많은 시도를 했다. 그런데.. 제대로된 정보를 얻을 수 없었고, 제대로 만들지도 못했다.
짜증나길래... 일본어 os에 일본어 sql을 깔아서 shift-jis로 서버를 돌리고 말았다. ^^;;
그때의 어려움을 다른 사람들이 겪지 않기를 바라면서.. 내가 가진 힌트들을 정리해 본다.

1. asp 페이지를 만든다.
2. 문자셋을 유니코드 utf-8로 변환한다.
3. 일단 아무내용도 없는 상태에서 저장한다.
4. 페이지 맨윗 줄에 <% @language='vbscript' codepage = '65001' %> 삽입.
5. head에 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 삽입
6. DB설정 char은 nchar로 varchar은 nvarchar로.. 문자형태의 형식은 모두 n이 붙은 형식으로 세팅.
7. SQL구문은 insert into testTable ( subject ) values ( N'" & subject &"' ) 처럼 값의 앞뒤를 작은따옴표로 감싸고 그 앞에 N을 붙여서 값을 INSERT한다. UPDATE로 마찬가지다. 주의할 점은 대문자 N이라는 것!
8. 이제 제대로 한 것 확인후 UTF-8로 세팅된 것 확인하면서 저장! 끝!

점검사항
가. INCLUDE되는 파일도 모두 형식이 UTF-8로 저장되어 있어야 한다. (다만, 그 INCLUDE되는 파일에  <% @language='vbscript' codepage = '65001' %> 을 붙이면 안되겠죠?)
나. .CSS나 .JS 파일 처럼 별도로 작성되어 이 페이지로 불러들여지는 파일들도 마찬가지로 모두 UTF-8로 저장되어 있어야 한다.

DB연동결과 글자가 깨진다면, 먼저... 변수 RESPONSE.WRITE를 이용하여 전달이 제대로 되는지 확인하고, 이상이 없다면 DB확인하면 된다. 이때는 6번과 7번만 확인하면 된다. 만약 변수값이 깨지고 있다면, 2,4,5번과 점검사항의 가/나를 확인해보기 바란다.

주의
utf-8이 아닌 기존 파일을 변환하여 utf-8로 만드는 경우는 주의가 필요하다. 영문은 문제없지만... 한글이 깨지는 경우가 있다. 한글이 깨지고 말면 그나마 다행인데... 때에 따라서는 알 수 없는 특수코드가 붙어버려 에러가 발생하기도 한다.

편집기의 문제라고 생각되는데... 한 두번 정상적으로 잘 되는지 테스트하고 처리하라.. 잘못하면 원본을 날리는 경우가 있다...

팁!
일본어 사이트를 만든 경우, 제대로 출력되고 있는지 확인하는 가장 쉬운 방법은  "ㅡ"(장음표시기호) 글자를 체크해 보는 것이다. 잘못된 경우라면 이 글자가 100% 깨진다. 

Posted by ToTb