srboard 1.0 에서 뭔가 많이 수정했습니다.

1 - - 우선 index.php 1373줄 + 86400 을 - 86400으로 수정 // 오류수정 한게 하나있고,,

2 - - exe.php 173줄 부근에 있던
if($_POST[x] > 0) $x = "^".$_POST[x];
else if($_GET[x] > 0) $x = "^".$_GET[x];
else $x = '';
이 세줄을 15줄로 옮김

3 - - index.php에 data함수를 없애고
if($x > 0) $idd = $id."^".$x;
else $idd = $id;
이 두줄로 교체

4 - - 분화한 이전게시물에서 트랙백주소받는거 원활히 되도록 여기저기 수정.

5 - - 분화하기 전에 공지사항이 있었을때,
공지삭제는 관리자기능 - 게시판관리에서만 가능한데, ( 번호^ 형식의 추가삭제 )
거기서 분화한 이전 게시물을 공지로 등록할수는 없습니다.
에러납니다.

6 - - 덧글칸 엔터누르면 높이 늘어나는거 - ie에만 적용되도록 수정+ iframe 높이도 자동으로 늘어나도록 수정
---FF에서는 덧글칸높이는 늘어나는데, 창자체 높이가 그대로여서, 안보이게 되기 때문에...

7 - - 전체최근게시물에서.. 스킨에 $simg 노출시킴.. : 수정해서 활용할때 쓰라고..

등등....
+ 스킨도 두어군데 바뀌었습니다. 변수이름하고,, 내용
앞으로는 스킨의 골조(?)가 바뀌게 되면 어디가 어떻게 바뀌었는지
먼저꺼하고 비교해서, 설명하겠지만
이번엔 밤사이에 다운로드해서, 수정해서 사용하는 분 없으리라고보고....
그냥 넘어가겠습니다.

압축풀어 계정에 업로드하고, data폴더의 권한을 777주고,
admin.php 접속해서 관리자회원가입을 합니다(첫번째 가입자를 관리자로 인식합니다.)
그리고 index.php 접속해서 사용합니다.
by Anna 안나 2008. 5. 26. 17:22
기존의 게시판을 대폭개량해서,
srboard라고 이름을 붙였습니다.

기존의 게시판하고 데이타호환은 안됩니다.
변환가능하도록 하는 소스파일을 조만간 올리도록 하겠습니다.

기존의 게시판이 가졌던 기능을 그대로 가지고 있고,
기존의 게시판에서 이런 저런 기능상 에러를 수정했습니다.

크게 바뀐것은, 스킨-자체스킨-을 따로 뺐다는 것.
그리고 덧글을 iframe으로 출력되도록 한 것.

스킨을 따로 뺀만큼,
기존에 관리자기능-게시판관리에서 각 게시판의 항목넓이를 규정해주도록 한 것을 삭제했습니다.
색상설정등도 삭제했습니다.

스킨은 스킨이름.php 파일과 스킨이름.css 파일로 구성되도록 했습니다.
html파일에다가 치환자를 넣어서,
파일을 읽어다가 치환자를 다시 php변수로 바꾸고 하는게 일반적인 처리방법 같던데,,
복잡할거 같애서 그냥 php파일로 했습니다.

압축풀어 계정에 업로드하고, data폴더의 권한을 777주고,
admin.php 접속해서 관리자회원가입을 합니다(첫번째 가입자를 관리자로 인식합니다.)
그리고 index.php 접속해서 사용합니다.
by Anna 안나 2008. 5. 26. 17:21
압축풀면 blog.php 파일이 나옵니다.
예제에 보여지는 것과 같습니다.

게시판 왼쪽에 이런저런 사항들 출력합니다.
관리자화면 - 맨밑에 인클루드 위쪽에 - 추가해서 쓰도록 만들었습니다.
압축풀고 저장경로는 index.php, exe.php 와 같은 곳에 둡니다.

달력이 가끔 안나오길래, 좀 더 확실하게 -- 수정했습니다.
방문자목록 링크 달렸고..
..
by Anna 안나 2008. 5. 26. 17:20
압축풀면 blog.php 파일이 나옵니다.
예제에 보여지는 것과 같습니다.

게시판 왼쪽에 이런저런 사항들 출력합니다.
관리자화면 - 맨밑에 인클루드 위쪽에 - 추가해서 쓰도록 만들었습니다.
압축풀고 저장경로는 index.php, exe.php 와 같은 곳에 둡니다.
by Anna 안나 2008. 5. 26. 17:20
압축풀면 blog.php 파일이 나옵니다.
예제에 보여지는 것과 같습니다.

게시판 왼쪽에 이런저런 사항들 출력합니다.
관리자화면 - 맨밑에 인클루드 위쪽에 - 추가해서 쓰도록 만들었습니다.
압축풀고 저장경로는 index.php, exe.php 와 같은 곳에 둡니다.
by Anna 안나 2008. 5. 26. 17:20
압축풀면 blog.php 파일이 나옵니다.

------ 수정사항 -----------
달력에서 날짜를 클릭했을때, 달력에 클릭한 날짜 표시되도록 했습니다.
달력에서 날짜링크를 자바스크립트로 바꿨습니다.(숫자 클릭하기가 힘들길래)

태그와 월별목록은 높이조절이 됩니다.
다른 항목은 정해진 갯수만 출력하기 때문에, 많아져도 상관없지만,
이 두개는 있는만큼 다 출력하기 때문에,
항목이름을 클릭하면 늘었다, 줄었다하도록 했습니다.



예제에서 보여지는 것과 같습니다.
게시판에 이런저런 사항들 외부출력하는 것이고,,
달력은 그 부분을 iframe으로 불러들였습니다.
달이 바뀌어도, 처리가 간단해지기 때문에(?)

달력에는 오늘날짜하고, 게시물 올라온 날짜가 표시됩니다.
클릭하면 본문형으로 뜨게 했습니다.. 바로 내용 볼수 있도록..

태그도 링크를 본문형으로 뜨게 했는데,
본문읽기 권한이 없는 경우엔, 리스트로 뜹니다.

아카이브-월별목록은 그냥 목록으로 뜹니다.

덧글목록은 당연히 본문인데,
스크롤이 그 덧글위치는 못찾아갑니다.

최근글목록은.. 사실 있으나 마나인데,.
하여튼 본문으로 연결되고,
만약 rss리더형 게시판이고, 본문읽기 권한이 없으면
rss의 원래주소로 링크됩니다.=게시판 목록에서처럼.

게시판목록을 클릭했을때,
만약 카테고리가 있으면 아래쪽으로 출력됩니다.

게시판목록외에 나머지는 게시판으로 들어왔을때 출력됩니다.
달력도 전체최근게시물에서 출력되는 것은 그냥 오늘 날짜만 표시하고,,
글이 올라온 날짜는 표시하지 않습니다.
id가 주어진 다음에... 표시합니다.


디자인 허접한데,, 하여튼..
뭐 알아서 수정해서 쓰시라고 올립니다.
관리자화면에서 맨밑에서 외부파일인클루드에 추가시키면 됩니다.
현재는 위쪽에 인클루드하도록 되어있는데,

수정해서 아래쪽에서 인클루드해도 됩니다.

뭐.. 하여튼.. 게시판의 이런저런 사항을,
이런식으로 외부출력할수 있다는 예제정도로 생각하시면 됩니다.

-- 각 항목의 위치는..
(전체)게시판목록을 맨위로 해야하고,
-그때 게시판의 이런저런 사항들을 변수에 담기 때문에-
나머지의 순서는 딱히 없습니다.

by Anna 안나 2008. 5. 26. 17:19
압축풀면 blog.php 파일이 나옵니다.

예제에서 보여지는 것과 같습니다.
게시판에 이런저런 사항들 외부출력하는 것이고,,
달력은 그 부분을 iframe으로 불러들였습니다.
달이 바뀌어도, 처리가 간단해지기 때문에(?)

달력에는 오늘날짜하고, 게시물 올라온 날짜가 표시됩니다.
클릭하면 본문형으로 뜨게 했습니다.. 바로 내용 볼수 있도록..

태그도 링크를 본문형으로 뜨게 했는데,
본문읽기 권한이 없는 경우엔, 리스트로 뜹니다.

아카이브-월별목록은 그냥 목록으로 뜹니다.

덧글목록은 당연히 본문인데,
스크롤이 그 덧글위치는 못찾아갑니다.

최근글목록은.. 사실 있으나 마나인데,.
하여튼 본문으로 연결되고,
만약 rss리더형 게시판이고, 본문읽기 권한이 없으면
rss의 원래주소로 링크됩니다.=게시판 목록에서처럼.

게시판목록을 클릭했을때,
만약 카테고리가 있으면 아래쪽으로 출력됩니다.

게시판목록외에 나머지는 게시판으로 들어왔을때 출력됩니다.
달력도 전체최근게시물에서 출력되는 것은 그냥 오늘 날짜만 표시하고,,
글이 올라온 날짜는 표시하지 않습니다.
id가 주어진 다음에... 표시합니다.


디자인 허접한데,, 하여튼..
뭐 알아서 수정해서 쓰시라고 올립니다.
관리자화면에서 맨밑에서 외부파일인클루드에 추가시키면 됩니다.
현재는 위쪽에 인클루드하도록 되어있는데,

수정해서 아래쪽에서 인클루드해도 됩니다.

뭐.. 하여튼.. 게시판의 이런저런 사항을,
이런식으로 외부출력할수 있다는 예제정도로 생각하시면 됩니다.

-- 각 항목의 위치는..
(전체)게시판목록을 맨위로 해야하고,
-그때 게시판의 이런저런 사항들을 변수에 담기 때문에-
나머지의 순서는 딱히 없습니다.
by Anna 안나 2008. 5. 26. 17:18
http://www.stemplate.com/
http://levitated.net/daily/index.html
http://www.freedigitalphotos.net/gallery.php?gid=141
http://www.webtoolkit.info/javascript-pie-menu.html
http://www.flashmenufactory.com/FlashMenuFactory/index.asp

http://psdtuts.com/tutorials-effects/creating-a-stunning-digital-smoke-effect/

http://www.freeiconsdownload.com/Free_Art_Icons.asp
http://www.freelayouts.com/
http://www.avivadirectory.com/color/
http://www.newwebpick.com/_issue/



080706
http://www.designlog.org/category/그래픽%20강좌/포토샵
http://www.dynamicdrive.com/dynamicindex17/ajaxtabscontent/ http://www.smashingmagazine.com/2008/01/08/100-excellent-free-high-quality-wordpress-themeshttp://www.dynamicdrive.com/style/csslibrary/category/C7/
by Anna 안나 2008. 5. 23. 19:30
arrangefile_2.zip
uploadmulti.zip


포털(네이버 까페) 스타일의 무제한 멀티 업로드를 제로보드에 적용하는 방법입니다.

샘플은... 이곳에 적용되어있으니 글쓰기하시면 보실수 있습니다.


설치도 쉽고 설정도 쉽고, 강추하는 팁입니다.


설치법

1. 제로보드의 write_ok.php 에서

// MySQL 닫기 를 찾아 그 윗줄에 아래 소스를 넣어줍니다.

if ($setup[use_pds] ==1 ) {
$upload_dir = "./data/".$id."/";
if (!is_dir("$upload_dir")) {
@mkdir($upload_dir,0777);
}
include "upload_write_ok.php";
}


2. 제로보드의 delete_ok.php 에서

// 파일삭제
@z_unlink("./".$s_data[file_name1]);
@z_unlink("./".$s_data[file_name2]);

위와 같은 부분을 찾아 그 아랫줄에 아래 소스를 넣어줍니다.

if ($setup[use_pds] ==1 ) {
$upload_dir = "./data/".$id."/";
if (is_dir("$upload_dir")) {
include "upload_delete_ok.php";
}
}


3. 제로보드의 list_all.php 에서


// 파일삭제
@z_unlink("./".$s_data[file_name1]);
@z_unlink("./".$s_data[file_name2]);

위와 같은 부분을 찾아 그 아랫줄에 아래 소스를 넣어줍니다.



$upload_dir = "./data/".$id."/";
if (is_dir("$upload_dir")) {
$no = $selected[$i];
include "upload_delete_ok.php";
}


그리고나서...조금 밑에..


// Comment 정리

를 찾아서 그 윗줄에 아래 내용은 넣어줍니다.


//멀티 업로드로 업로드된화일 복사
$upload_dir = "./data/".$id."/";
if (is_dir("$upload_dir")) {
$file_list=array();
$rep=@opendir($upload_dir);
while ($file = readdir($rep)) {
if($file != '..' && $file !='.' && $file !=''){
$file_temp = explode("^",$file);
if (($file_temp[0] == round(filesize($upload_dir.$file)/1024+0.5)) && $file_temp[1] == $data[no])
{
$file_list[]=$file;
}
}
}
if (sizeof($file_list) > 0)
{
$new_upload_dir = "./data/".$board_name."/";
if (!is_dir("$new_upload_dir")) {
@mkdir($new_upload_dir,0777);
}
for($i=0;$i<count($file_list);$i++)
{
$imsi_file=explode("^",$file_list[$i]);
$new_file = $imsi_file[0]."^".$no."^".$imsi_file[2]."^".$imsi_file[3];
copy($upload_dir.$file_list[$i],$new_upload_dir.$new_file);
}
}
}
//


4. 스킨의 view.php 에서

업로드 된 이미지나 화일들이 표시되길 원하는 곳에 다음과 같이 한줄 넣어줍니다.
(저 같은 경우엔 $memo 가 나오는 줄 아랫줄에 넣어주었습니다. 물론 html 구조에 유의하며 <td> 와 </td> 사이에 넣었죠. .^^)

<?include "upload_skin_view.php";?>


5. 스킨의 write.php 에서


현재의 스킨구조에 잘 어울리게 업로드필드가 있는 한줄을 복제하여 추가합니다.

샘플:
<tr>
<td>파일 첨부 1</td>
<td><input type=file name=file1 ...생략....></td>
</tr>

그리고... 복제한 한줄에 왼쪽의 td 에는 원하시는 타이틀 (저는 '파일 첨부') 라고 쓰시고
오른쪽의 td 에 <?include "upload_skin_write.php";?> 라고 input 태그 대신에 넣어주시면 됩니다.

샘플:
<tr>
<td valign=middle width="70" align="right" style="padding-right:10;" class=8pt>
파일 첨부
</td>
<td>
<?include "upload_skin_write.php";?>
</td>
</tr>

기존의 스킨 구조가 사용자 마다 다르기때문에 딱! 이거다 라고 말씀드릴순 없지만, 설명을 잘 이해하시고 적절한 위치에 삽입하여 주십시오.

결론은.. input 태그대신 <?include "upload_skin_write.php";?> 를 넣으시면 된다는겁니다.


그리고 글쓰기창 하단에 글작성버튼옆에 나오는 취소 (또는 목록으로) 버튼 의 링크를 아래처럼 바꾸어줍니다.

<a href="upload_cancel.php?id=<?=$id?>" onfocus=this.blur();>이미지 또는 텍스트</a>

(아마 원래는 history.back(); 이나 window.history.go(-1); 로 되어있을겁니다.)


6. 이제 제가 업로드한 화일을 다운받아서 압축을 푸십니다.

7. upload_conf.php 화일을 여셔서 상단에 설정할수 있는 부분을 알맞게 설정하여 주십시오.

8. 설정후 저장하시고 image 폴더를 포함해서 모두 제로보드 폴더에 넣어줍니다.


추신: 화일들의 이름을 보시면 아시겠지만, upload_skin_write.php 에서는 글쓰기 보여지는 부분을, upload_skin_view.php 에서는 글내용 보기에서 표시되는 부분이 들어있으니... 겉모습을 수정하고 싶으시면 그 화일들을 적절히 수정하여 주세요 ^^.



추가: 관리자 페이지에서 첨부화일 정리를 눌러서 쓰레기 화일 정리를 누르면... 올라간 화일들이 다 사라집니다... 첨부된 arrangefile2.zip 을 받아서 admin 폴더에 압축 풀어넣어주세요.


이상입니다 ^^
by Anna 안나 2008. 5. 23. 18:55
new_multi_upload.zip

많은분들이 좋아하시며... 제맘에도 쏙드는.. 무제한 업로드 팁이 살짝 업그레이드 되었습니다...

첨부화일에 설명을 달수 있게 해달라고 요청하시는분들이 워낙 많으셔서리...(개인적으로 저는... 별로 상관없다고 생각했었는데 말이죠... ㅋㅋ)

기존과 같은 기능에.. 업로드되는 화일에 설명을 달수 있게 수정되었습니다...

일단 이곳에는 적용되어있구요....

음.. 설치법도 기존과 동일하고.. 인클루드하는 화일들만 약간 달라진거라.. 이미 쓰고 계신분들이라도 쉽게 업데이트 하실수 있습니다....



처음 설치하는 분들을 위한 설치법

1. 제로보드의 write_ok.php 에서

// MySQL 닫기 를 찾아 그 윗줄에 아래 소스를 넣어줍니다.

if ($setup[use_pds] ==1 ) {
$upload_dir = "./data/".$id."/";
if (!is_dir("$upload_dir")) {
@mkdir($upload_dir,0777);
}
include "upload_write_ok.php";
}







2. 제로보드의 delete_ok.php 에서

// 파일삭제
@z_unlink("./".$s_data[file_name1]);
@z_unlink("./".$s_data[file_name2]);

위와 같은 부분을 찾아 그 아랫줄에 아래 소스를 넣어줍니다.


$upload_dir = "./data/".$id."/";
if (is_dir("$upload_dir")) {
include "upload_delete_ok.php";
}









3. 제로보드의 list_all.php 에서


// 파일삭제
@z_unlink("./".$s_data[file_name1]);
@z_unlink("./".$s_data[file_name2]);

위와 같은 부분을 찾아 그 아랫줄에 아래 소스를 넣어줍니다.



$upload_dir = "./data/".$id."/";
if (is_dir("$upload_dir")) {
$no = $selected[$i];
include "upload_delete_ok.php";
}


그리고나서...조금 밑에..


// Comment 정리

를 찾아서 그 윗줄에 아래 내용을 모두 넣어줍니다.


//멀티 업로드로 업로드된화일 복사
$upload_dir = "./data/".$id."/";
if (is_dir("$upload_dir")) {
$file_list=array();
$rep=opendir($upload_dir);
while ($file = readdir($rep)) {
if($file != '..' && $file !='.' && $file !=''){
$file_temp = explode("^",$file);
if (($file_temp[0] == round(filesize($upload_dir.$file)/1024+0.5)) && $file_temp[1] == $data[no])
{
$file_list[]=$file;
}
if (substr($file,-4) == ".txt" && file_exists(substr($upload_dir.$file,0,-4))) {
$file_list[]=$file;
}
}
}
if (sizeof($file_list) > 0)
{
$new_upload_dir = "./data/".$board_name."/";
if (!is_dir("$new_upload_dir")) {
@mkdir($new_upload_dir,0777);
}
for($i=0;$i<count($file_list);$i++)
{
$imsi_file=explode("^",$file_list[$i]);
$new_file = $imsi_file[0]."^".$no."^".$imsi_file[2]."^".$imsi_file[3];
copy($upload_dir.$file_list[$i],$new_upload_dir.$new_file);
if (file_exists($upload_dir.$file_list[$i].".txt")) {
copy($upload_dir.$file_list[$i].".txt",$new_upload_dir.$new_file.".txt");
}
}
}
}
//










4. 스킨의 view.php 에서

업로드 된 이미지나 화일들이 표시되길 원하는 곳에 다음과 같이 한줄 넣어줍니다.
(저 같은 경우엔 $memo 가 나오는 줄 아랫줄에 넣어주었습니다. 물론 html 구조에 유의하며 <td> 와 </td> 사이에 넣었죠. .^^)

<?include "upload_skin_view.php";?>









5. 스킨의 write.php 에서


현재의 스킨구조에 잘 어울리게 업로드필드가 있는 한줄을 복제하여 추가합니다.

샘플:
<tr>
<td>파일 첨부 1</td>
<td><input type=file name=file1 ...생략....></td>
</tr>

그리고... 복제한 한줄에 왼쪽의 td 에는 원하시는 타이틀 (저는 '파일 첨부') 라고 쓰시고
오른쪽의 td 에 <?include "upload_skin_write.php";?> 라고 input 태그 대신에 넣어주시면 됩니다.

샘플:
<tr>
<td valign=middle width="70" align="right" style="padding-right:10;" class=8pt>
파일 첨부
</td>
<td>
<?include "upload_skin_write.php";?>
</td>
</tr>

기존의 스킨 구조가 사용자 마다 다르기때문에 딱! 이거다 라고 말씀드릴순 없지만, 설명을 잘 이해하시고 적절한 위치에 삽입하여 주십시오.

결론은.. input 태그대신 <?include "upload_skin_write.php";?> 를 넣으시면 된다는겁니다.


그리고 글쓰기창 하단에 글작성버튼옆에 나오는 취소 (또는 목록으로) 버튼 의 링크를 아래처럼 바꾸어줍니다.

<a href="upload_cancel.php?id=<?=$id?>" onfocus=this.blur();>이미지 또는 텍스트</a>

(아마 원래는 history.back(); 이나 window.history.go(-1); 로 되어있을겁니다.)






6. 이전 팁인 "깔끔한 무제한 멀티 업로드 !!! 강추 ^^" 의 첨부파일을
다운로드 하셔서 압축을 푸십니다.








7. upload_conf.php 화일을 여셔서 상단에 설정할수 있는 부분을 알맞게 설정하여 주십시오.






8. 설정후 저장하시고 image 폴더를 포함해서 모두 제로보드 폴더에 넣어줍니다.







9. 그리고 이 글에 첨부되어있는 화일들을 받으셔서 방금 업로드 하신곳에 업로드 해주십니다... 덮어씌우시라는 말씀이죠... 이때 arrangefile2.php 는 admin 폴더에 넣으시고 upload_conf.php 는 덮어씌우실 필요 없습니다.








업뎃하시는 분들을 위한 설치법...


list_all.php 의 내용을 위의 설명처럼 바꿔주시구요...

업로드한 화일들로 다시 제로보드 폴더에 있는 화일들을 다 덮어 씌우시면 땡~ 입니다.

이때 arrangefile2.php 는 admin 폴더에 넣으시고 upload_conf.php 는 덮어씌우실 필요 없습니다.



추신: 화일들의 이름을 보시면 아시겠지만, upload_skin_write.php 에서는 글쓰기 보여지는 부분을, upload_skin_view.php 에서는 글내용 보기에서 표시되는 부분이 들어있으니... 겉모습을 수정하고 싶으시면 그 화일들을 적절히 수정하여 주세요 ^^.



추가: 아무 처리 없이 관리자 페이지에서 첨부화일 정리를 실행후 쓰레기 화일 정리를 실행하시면... 올라간 화일들이 다 사라집니다... 첨부된 arrangefile2.php 를 admin 폴더에 꼭 넣어주세요.. !!!!!!!!!!!!!!!

그게 귀찮으시면.. 첨부화일 정리 기능을 절대로!!
실행하지 마십시오...ㅋㅋㅋ


p.s: 2005년 9월 30일 금요일 4시 42분 55초 이전에 받으셨던분들은..
다시한번 화일을 덮어씌우시고 list_all.php 의 내용도 확인 바랍니다... 수정되었습니다..

충분한 테스팅이 없엇더니.. 좀 구린부분이 있었네요..^^

'웹스터디 > php' 카테고리의 다른 글

php 연산자  (0) 2008.12.26
설치형 게시판 종류를 알아보자  (0) 2008.10.25
설치형 게시판의 종류 (PHP)  (0) 2008.10.25
랜덤 배경 이미지  (0) 2008.06.21
무제한 멀티 업로드  (0) 2008.05.23
테이블 생성  (0) 2008.05.21
php?변수명=변수값&변수명2=변수값2 ...  (0) 2008.05.21
자바스크립트 기초  (0) 2008.05.21
MySQL 질의문  (0) 2008.05.21
mysql 테이블복구(최적화)하기  (0) 2008.05.21
by Anna 안나 2008. 5. 23. 18:53
1. 태이블 생성을 위해서 아래와 같이 작성 합니다. table.php에 저장합니다. <?
$db=mysql_connect('localhost','dbid','dbpass','dbname');
// 호스트명, db아이디, db비밀번호,db이름 mysql_select_db('kkk',$db); // db이름과 $db라는 변수를 선택
$query = "create table abc // 퀴리라는 변수 안에서 테이블생성 명령어(greate table) 와 생성할 테이블이름을 (abc) 넣습니다.
(no varchar(10) not null,
name varchar(20),
content text,
primary key (no) // 필드 값을 구분하기 위해 프라마리키 를 쓰고 그 기준을 no로 하겠다는
)";
echo("
<html>
<head>
<title>테이블 생성</title>
</head>
<body scroll=no>
<center><br><br><font size=2>
");
$result = mysql_query($query,$db);
if (!$result) {
echo "테이블 작성 실패";
}
else
{
echo "테이블을 작성하였습니다.";
}
echo(" </body></html>"); mysql_close($db);
?>
by Anna 안나 2008. 5. 21. 18:59
http://kin.naver.com/주소.php?arg1=123&arg2=456 가 들어올경우 주소.php에서 $dir1 = $_GET[arg1]; $dir2 = $_GET[arg2]; 로 할경우 $dir1 = 123; $dir2 = 456; 이라는 결과가 나옵니다.

'웹스터디 > php' 카테고리의 다른 글

설치형 게시판의 종류 (PHP)  (0) 2008.10.25
랜덤 배경 이미지  (0) 2008.06.21
무제한 멀티 업로드  (0) 2008.05.23
무제한 멀티 업로드 -설명첨부 가능한 버전  (1) 2008.05.23
테이블 생성  (0) 2008.05.21
자바스크립트 기초  (0) 2008.05.21
MySQL 질의문  (0) 2008.05.21
mysql 테이블복구(최적화)하기  (0) 2008.05.21
DB 자료를 엑셀파일로 저장  (0) 2008.05.21
php 로 디렉토리와 파일을 만들어 보자  (0) 2008.05.21
by Anna 안나 2008. 5. 21. 18:58
자바스크립트.............................................................

자바스크립트는 네스케이프사가 개발한 객체지향 스크립트언어로 HTML문서내에 작성하고 웹브라우저에 의해 실행된다. 웹브라우저가 가진 객체도 이용한다.

넷스케이프 네비게이터 2.0/익스플로러 3.0 이상이면 자바스크립트를 사용할 수 있다. 지금의 브라우저 상황에서는 별로 해당되지 않겠지만...

다만 브라우저마다 조금씩 지원하지 않는 것과 지원하는게 조금 차이가 있다.

자바스크립트는 작성자의 입장에서 보면 HTML이 버전업된 것처럼 자연스럽게 받아들여도 무방할 듯 싶다. HTML과 달리 에디터가 도와주지 않는게 흠이지만....


■ 웹문서에 꼭 필요한 자바스크립트의 기능을 살펴보면

? 새창을 다룰줄 알아야 하고

? 함수를 이용해서 매개변수 넘기기

? 폼전송에서 폼요소 입력값 체크하기

? 프레임간, 브라우저간 url이동과 값 넘기기

? 레이어 다루기


위의 기능을 자연스럽게 사용하려면 자바스크립트의 이용 측면에서 정리를 하는 것으로 언어적인,이론적인 부분은 많이 생략한다!!!

처음 시작인 분은 10일정도 투자하여 함수부분 까지만 하고 asp로 넘어가는게 좋겠다. asp에서 다시 필요한 부분은 되돌아와서 하도록!!

항시 밥먹듯 코딩하는 언어는 아니므로 마스트 하려고 덤비는 건 피하는게 좋겠다. 변수, 배열,연산,조건문,반복문,객체와 메서드, 프로퍼티,이벤트에 대한 기초를 닦아야
할지니....


■ 자바스크립트 생김새

? HTML문서 내에 작성할 때 <SCRIPT LANGUAGE=“JavaScript”>
자바스크립트 코드
</SCRIPT> ? HTML문서 외부에 따로 둘 때 <SCRIPT LANGUAGE=“JavaScript” SRC=“aaa.js”></SCRIPT>
*
*
* 확장자는 js이고 텍스트문서이다
다른 사이트의 js파일도 가능하다 (http://www.dragoneye.co.kr/aaa.js)
웹문서를 간결하게 해주고 여러문서가 공통으로 js파일을 사용할 수 있다. ? 자바스크립트를 이해하지 못하는 브라우저를 위해 <!-- --> <SCRIPT LANGUAGE=“JavaScript”>
<!--
자바스크립트 코드
-->
</SCRIPT>
* 요즘 브라우저 상황에서는 거의 사문화된 것이지만 습관적으로! ? 주석 처리 <SCRIPT LANGUAGE=“JavaScript”>
<!--
자바스크립트 코드1
// 자바스크립트 코드2
자바스크립트 코드3 // 설명을 단다
-->
</SCRIPT>
* // 이하부터 주석이 된다


■ 자바스크립트 위치

? HEAD 태그내에 <HEAD><title>~~</title>
<SCRIPT LANGUAGE=“JavaScript”>
자바스크립트 코드
</SCRIPT>
</HEAD> ? BODY 태그 위에 <HEAD><title>~~</title></HEAD>
<SCRIPT LANGUAGE=“JavaScript”>
자바스크립트 코드
</SCRIPT>
<BODY> ? 필요시 문서내 적당한 곳에 (나중에 실행되는 차이가...) </table>
<SCRIPT LANGUAGE=“JavaScript”>
<!--
자바스크립트 코드
-->
</SCRIPT>
<table>
* 예: 먼저 테이블이 끝나고 다음 테이블 시작하기전에 데이타형과 변수 .............................................................

자바스크립트에서 사용할 수 있는 데이타형과 변수의 사용법을 알아보고 간단한 예제를 통해 자바스크립트와 친분을 쌓아보자!!!



■ 데이타형

정수형 10진수, 16진수, 8진수의 3가지 형태(양수나 음수) 실수형
부동소수점형 20.5, -30.5 와 같이 소수 부분이 있는 10진수 와 지수로 표현된 숫자 Boolean true와 false의 두 가지 값만을 가지며 주로 함수의 리턴 값이나 관계 연산자의 결과값으로 사용 Null 아무것도 없다는 것을 의미, 예외처리에 자주 사용한다 문자열 따옴표(“”, ‘ ‘)에 들어가는 모든 데이타는 문자열 데이타가 된다 특수문자 \n 다음 라인으로 이동 \b 백스페이지 \t 탭의 크기만큼 이동 \' 작은 따옴표 \" 큰 따옴표 \\ 역 슬래시

■ 변수에 대해

변수 프로그램에서 자료형의 값을 가지고 있는 저장 장소 변수의 규칙 변수는 영어알파벳 문자로 시작하면 된다
예약어는 변수로서 사용하지 않으면 된다 변수의 선언 1 strName="홍길동" //문자열
intAge=20 //숫자 2 var srtName="홍길동" var intAge=20 3 var strName
strName="홍길동" var intAge
intAge=20 데이타형을 변수선언시 정의하지 않아도 되며,
변수의 내용에 따라 데이타형이 결정된다.

■ 간단한 예제

1 <script language="javascript">
document.write("웹스쿨 드래곤아이입니다~~")
</script> 2 <script language="javascript">
str1 = "웹스쿨 드래곤아이입니다~~"
document.write(str1)
</script> 3 <script language="javascript">
var str1 = "웹스쿨 드래곤아이입니다~~"
document.write(str1)
</script> 4 <script language="javascript">
var str1 = "웹스쿨 \"드래곤아이\"입니다~~"
document.write(str1)
</script> 5 <script language="javascript">
var str1 = "웹스쿨 드래곤아이입니다~~" ; document.write(str1)
</script> * document.write() 는 ()속의 내용을 브라우저에 출력하라는 메서드
1. 변수 사용없이 문자열을 출력
2. 변수를 이용하여 변수값을 출력
3. var 을 사용 : {} 블럭 내에서 지역변수가 됨
4. 큰따옴표 속의 문자열에 큰따옴표를 포함시키고자 할 때
5. 다른 구문을 줄바꾸지 않고 연속해서 코딩하고 자 할 때 ; 를 사용해서 구분 표시를...

■ 변수로 사용할 수 없는 예약어

abstract boolean break byte case catch char class const continue default do double else extend false final finally float for function goto if implements import in instanceof intinterface long native new null package private protected public return short static super switch synchronized this throw thorws transient true try var void while with 연산자 와 연산 .............................................................

연산은 프로그램에서 가장 흔하게 일어나는 일이다. 연산자의 종류와 연산의 의미를 알아둬야 한다.



■ 산술연산자

- 부호 변환 +,-,*,/ 사칙연산 % 나머지
<script language="javascript">
inta=10
document.write(-inta)
</script> <script language="javascript">
inta=10
document.write(inta+10) // 사칙연산중 덧셈만 해본다
</script> <script language="javascript">
inta=10
document.write(inta%4)
</script>

■ 관계연산자(조건문,반복문과 함께 많이 사용)

> 보다 크다 >= 보다 크거나 같다 < 보다 작다 <= 보다 작거나 같다 == 서로 같다 != 같지 않다
<script language="javascript">
inta=10
intb=20
document.write(inta>intb) // false
</script> <script language="javascript">
inta=10
intb=20
document.write(inta<intb) // true
</script> <script language="javascript">
inta=10
intb=20
document.write(inta==intb) // false
</script> <script language="javascript">
inta=10
intb=20
document.write(inta!=intb) // true
</script>

■ 논리연산자(참,거짓에 대한 연산)

! 논리 부정(여집합) * 참이면 거짓, 거짓이면 참 && 논리 곱(교집합) * 둘다 참일때만 참 || 논리 합(합집합) *둘중 하나라도 참이면 참 ^ XOR(배타적 논리합) * 예제 생략 ? 조건 표현식에 사용 * 예제 생략
<script language="javascript">
inta=10
intb=20
document.write(inta==10) // true
</script> <script language="javascript">
inta=10
intb=20
document.write(!(inta==10)) // flase
</script> <script language="javascript">
inta=10
intb=20
document.write((inta<30)&&(intb<30)) // true
</script> <script language="javascript">
inta=10
intb=20
document.write((inta>10)||(intb>10)) // true
</script>

■ 대입(할당) 연산자(값을 할당할 ?)

= 가장 많이 사용하는 연산자 inta=10, strName="홍길동" += inta=inta+10 과 같음 -= inta=inta-10 과 같음 *= inta=inta*10 과 같음 /= inta=inta/10 과 같음 %= inta=inta%10 과 같음

■ 증감 연산자(값을 할당할 ?)

++ 1씩 증가 (사전 증가,사후 증가) -- 1씩 감소 (사전 감소,사후 감소)
<script language="javascript">
inta=10
document.write(inta++) // 10 사후 증가
</script> <script language="javascript">
inta=10
document.write(++inta) // 11 사전 증가
</script> <script language="javascript">
inta=10
document.write(inta--) // 10 사후 감소
</script> <script language="javascript">
inta=10
document.write(--inta) // 9 사전 감소
</script>

■ 비트 연산자가 있지만 생략함 조건문 IF, SWITCH.............................................................


조건문은 반복문과 함께 프로그램의 흐름을 제어하는 제어문으로 이게 없다면 고삐풀린 망아지 처럼 엉망이 되고 만다. 모든 프로그램언어에서도 비슷하게 사용되므로 처음인 시람은 착실히 공부해야 하는 부분이다.


■ IF문

* else if 는 필요한 경우 계속 추가를...
* else 는 위의 모든 조건을 만족하지 않을 경우
if(조건) {
명령문
} if(조건) {
명령문1
}
else {
명령문2
}
if(조건1) {
명령문1
}
else if(조건2) {
명령문2
}

if(조건1) {
명령문1
}
else if(조건2) {
명령문2
}
else {
명령문3
}
<script language="javascript">
inta=10
if(inta==10) {
document.write("10 이네요")
}
</script> <script language="javascript">
inta=100
if(inta==10) {
document.write("10 이네요")
}
else {
document.write("10 이 아니군")
}
</script> <script language="javascript">
inta=100
if(inta==10) {
document.write("10 이네요")
}
else if(inta==100){
document.write("100 이네요")
}
</script> <script language="javascript">
inta=200
if(inta==10) {
document.write("10 이네요")
}
else if(inta==100){
document.write("100 이네요")
}
else{
document.write("10도 아니고 100도 아니네")
}
</script>

■ SWITCH문

switch (표현식) {
case 값1 : 문장 1 ; break;
case 값2 : 문장 2 ; break;
case 값3 : 문장 3 ; break;
……
default : 문장 n;
} 표현식의 경우의 수가 일치할 때
준비된 명령문장을 수행한다.

해당하는 경우가 없을 때
디폴트를 사용할 수 있다.

* 탈출을 위해 꼭 break 를 !!!
<script language="javascript">
inta=10
switch(inta){
case 5: document.write("5 이네요"); break;
case 10: document.write("10 이네요"); break;
default : document.write("잘 모르겠군요")
}
</script> 반복문 FOR, WHILE, DO .........................................................


반복문은 조건을 동반하여 조건을 만족하는 경우 준비된 명령문을 수행하고 조건에 맞지 않으면 다음 명령을 수행한다. 얘도 모든 프로그램에서 비슷하게 사용되므로 잘 익혀두면 다른 언어를 배울 때 누운 소 타기다.!!!


■ FOR 반복문

for(초기값; 종료 조건; 증감식) {
명령문
}

상수(변수)를 정의하고
이 상수의 시작과 끝을 정해 두고
정해진 간격으로 준비된 명령을 반복 수행시킴 <script language="javascript">
for(k=1; k<=10; k++ ) {
document.write(k + "<br>") // 1-10 까지
}
</script> <script language="javascript">
for(k=2; k<=10; k=k+2 ) {
document.write(k + " <br>") // 1-10 까지 짝수
}
</script> <script language="javascript">
for(k=1; k<=10; k++ ) {
if (k%2==0) {
document.write(k + " <br>") // 1-10 까지 짝수
}
}
</script> <script language="javascript">
for(i=1; i<10; i++ ) {
for(k=1; k<10; k++ ) {
document.write(i + "*" + k + "=" + i*k + "&nbsp;&nbsp;&nbsp;") // 1-10 까지
}
document.write("<br>") // 구구단 1단마다 줄바꾸기
}
</script>

■ WHILE , DO ~~ WHILE 반복문 * for 문과 달리 조건 변경을 해줘야 한다

while (조건) {
명령문
}
조건이 참인 경우 명령문을 반복 수행 do {
명령문
} while(조건) 일단 명령문을 한번 수행후 조건을 검토하여 참이면 반복 수행 <script language="javascript">
k=1 // 초기값
while ( k<=10 ) {
document.write(k + "<br>") // 1-10 까지
k++ // 조건 변경 이 필요함
}
</script> <script language="javascript">
k=1 // 초기값
do {
document.write(k + "<br>") // 1-10 까지
k++ // 조건 변경 이 필요함
}while ( k<=10 )
</script>

■ break, continue 문(for, while, do 문 속에서)

continue
아래 수행을 중지하고 조건 검토로 이동 break 반복문 자체를 완전 탈출함 <script language="javascript"> k=0 // 초기값 while ( k<=10 ) { k++ // continue 이전에 조건 변경 이 필요함 if (k==5) {
continue //위 조건식으로 이동
} document.write(k + "<br>") // 5는 제외됨
}</script> <script language="javascript"> k=0 // 초기값 while ( k<=10 ) { k++ // 조건 변경 이 필요함 if (k==5) {
break //반복문 완전 탈출
} document.write(k + "<br>") // 4까지 출력됨
}</script> 대화상자 (alert, confirm) ……………………………………..

얘는 나중에 나올 브라우저 객체의 메서드지만 앞으로 예제에 사용될 것이므로 미리 좀 알아두자!!!

alert() 은 가급적 웹문서를 따로 만들어 메시지를 전하는 게 좋은 방법이고

confirm() 은 중요한 처리를 앞두고 한번 더 확인할 필요가 있을 경우는 꼭 사용하여야 할 것 같다



■ alert() : 웹문서를 따로 만들지 않고도 간단히 메시지를 전할 수 있다.


alert("얼랏입니다") 또는

str = "드래곤"
alert(str)
경고 메시지창을 띄우기
<script language="javascript">
// 권한이 없는 경우를 알리고자 할 때
alert("얼랏입니다")
</script> <script language="javascript">
// 축하메시지를 띄울 경우
alert("회원가입을 축하합니다!")
</script> <script language="javascript">
// 코딩중 어떤 값을 확인해 보고자 할 때
intsum=50+50
alert(intsum)
</script>

■ confirm() : 확인시 true 이고 1이라는 것!

if (confirm("진짜 삭제?")!=0) {
명령문// 0이 아니면 1이니까 확인
} 또는

message="진짜 삭제?"
if (!confirm(message)) {
명령문
}
확인상자로 "확인" 과 "취소" 둘중 선택을 할 수 있다.

확인을 누르면 confirm("진짜 삭제?") 는 true(1) 을

취소 을 누르면 confirm("진짜 삭제?") 는 fasle(0) 을 갖는다 <script language="javascript">

// 중요한 처리를 앞두고 한번더 확인을 하도록 유도 할 때 (주로 삭제 의 경우)

if(confirm("삭제됩니다")==0)
document.write("취소를 선택")

else
document.write("확인를 선택")

</script> <script language="javascript">

if(confirm("삭제됩니다")!=0)
document.write("확인를 선택")

else
document.write("취소를 선택")

</script> <script language="javascript">

// 어떤 값을 리턴하는 확인해보기
document.write(confirm("삭제됩니다")) // true

</script>

■ prompt() : 입력값을 받아 처리할 수 있다
* 많이 사용하지 않을 것 같아서 생략하는게.. 내장 함수 …………………………………………………


내장함수란 자바스크립트 언어 자체에서 지원하는 함수로 자주 사용할 것으로 예상되는 것들을 함수로 만들어 둔 것을 얘기한다.
다음은 사용자 입력값을 가지고 계산을 할 때 꼭 필요한 함수들이다.!!!

■ eval()

eval("50")+50 또는

inta="50"
eval(inta)+50
숫자 형태를 가진 문자열이나 표현식을
숫자로 바꿔준다.

* 사용자 입력값을 계산을 위해 사용한다면 꼭 필요한 조치이다. <script language="javascript">

document.write("50"+50) // 계산이 안되고 문자열 결합이 됨, 5050
document.write(eval("50")+50) // 100으로 계산됨

</script>

■ parseInt() / parseFloat()

paresInt("10.5")+50 또는

inta="10.5"
parseInt (inta)+50
숫자 형태를 가진 문자열이나 표현식을
정수나 실수로 바꿔준다.

* 사용자 입력값을 계산을 위해 사용한다면 꼭 필요한 조치이다. <script language="javascript">

document.write("10.5"+50) // 계산이 안되고 문자열 결합이 됨
document.write(parseInt("10.5")+50) // 60으로 계산됨
document.write(parseFloat("10.5")+50) // 60.5으로 계산됨

</script>

■ isNaN()

isNaN("10.5") 또는

inta="10.5"
isNaN(inta)


// NaN : Not a Number 표현식이나 값이 숫자가 아닌지를 true/false 로 리턴함.

* 숫자가 아니면 true를 !!! (주의)

* 사용자 입력값이 숫자가 아닌지/인지를
판단하고자 할 때!!! <script language="javascript">

document.write(isNaN("0050")) // false
document.write(isNaN("홍길동")) // true
document.write(isNaN(50)) // false (숫자일 경우 fasle!!!)

</script>

■ escape() / unescape()

escape("가") 또는

stra="가"
escape(stra) unescape("%uAC00") 또는

inta="%uAC00"
unescape(inta) 알파벳과 숫자 및 *, @, -, _ , + , ., / 를 제외한 문자를 모두 16진수 문자로 바꾸어 준다 왼쪽과 반대로 <script language="javascript">

document.write(escape("가"))
document.write(unescape("%uAC00")) // "가"

</script> 사용자 정의 함수 .........................................................


가장 일반적인 자바스크립트 사용 방법으로 일련의 실행과정을 자바스크립트 코드로 묶어서 이름을 주고 필요할 경우 얘의 이름을 불러서 실행되도록 하는 방법이다.

이름을 불러주지 않으면 실행을 하지 않는다!!!


■ function (소문자로!)

1. 매개변수 없는 경우

function 함수이름() {
자바스크립트 코드
} 함수이름 뒤에는 꼭 () 를 ...
이 함수가 수행할 범위는 {} 로 ... <script language="javascript">
function TEST() {
document.write("안녕!")
}
</script>

<script language="javascript">
TEST() // 호출하기(이름을 불러줘야 실행!)
</script> 2. 매개변수 있는 경우

function 함수이름(변수1,변수2, ...) {
자바스크립트 코드
} 함수이름 뒤에는 () 속에 매개변수를 지정

* 호출하는 쪽에서 매개해 줘야!!
<script language="javascript">
function TEST(sname,sage) {
document.write("이름은 " + sname +" 이고, 나이는 " + sage)
}
</script>

<script language="javascript">
TEST("홍길동",25) // 호출하기(이름을 불러줘야 실행!)
</script> 3. return 값이 있는 경우

function 함수이름(변수1,변수2, ...) {
자바스크립트 코드
} 함수 실행 결과 리턴값을 호출 한 쪽 \에 넘겨줄 수 있다. <script language="javascript">
function TEST(inta,intb) {
return inta+intb // 호출한 쪽에 값을 넘겨줌!
}
</script>

<script language="javascript">
returnV = TEST(50,25) // 실행결과 리턴값을 returnV 라는 변수에 대입!
document.write(returnV)
</script>

■ function 호출하기

1. 다른 자바스크립트 구문에서 (위의 경우) * 다른 자바스크립트 구문이 실행될 때 2. 링크에 의해 <a href="javascript:TEST()"> 실행 </a> 3. body 태그에서 <body onLoad="TEST()"> * 페이지 로딩시 실행 4. 기타 나중에 나올 다양한 이벤트에 의해 (onClick, onMouseOver 등등등등...) 위의 경우는 ...

첫째 자바스크립트 구문은 함수이기 때문에 호출을 받아야 실행됩니다.
둘? 자바스트립트 구문은 함수가 아니므로 자동으로 실행됩니다. 내장객체 Arrary() : 배열 .........................................................


자바스크립트에서 사용할 수 있는 객체는 자바스크립트 언어 자체에서 지원하는 객체와 자기 것은 아니지만 브라우저에 포함된 객체를 사용할 수 있다.

* 메서드, 함수, 프로퍼티, 객체에 대한 얘기는 나중에 기회가 있을 때 하기로 하고 처음인 분은 당장 중요한 아닐 것 같다. 이 개념을 모르고도 사용하다 보면 나중에는 저절로 알게 되는 날이 온다. 결국 모르면 안된다는 얘기 같기도...


자주 사용하는 중요한 객체 위주로 메서드와 프로퍼티 를 살펴보자!!!


■ Array 객체(배열을 사용할 수 있다) * 아주 중요함

myary = new Array() 또는

myary = new Array(5) 배열이름만 선언

배열이름과 배열크기를 선언 (총 5개 요소)
속성 length 배열의 크기(배열요소의 개수) 메서드 join()
배열요소들을 하나의 문자열로 만들어 줌 reverse() 배열요소의 값의 순서를 역순으로 바꿈 sort() 배열요소의 값을 정렬 concat(제2의 배열) 두 개의 배열을 하나로 만들기 slice(s, e) s 첨자의 배열요소값 부터 e미만의 배열요소값 가져와서 새로운 배열 만들기 <script language="javascript">
myary = new Array(5) // 배열 선언
myary[0] = 1 //배열요소에 값을 할당
myary[1] = 2
myary[2] = 3
myary[3] = 4
myary[4] = 5
document.write(myary.length) // 배열의 크기(배열요소의 개수) 5
</script>
<script language="javascript">
myary = new Array(5)
myary[0] = 1
myary[1] = 2
myary[2] = 3
myary[3] = 4
myary[4] = 5


// 배열 크기를 반복문에 사용하면 각 배열요소 값에 접근을 쉽게!!!

for (k=0 ; k<myary.length ; k++) {
document.write(myary[k] + "<br>")
}
</script> 내장객체 String() : 문자열 .........................................................


문자열은 무조건 잘 다뤄야 한다. 특히 길이, 특정문자 찾기, 특정문자 포함여부등을 체크할 때 많이 사용하는 객체이다. 예제를 꼭 해볼 것 !!


■ String객체(문자열 관련) * 아주 중요함

문자열.프로퍼티 또는
문자열.메서드 사용자 입력값을 체크하는 중요한 객체!!!
속성 length 문자열의 길이 (한글 한문자도 1로) 메서드 charAt(숫자)
숫자 위치에 해당하는 문자 indexOf(문자 또는 문자열) 문자 또는 문자열이 나오는 위치를 숫자로
* 왼쪽 부터 substring(숫자1,숫자2) * 소문자로 위치로 숫자1 에서 숫자2-1 사이 문자열 split(대상,"기준문자") 대상문자열을 기준문자로 분리=>배열로 * 기타 많지만 자주 사용하는 것만! <script language="javascript">
str = "안녕하세요! DRAGONEYE입니다~~"

document.write(str.length + "<br>")
document.write(str.charAt(5) + "<br>")
document.write(str.indexOf("!") + "<br>")
document.write(str.substring(7, 16)+ "<br>")

</script>
<script language="javascript">
str = "안녕하세요! DRAGONEYE입니다~~"

// 반복적으로 모든 문자를 하나씩 검사하여 "!" 포함 여부를 알아내기
for (k=0 ; k < str.length ; k++) {

if (str.charAt(k)=="!") {
document.write("! 가 있군요")
}

}
</script> <script language="javascript">
str = "안녕하세요! DRAGONEYE입니다~~"

if (eval(str.indexOf("!"))>0) {
document.write("! 가 있군요")
}

// str.indexOf() 는 포함시 0보다 큰 숫자, 못 찾으면 -1을
</script> <script language="javascript">
// 드라군님 제공 소스
var s = "1,2,3,4";
var buff = s.split(",");
for(i=0; i<buff.length; i++) {
document.write(buff[i] + "<BR>");
}
</script> 내장객체 Screen(), Date() .....................................................


아래는 있다는 것만 알아두자.


■ Screen 객체(사용자 컴퓨터의 화면 관련)

screen.프로퍼티 브라우저의 크기와 관련된 정보를 얻을 수 있다. (* new 연산자 없이)
availWidth 브라우저에서 내용을 보여는 부분의 너비 availHeight 브라우저에서 내용을 보여는 부분의 높이 height 전체 화면의 height값 width 전체 화면의 width값 <script language="javascript">
document.write(screen.availWidth + "<br>")
document.write(screen.availHeight + "<br>")
document.write(screen.width + "<br>")
document.write(screen.height + "<br>")
</script>


■ Date 객체(사용자 컴퓨터의 시스템 시간을 참조)

strdate = new Date()

메서드,프로퍼티 사용
Date 객체의 인스턴스 생성

Date 객체와 같은 기능을 가진 객체를 하나 만들면 (strdate) 얘를 통해서 Date 객체가 가진 메서드와 프로퍼티를 사용할 수 있다.

* 이 때 만들어진 strdate같은 걸 객체의 인스턴스라고 부른다. 똑 같은 샘플 !!!
값 가져오는값 메서드 getYear() 1970년 이후의 연도
1970~1999년도 사이는 0~99
그 이후는 네 자리 숫자의 년도 getMonth() 월0(1월)-11(12월) getDay() 요일, 0(일)-6(토) getHours() 시간, 0-23 getMinutes() 분, 0-59 getSeconds() 초, 0-59 값 설정하는 메서드 setYear() 1970년 이상을 설정 setMonth() 월을 설정 setDay() 요일을 설정 setHours() 시간을 설정 setMinutes() 분을 설정 setSeconds() 초를 설정 <script language="javascript">
sdate = new Date()
syear = sdate.getYear()
document.write(syear) // 2003
</script>
* 기타 Number, Event 등등이 있지만 이 정도면 충분할 것으로 본다.
* 수학 관련 각종 계산 을 하려면 Math()를 따로 살펴 보시도록 자바스크립트 이벤트 .....................................................


아주 중요한 이벤트!!!
이벤트란 모든 행위를 말하는 것으로 프로그램에서는 미리 사용자의 행위를 예측하여 미리 사용할 수 있도록 이벤트를 많이 준비해 놓고 있다.

예를 들어 사용자가 마우스를 클릭할 것이다.... 이건 click 이벤트로 준비!
이게 없다면 우리는 사용자가 마우스를 클릭했는지 부터 알아내야 다음 일을 할 수 있을 것이다. 고맙게도 click이 일어났다는 걸 자동으로 알 수 있으니 얼마나 고마운 일인가...

(Click, MouseOver, MouseOut, Submit...)

이벤트 핸들러란 ?

이러한 이벤트와 우리가 준비한 프로그램을 연결해 주는 구실을 한다
(onClick,onMouseOver,onMouseOut, onSubmit...)

* 그래서 우리가 할일은 이벤트가 일어났을 때 할 일을 준비하고
이벤트 핸들러에게 그 일을 하도록 연결해 두면 되는 것이다~~~

* 익스플로러와 네비게이트 사이에 약간의 차이가 있어 익스플로러 기준으로 !!!


■ 이벤트의 종류와 의미 (이벤트핸들러는 이벤트에 on을 붙여 준다)

blur
포커스를 다른곳으로 옮길 경우 click 링크나 폼의 구성원을 클릭할 때 change 선택값을 바꿀 경우 focus 포커스가 위치할 경우 mouseover 마우스가 올라올 경우 mouseout 마우스가 떠날 경우 mousedown 마우스를 누를 경우 mousemove 마우스를 움직일 경우 mouseup 마우스를 눌렀다 놓을 경우 select 입력양식의 하나가 선택될 때 submit 폼을 전송하는 경우 load 페이지,윈도우가 브라우져로 읽혀질 때 unload 현재의 브라우저,윈도우를 떠날 때 error 문서나 이미지에서 에러를 만났을 때 reset 리셋 버튼이 눌렸을 때 dbclick 더블클릭시 dragdrop 마우스 누르고 움직일 경우 keydown 키 입력시 keypress 키 누를 때 keyup 키를 누르고 놓았을 때 move 윈도우나 프레임을 움직일 때 resize 윈도우나 프레임 사이즈를 움직일 때

■ 메서드

blur()
입력 포커스를 다른 곳으로 이동시킴 click() 마우스 버튼이 눌러진 것처럼 해줌 focus() 입력 포커스를 준 것처럼 해줌 submit() 폼의 submit 버튼을 누른 것처럼 해줌 select() 메소드 폼의 특정 입력 필드를 선택함

■ 속성

event.keyCode 누른 키의 ASCII 정수 값 event.x
문서 기준 누른 좌표의 left event.y 문서 기준 누른 좌표의 top event.clientX 문서 기준 누른 좌표의 left event.clientY 문서 기준 누른 좌표의 top event.screenX 콘테이너 기준 누른 좌표의 left event.screenY 콘테이너 기준 누른 좌표의 top

■ 브라우저 객체별 이벤트 핸들러

선택 목록(SELECT)
onBlur, onChange, onFocus 문자 필드(TEXT) onBlur, onChange, onFocus, onSelect 문자 영역(TEXTAREA) onBlur, onChange, onFocus, onSelect 버튼(BUTTON) onClick 체크박스(CHECKBOX) onClick 라디오 버튼(RADID) onClick 링크 onClick, onMouseover RESET 버튼(RESET) onClick SUBMIT 버튼(BUTTON) onClick DOCUMENT onLoad, onUnload WINDOW onLoad, onUnload 폼(FORM) onSubmit <script language="javascript">
function TEST(){
alert("페이지 로딩시 자동 호출!")
}
</script>

<body onLoad="TEST()">

<script language="javascript">
function TEST(){
alert("Click 했군요!")
}
</script>

<font onClick="TEST()"> Click! </ font>

<script language="javascript">
function TEST(){
alert("마우스를 올리지 마세욤!")
}
</script>

<font onMouseOver="TEST()"> MouseOver</ font>

<script language="javascript">
function TEST(){
alert("현재 좌표는 " + event.x + "/" + event.y)
}
</script>

<font onClick="TEST()"> Click 좌표 </ font>
* 브라우저 객체(window,document,form,image,layer,...)와 함께 사용되기 때문에 여기서는 간단하게 종류와 의미만 살펴보고!!! 브라우저내장객체 계층구조 .........................................................


익스플로러나 네비게이터 등의 브라우저가 내장하고 있는 객체를 자바스크립트를 이용하여 이용할 수 있다. 이 부분이 자바스크립트의 상당부분을 차지할 정도로 중요하고 이용빈도 또한 아주 높다.



■ 객체 구성 (테이블 태그로 만든 도표)
window document frame history location



navigator anchor applet area form image layer link plugin title button checkbox file upload hidden password radio reset select submit text textarea option
위의 각각은 모두 객체이름이다. 일단 숫자에 한번 놀라고!
또한 각각의 객체는 모두 자신만의 속성과 메서드와 이벤트 핸들러를 가지고 있다.
그 숫자 또한 엄청 많아서 또 한번 놀라야한다!!!

그러나 걱정할 일은 아니다. HTML 에서 만난적이 있는 안면있는 태그들을 전부 객체라고 부를 뿐이다.

브라우저 객체는 최상위 window객체로부터 파생되어 계층적인 구조를 가지고 있다.
window 객체의 메서드 open()을 사용한다면 window.open() 처럼 사용할 수 있다.
window객체는 최상위 객체로 생략하여 open() 처럼 사용할 수 있지만 같은 메서드를 다른 객체도 가질 수 있으므로 객체이름을 꼭 적어주는게 좋겠다 window 객체 .........................................................


아래는 최상위 window객체가 가진 속성과 메서드,이벤트 핸들러의 종류를 ?어보고 몇가지 예제를 해본다. 필요한 작업이 있을 때마다 객체를 찾아보고 속성이 있나, 메서드를 가졌나, 이벤트핸들러가 있는지를 찾아봄으로써 점점 내공이 깊어지는 것이다.

■ window 객체 프로퍼티
status 브라우저의 상태바에 문자열을 출력하는 경우에 사용 defaultStatus 브라우저의 상태바에 초기 문자열을 설정 length 창안의 프레임 수 name 창 이름 self 현재 창 자신, window와 같음 window 현재 창 자신, self와 같음 parent 프레임에서 현재프레임의 상위프레임 top 현재프레임의 최상위프레임 opener open()으로 열린 창에서 볼 때 자기를 연 창 document document 오브젝트 frames 창안의 모든 프레임에 대한 배열정보 history history 오브젝트 및 배열 location location 오브젝트 closed 창이 닫혀 있는 상태 locationbar location 바 menubar 창 메뉴 바 innerHeight 창 표시 영역의 높이(픽셀), 익스플로러 지원되지 않음 innerWidth 창 표시 영역의 너비(픽셀), 익스플로러 지원되지 않음 outerHeight 창 바깥쪽 둘레의 높이, 익스플로러 지원되지 않음 outerWidth 창 바깥쪽 둘레의 너비, 익스플로러 지원되지 않음 pageXOffset 현재 나타나는 페이지의 X위치, 익스플로러 지원되지 않음 pageYOffset 현재 나타나는 페이지의 Y위치, 익스플로러 지원되지 않음 personalbar 창의 퍼스널 바 scrollbar 창의 스크롤 바 statusbar 창의 상태 바 toolbar 창의 툴 바

■ window 객체 메서드
alert() 경고용 대화상자를 보여줌 clearTimeout() setTimeout 메소드를 정지 confirm() 확인, 취소를 선택할 수 있는 대화상자를 보여줌 open() 새로운 창을 오픈 prompt() 입력창이 있는 대화상자를 보여줌 setTimeout() 일정 간격으로 함수를 호출하여 수행, millisecond 단위로 지정 eval() 문자열을 숫자로 바꿈 toString() 오브젝트를 문자열로 바꿈 blur() focus를 이동 focus() focus를 줌 scroll() 창을 스크롤 함 valueOf() 오브젝트 값을 반환 back() 한 단계 전 URL(이전화면)로 돌아감. 익스플로러 지원 안함 find() 창안에 지정된 문자열이 있는지 확인, 있다면 true 없으면 false. 익스플러러 지원 안함 forward() 한 단계 뒤의 URL(다음화면)로 이동. 익스플로러 지원 안함 home() 초기화 홈페이지로 이동. 익스플로러 지원 안함 moveby() 창을 상대적인 좌표로 이동. 수평방향과 수직방향의 이동량을 픽셀로 지정 moveto() 창을 절대적인 좌표로 이동. 창의 왼쪽 상단 모서리를 기준으로 픽셀을 지정 resizeby() 창의 크기를 상대적인 좌표로 재설정. 밑변의 모서리를 기준으로 수평방향, 수직방향을 픽셀로 지정 resizeto() 창의 크기를 절대적인 좌표로 재설정. 창 크기를 픽셀로 지정 scrollby() 창을 상대적인 좌표로 스크롤. 창의 표시영역의 수평방향과 수직방향에 대해 픽셀로 지정 scrollto() 창을 절대적인 좌표를 스크롤. 창의 왼쪽 상단 모서리를 기준으로 픽셀로 지정 stop() 불러오기를 중지. 익스플로러는 지원 안함 captureEvents() 모든 타입의 이벤트를 판단 setInterval() 일정시간마다 지정된 처리를 반복 clearInterval() setInterval 메소드의 정지 handleEvent() 이벤트 취급자를 정함 print() 화면에 있는 내용을 프린터로 출력 releaseEvent() 다른 계층의 이벤트로 이벤트를 넘김 routeEvent() 판단한 이벤트와 같은 계층의 이벤트 toSource() 오브젝트값을 문자열로 반환

■ window 객체 이벤트핸들러
onBlur 브라우저가 포커스를 잃을 때 발생 onDragDrop 사용자가 다른곳에서 객체를 브라우저 안에 넣으려고 할 때 발생. 익스플로러는 지원 안함 onError 문서를 읽는 중에 에러가 생길 때 발생 onFocus 브라우저에 포커스를 얻을 때 발생 onLoad 문서를 읽을 때 발생 onMove 브라우저의 위치를 변경했을 때 발생. 익스플로러는 지원 안함 onResize 창의 크기를 변경했을 때 발생. 익스플로러는 지원 안함 onUnload 현재 문서를 지울려고 할 때 발생

■ 새창열기 open() 메서드
window.open("문서url","창이름","창의 특성")

웹여행중에 많이 본 것일텐데 링크나,버튼,이미지를 누를 때 많이 뜨죠!

첫째인수로 url이 필요하죠. 새창에도 내용을 넣어야 하니까요.
둘째인수로 창이름, 이게 같은 경우엔 계속 창을 열 때 새로 열지 않고 이미 열린 창을 이용합니다.
세째인수는 새로 열릴 창의 너비,높이,툴바,상태바등을 지정하는거죠.

■ 창의특성 directories yes || no 익스플로러 연결도구모음, 익스플로러 전용 location yes || no 주소입력란 menubar yes || no 메뉴표시줄 scrollbars yes || no 스크롤바 status yes || no 상태표시줄 toolbar yes || no 도구모음 copyhistory yes || no 히스토리정보를 복사 resizable yes || no 창 크기 조절 가능여부 width 픽셀 창의 너비 height 픽셀 창의 높이 <script language="javascript">
// 페이지로딩시 새창 열기

function winOpen() {
window.open("123.html","newWin","width=300,height=200,toolbar=no")
}
</script>

<body onLoad="winOpen()">
<script language="javascript">
// 클릭시 새창열기

function winOpen() {
window.open("123.html","newWin","width=300,height=200,toolbar=no")
}
</script>

<font onClick="winOpen()"> <script language="javascript">
// 클릭시 새창열기 , 링크에서

function winOpen() {
window.open("123.html","newWin","width=300,height=200,toolbar=no")
}
</script>

<font onClick="winOpen()"> 클릭열기 </font>
<a href="javascript:winOpen()"> 링크열기 </a> <script language="javascript">
// 매개변수를 이용하기

function winOpen(url,winname,winhow) {
window.open(url,winname,winhow)
}
</script>

<a href= "javascript:winOpen('123.html','newWin','width=300,height=200,toolbar=no')"> 매개열기 </a>

■ 새창열기 close() 메서드
<script language="javascript">
function winClose() {
window.close()
}
</script>

<a href= "javascript:winClose()"> 함수이용해서 닫기 </a>

<a href= "javascript:window.close()"> 메서드 이용 닫기 </a>

■ 새로 열린 창에서 연 창을 컨트롤하기
<script language="javascript">

// 창 닫기 전에 연 창의 폼요소에 값 넘기기

function winClose(addr) {
opener.form1.address=addr
self.close()
}
</script>

<a href= "javascript:winClose('서울 종로구')"> 종로구</a>
<a href= "javascript:winClose('서울 마포구')"> 마포구</a> <script language="javascript">

// 창 닫기 전에 연 창을 리로드하기

function winClose() {
opener.location.reload()
self.close()
}
</script>

<a href= "javascript:winClose()"> 함수이용해서 닫기 </a>

■ 새로 열린 창에서 크기 조절하기 window.resizeTo <script language="javascript">
// 페이지로딩시 크기 조절

function winSize() {
window.resizeTo(300,200) // 너비,높이
}
</script>

<body onLoad="winSize()">

■ 새로 열린 창에서 위치 조절하기 window.moveTo <script language="javascript">
// 페이지로딩시 위치 조절

function winMove() {
window.moveTo(200,200) // X,Y 좌표
}
</script>

<body onLoad="winMove()">
window 객체에서 가장 많이 사용되는 필수 기능인 새창관련만 살펴보았다.
나머지는 필요할 때 검색을 통해 많은 예제 소스를 접할 수 있을 것이다!!! document 객체 .........................................................


최상위 window객체에서 파생된 것으로 <body>~</body> 태그속의 내용과 관련된 처리를 할 수 있다.

많은 기능이 있지만 이 객체는 범위가 넓어서 직접 다루는 일은 별로 없고 실제 이용은 이 객체에서 파생된 하위객체(Layer, Link, Image, Area, Anchor, Applet, Form)를 통해 세세한 접근을 할 수 있다.

상위 객체인 window를 생략하고 사용한다!!!

■ document 객체 프로퍼티
title 문서의 제목을 설정하거나 반환 location 현재 문서의 URL referer 이전 문서의 URL cookie 쿠키파일의 정보 bgColor 창의 배경색을 설정 fgColor 글자색을 설정 lastModified 파일의 최종 변경 날짜를 알아냄 URL 현재의 URL alinkColor 누르고 있는 동안의 링크문자열의 색을 설정 vlinkColor 이미 누른적이 있는 링크 문자열의 색을 설정 linkColor 링크색을 설정 anchors anchor 오브젝트 및 배열 forms form 오브젝트 및 배열 links 링크 오브젝트 및 배열 domain 현재 도메인 이름(tainting 상태일때만 사용가능) applets applet 배열 area area 오브젝트 embeds plug in 배열정보 images 이미지 오브젝트 및 배열 layers layer 오브젝트 및 배열

■ document 객체 메서드
open() 문서에 내용입력 준비됨, 기존 내용 삭제됨 close() 문서에 내용입력이 끝났음 clear() 문서의 내용을 삭제 write() 문서에 내용을 출력 writeln() 줄바꾸기를 포함 문서에 내용을 출력 eval() 문자열을 수치로 변경 toString() 오브젝트를 문자열로 변경 valueOf() 오브젝트 값을 표시 getSelection() 선택범위안에 포함되어 있는 문자열을 반환 captureEvent() 모든 타입의 이벤트를 판단 releaseEvent() 다른 계층의 이벤트로 이벤트를 넘김 routeEvent() 판단한 이벤트와 같은 계층의 이벤트 toSource() 오브젝트 값을 문자열로 표시

■ document 객체 이벤트핸들러
onBlur 문서가 비활성화될 경우 onFocus 문서가 활성화될 경우 onClick 문서가 클릭될 때 onDBClick 문서가 더블클릭될 때 onKeyDown 키를 누를 때 발생 onKeyPress 키를 누르고 있을 때 발생 onKeyUp 키를 눌렀다 놓을 때 발생 onMouseDown 아우스를 누를 때 발생 onMouseUp 마우스를 눌렀다 놓을 때 발생

■ 현재문서의 URL <script language="javascript">
alert(document.location)
</script>

■ 이전문서의 URL <script language="javascript">
alert(document.referer) // 이 파일을 링크한 페이지에서 넘어와야 값이 있음!
</script>
기타 : 문서를 구성하는 이미지,링크,폼태그,레이어의 배열정보를 얻을 수 있다. history 객체 .........................................................


window객체에서 파생된 것으로 window를 생략한다.
방문자가 최근에 방문한 URL을 웹브라우저가 저장해둔 히스토리정보를 이용해서 앞으로,뒤로 갈 수 있다. URL자체를 알아내지는 못한다!

어떤 일처리를 하고 나서 원래의 페이지로 보낼 때! 이용하겠죠!!!

* 새로 서버의 문서를 요청하지 않고 보관하고 있던 페이지를 보여준다는것!!!

■ history 객체 프로퍼티
length 저장된 URL 개수

■ history 객체 메서드
back() 히스토리 목록에서 한 단계 뒤로 forward() 히스토리 목록에서 한 단계 앞으로 go(정수) 히스토리 목록에서 한 단계 앞으로,뒤로(음의 정수일 경우) back()는 go(-1) 과 같음

■ 뒤로 돌아가기 <script language="javascript">
alert("암호가 다르군요")
history.back() // history.go(-1) 과 동일
</script>
<a href="javascript:history.back()">뒤로</a> location 객체 .........................................................


window객체에서 파생된 것으로 window를 생략한다.
현재 열려있는 문서의 URL정보를 얻을 수 있고...

이보다는 앞으로 이동할 문서의 URL을 설정하는 데 아주 중요하게 사용됩니다!!!

■ location 객체 프로퍼티

아래 URL 샘플을 가지고 URL에 대한 이해를 하시길...

http://www.dragoneye.co.kr:80/column2/list.asp#top?table=table30&page=2 href 문서의 URL 주소 위 주소 전체 host 호스트 이름과 포트 http://www.dragoneye.co.kr:80 hostname 호스트 컴퓨터이름 http://www.dragoneye.co.kr hash 앵커이름 #top pathname 디렉토리 이하 경로 /column2/list.asp port 포트번호 부분 80 protocol 프로토콜 종류 http: search URL 조회부분 table=table30&page=2

■ location 객체 메서드
eval() 문자열을 숫자로 바꿈 toString() 오브젝트를 문자열로 바꿈 reload() 현재 문서를 다시 읽어옴 replace() 현재 문서를 다른 URL 문서로 바꿈 valueOf() 오브젝트 값을 표시 toSource() 오브젝트 값을 문자열로 표시

■ 열릴 문서의 URL설정하기 <script language="javascript">

// URL을 이동시킴
location.href= "http://www.dragoneye.co.kr"
//location.href= "login.html"
</script>
<script language="javascript">
alert("회원가입을 하시겠습니까?")
location.href= "member.html"
</script>
<script language="javascript">
// 연 창의 URL 이동
opener.location.href= "member.html"
</script>
<script language="javascript">
// 부모창 지정프레임의 URL 이동
parent .frame1.location.href= "member.html"
</script>
<script language="javascript">
// 전체창에 새 페이지 열기
top.location.href= "index.html"
</script>


■ 문서 새로 열기 <a href="javascript:location.reload()"> 새로열기 </a>
<script language="javascript">
// 연 창의 URL 새로 열기
opener.location.reload()
</script>
image 객체 .........................................................


document 객체 소속으로 문서내 모든 이미지에 정보를 가지고 있고 또한 설정도 가능하다. 기존 <img> 태그의 모든 속성을 컨트롤 할 수 있다!

실제 사용시에는 문서내의 이미지에 대한 설정을 변경하고자 할 때 사용됩니다!!!

■ image 객체 프로퍼티

<img> 태그에서의 각종 속성이 그대로 객체의 속성으로 되어 있음을 알 수 있다.
아래 객체 속성을 이용하면 이미지의 모든 속성을 바꿀 수 있다.
name 이미지객체의 이름 src 이미지 URL width 너비 height 높이 border 테두리선 두께 hspace 좌우여백 vspace 상하여백 align 텍스트 속의 정렬

■ image 객체 이벤트핸들러
onclick,onMouseOver,onMouseOut 정도를 이용하면 된다.

■ 이미지관련 예제 : <img>에 name을 설정해야 자바스크립트 객체롤 접근! <script language="javascript">
// 자신의 이미지 바꿔주기
function imgChange(){
document.img1.src="2.gif"
}
</script>

<img name="img1" src="1.gif" onClick="imgChange()">
<script language="javascript">
// 자신의 이미지 롤오버 효과
function imgOver(){
document.img1.src="2.gif"
}
function imgOut(){
document.img1.src="1.gif"
}
</script>

<img name="img1" src="1.gif" onMouseOver="imgOver()" onMouseOut="imgOut()">
<script language="javascript">
// 작은이미지 클릭시 큰이미지 보여주기(이미지쇼)
function imgChange(img){
document.img1.src=img
}
</script>

<!-- 큰이미지 초기 src는 1b.gif -->
<img name="img1" src="1b.gif">

<!-- 작은 이미지 -->
<img src="1s.gif" onMouseOver="imgChange('1b.gif')">
<img src="2s.gif" onMouseOver="imgChange('2b.gif')">
* 레이어및 새창과도 연결해 사용할 수 있다. frame 객체 .........................................................


window 객체 소속으로 브라우저 내의 모든 프레임에 대해 정보를 가지고 있다.
실제 사용시에는 문서내의 이미지에 대한 설정을 변경하고자 할 때 사용됩니다!!!

이 객체의 속성,메서드,이벤트핸들러는 window객체와 동일하다.

frame 객체에서 중요한건 여러개의 프레임으로 나뉜 경우 어느 프레임에서 다른 프레임에 어떻게 접근할 수 있는가 하는 것이다.

* 프레임 나누기와 이름주기는 HTML 에서 먼저 약간의 공부를 필요로 한다.
아래 소스는 HTML 프레임만들기 의 예제 소스이다.

index.html <html>
<head>
<title>드래곤아이입니다~~ASP, HTML</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
</head>
<frameset rows="100,*" frameborder="NO" border="0">
<frame src="top.html" name="top" scrolling="NO" noresize marginwidth="0" >
<frameset cols="200,*" frameborder="NO" border="0">
<frame src="left.html" name="left" scrolling="NO" noresize marginwidth="0" marginheight="0">
<frame src="main.html" name="main" scrolling="auto" noresize>
</frameset>
</frameset>
<noframes>
<body>
</body>
</noframes>
</html>

■ parent 속성
위와 같은 프레임구조에서 어느 프레임 파일에서 다른 프레임 파일에 접근하는 방법은

frames[0],frames[1],frames[2] 배열정보를 이용할 수 있고 또는
top,left,main 프레임이름으로 접근할 수도 있다.

■ parent , top, self main.html 에 폼태그 form1 이 있고, 폼요소 address 가 있는데
top.html 에서 위 페이지의 폼요소 address 에 접근하는 방법이다.

parent.frames[2].document.form1.address.value="서울" 또는
parent.main.document.form1.address.value="서울" 으로....
어느 특정 프레임파일에서 위의 index.html같은 프레임셋파일을 창 전체에 어떤 문서를 로딩하려면 top 이란 속성을 사용해야 한다.

document .top.location.href="index2.html"
어느 특정 프레임파일에서 부모창의 URL을 바꾸는 방법
parent.top 이나 parent.left 를 생략하면 self 가 적용되어 자기창에 실행이 된다.

parent .top.location.href="top2.html"
parent .left.location.href="left2.html"
어느 특정 프레임파일에서 부모창의 URL을 리로딩 하기
parent.top 이나 parent.left 를 생략하면 self 가 적용되어 자기창에 실행이 된다.

parent .top.location.reload()
parent .left.location.reload()


* open() 메서드로 열린 자식창과 연 창에서 나오는 opener 와 혼동하지 않도록! form 객체 .........................................................


document 객체 소속으로 html의 <form> 태그에 접근하는 정보를 제공합니다.
웹프로그래밍에서 아주 중요한 전송과 관련하여 필수로 애용해야 하는 객체입니다.

asp 기초 부분의 request 객체의 form 컬렉션 부분을 먼저 하고 나서 보완 차원에서 공부를 해야한다.
간단한 폼태그로 폼과 폼요소에 접근하는 방법을 살펴봅니다.
<form> ~ </form> 사이는 한건의 폼 전송으로 취급되며 한문서에는 여러개 폼이 올 수 있고, 폼 속에는 여러개의 폼요소(입력상자)가 올 수 있습니다.

각각은 name을 지정하여 자바스크립트에서 접근할 수 있도록 합니다.


아래는 간단한 폼태그로 자바스크립트에서 어떻게 접근하는지를 보려고 한 것입니다 <form name="form1" action="ok.asp" method="post" target="_self" enctype="" >
<input type="text" name="tel">
</form>
<form name="form2" action="ok.asp" method="post" enctype="">
<input type="text" name="tel">
</form> * 위의 폼태그에서 "tel" 에 접근하려면 아래처럼 배열 또는 이름을 이용할 수 있다.

document.form1.tel 또는 document.forms[0].elements[0]
document.form2.tel 또는 document.forms[1].elements[0]

* 배열정보를 이용할 때는 for 반복문을 통해 모든 폼/모든 요소에 접근할 때 유리하다

■ form 객체 속성
name <form> 태그의 name속성 값 위의 form1,form2 action <form> 태그의 action속성 값 ok.asp method <form> 태그의 method속성 값 post || get target <form> 태그의 target속성 값 _blank, _self, _top,_parent encoding <form> 태그의 enctype속성 값 첨부파일 유무에 따라 elements <form> 태그내의 폼요소를 배열로 저장 tel 은 form1.elements[0] 1. name 은 자바스크립트에서 폼이름으로 접근하기 이해 설정이 필요 2. action 은 이 폼을 전송에 사용하고자 할 경우 이 전송을 받아 처리할 페이지를 설정 3. method 는 전송의 방법으로 post 를 주로 사용한다 (asp 의 request부분 참조) 4. target 은 링크관련 태그와 마찬가지이다. 생략하면 _self 가 적용된다. 5. encoding 은 전송 데이타를 encode하는 방법으로 첨부파일이 있다면
multipart/form-data 를 ... 첨부가 없다면 생략하면 된다. *
자바스크립트 속성을 이용하면 html에서는 고정시킨 속성값을 조건에 따라 유연하게 변화를 줄 수 있다. 즉 html에서 정한 속성값을 변경시킬 수가 있다.

■ form 객체 메서드
submit() 서버로 데이타 전송 submit 버튼을 누른 효과 reset() 폼요소의 값을 모두 초기화 reset 버튼을 누른 효과

■ form 객체 이벤트핸들러
onSubmit() submit 버튼을 누르거나 submit() 메서드가 실행될 때 onReset() reset 버튼을 누르거나 reset() 메서드가 실행될 때

form 객체의 사용법은 하위객체인 폼요소를 마치고 종합하는 단원에서 실제 사용례를 보는게 순서에 맞을 것 같아서 여기서는 생략합니다. text, password, hidden, textarea ..............................................
사용자 입력값을 잘 콘트롤 하기 위해서는 HTML 태그의 속성, 객체의 속성,메서드,이벤트핸들러를 잘 이해하고 있어야겠다.

■ html 태그
1. size=20 이면 20문자 를 입력받을 수 있다.(공백도 1 한글도 1)

<input type="text" name="tel" size="20" maxlength="15">

2. 공간이 부족하면 사이즈는 작게 최대입력문자는 크게 할 수 있다.

<input type="password" name="pass" size="10" maxlength="20">

3. 미리 초기값을 줄 수 있다. (화면에 보이지 않음 대체로 초기값이 있어야 한다.)

<input type="hidden" name="name" value="홍길동">

4.사용자가 입력하는 걸 막으려면 readonly속성을 사용할 수 있다.

* textarea 에는 value 속성이 없다. 값은 시작태그 마감태그 사이에 넣어주면 된다.
<textarea name="content" cols="40" rows="5" readonly></textarea>
<textarea name="content" cols="40" rows="5">초기값</textarea>
* 자바스크립트에서 입력해 줄 수 있다. text 는 한줄입력상자로 가장 많이 사용된다.

textarea 는 여러줄 입력상자로 cols(가로입력문자수), rows(세로라인수) 속성이 있다.

hidden 은 사용자에겐 보여주지 않으면서 미리 값을 가지고 있다가 서버로 전송시 사용

password 는 암호 같은 보안이 필요한 사용자 입력값을 받을 때 사용되며 *** 표시로
입력값을 모르도록 해둔 것이며 브라우저에서 뒤로가기를 할 경우 사라진다.

■ 객체 속성
name <input> 태그의 이름 설정 ,자바스크립트, asp 에서 이름을 사용함 value 이 상자에 사용자가 입력한 값 defaultValue <input> 태그에 기본적으로 든 값 value="홍길동" 처럼 한 경우 type <input> 태그에 type에 설정한 값 (text 를 리턴)

■ 객체 메서드
focus() 지정한 입력상자에 커서를 둔다 (*자주 이용) blur() 지정한 입력상자에 커서를 없앤다 select() 지정한 입력상자에 든 모든 값을 선택한다

■ 객체 이벤트핸들러 (password에는 없다)
onFocus 지정한 입력상자에 커서를 둔 경우 onBlur 지정한 입력상자에 커서를 뺄 경우 onSelect 지정한 입력상자에 든 값을 선택할 때 onChange 지정한 입력상자에 든 값을 바꿀 때
<script language="javascript">
function Check(){ // 사용자 입력값 빈값인 경우
var tel=document.form1.tel.value if (tel=="") {
alert("전화번호는 꼬~옥!")
return // 호출한 쪽으로 돌려보냄(아래소스 실행을 막기 위해)
}
// 값이 있는 경우 submit() 메서드
document.form1.submit()
}
</script> <form name="form1" action="ok.asp" method="post" target="_self">
<input type="text" name="tel">
<input type="button" value="등록" onClick="Check()">
</form> // 사용자 입력값 4자 미만인 경우
var tel=document.form1.tel.value
if (tel.length<4) {
alert("4자 이상 입력을!!")
}
// 사용자 입력값 4자 미만이거나 8자 이상인 경우
var tel=document.form1.tel.value
if (tel.length<4 || tel.length>9) {
alert("4자 이상 8자 까지 입력을!!")
}
radio, checkbox ...........................................................
사용자로 부터 입력을 받기도 하지만 어떤 데이타는 체크를 통해서 입력을 대신할 수 있다. 이것도 자주 사용하는 것으로 HTML이 가진 속성과 자바스크립트 객체가 가진 속성,메서드,이벤트 핸들러를 다줄 줄 알아야 한다

■ radio (HTML)
<input type="radio" name="sex" value="남" checked>남자
<input type="radio" name="sex" value="여">여자 radio 버튼은 여러개 중에서 하나만을 고를 수 있는 경우에 사용하여야 하며
동일한 name 값을 설정한다.

위의 경우 화면에 보이는 부분인 "남자"를 선택하면 value는 "남" 이 된다.
화면상의 라벨과 value가 반드시 같을 필요는 없다.

사용자의 편의를 위해 하나는 checked 속성으로 선택되어 있도록 할 수도 있다.

다른 항목을 체크하면 이전의 체크는 자동으로 빠진다.

■ checkbox (HTML)
<input type="checkbox" name="hoby" value="등산">등산
<input type="checkbox" name="hoby" value="낚시">낚시
<input type="checkbox" name="hoby" value="채팅">채팅 checkbox 버튼은 여러개 중에서 여러개를 고를 수 있는 경우에 사용할 수 있고
동일한 name 값을 설정해도 되고 안해도 된다.

위의 경우 화면에 보이는 부분인 "등산"를 선택하면 value는 "등산" 이 된다.
화면상의 라벨과 value가 반드시 같을 필요는 없다.

radio와 달리 checked 속성으로 선택되어 있도록 하는 것은 좀 이상하다.

■ radio, checkbox 객체 속성
name <input> 태그의 이름 설정 ,자바스크립트, asp 에서 이름을 사용함 value 태그안의 value 속성값 length 버튼의 개수 checked 체크된 경우 true, 안되면 false defaultChecked 버튼이 기본으로 체크되어 있는지 true ,false 로 리턴 type <input> 태그에 type에 설정한 값

■ radio, checkbox객체 이벤트핸들러
onClick 버튼 클릭시

■ radio객체 예제
radio 버튼은 항목이 여러개이므로 배열로 다뤄야...
아무 항목도 체크 안한 경우를 검사하는 스크립트

* radio는 디폴트 checked 를 준 경우는 체크 안된 경우는 없다.
* 한번이라도 한 항목이 체크되면 한 항목도 체크안될 수가 없다. <script language="javascript">

function Check(){

checkpoint=false // 체크안된 것으로 봄

// 배열이므로 반복문을 이용해서 배열요소에 접근
for(i=0 ; i<document.form1.sex.length ; i++){

if (document.form1.sex[i].checked==true) {
checkpoint=true // 체크된 것으로 만듬
}
}

// 반목문을 나온 checkpoint를 검사

if (checkpoint==false) {
alert("꼭 체크해 주세요!")
return
}

// 체크한 경우 submit() 메서드
document.form1.submit()
}
</script>

<form name="form1" action="ok.asp" method="post">
<input type="radio" name="sex" value="남">남자
<input type="radio" name="sex" value="여">여자
<input type="button" value="등록" onClick="Check()">
</form>

document.form1.sex.length radio 버튼 개수
document.form1.sex[i].checked==true i번째 버튼이 체크되었음

■ checkbox 객체 예제
checkbox 는 배열로 다룰 수도, 아닐 수도 있다.
name 속성을 같이 설정하면 배열로 다뤄야 한다.
<script language="javascript">

function Check(){

if (document.form1.agree.checked==false) {
alert("약관에 동의하셔야!")
return
}

// 체크한 경우 submit() 메서드
document.form1.submit()
}
</script>

<form name="form1" action="ok.asp" method="post">
<input type="checkbox" name="agree" value="yes">약관에 동의
<input type="button" value="등록" onClick="Check()">
</form>
document.form1.agree.checked == true 버튼이 체크되었음

* 동일한 name 을 설정하고 다중선택, 다중 삭제하는 예제는 asp TIP 을 참조! select ...........................................................
여러 항목중에 고를 수 있도록 한 목록 상자로 많이 사용된다. 보통 콤보 상자라고 많이 알고 있더라구.

■ select (HTML)
<select name="addr">
<option value="서울 마포구 드래곤">서울 마포구 드래곤아이
<option value="경기 군포시 드래곤">경기 군포시 드래곤아이
<option value="강원 원주시 드래곤">강원 원주시 드래곤아이
</select> select 태그에서 size=정수 속성으로 보여줄 리스트수를 설정할 수 있다.
select 태그에서 multiple 속성을 설정하여 여러개 선택을 할 수 있다.
option 태그에서 selected 속성으로 디폴트 선택을 줄 수 있다.

■ select 객체 속성
name 태그 name 속성값 (addr) length 목록의 개수 (3) selectedIndex 선택한 목록 인덱스 번호 (0 부터) options 목록상자 값을 배열로 (익스플로러 지원안됨) options[0].text 0번째 목록의 문자 (서울 마포구 드래곤아이) options[0].value 0번째 목록의 value (서울 마포구 드래곤) options[0].selected 0번째 목록이 선택되면 true 아니면 false options[0].defaultSelected 0번째 목록이 기본으로 선택되어 있는지

■ select 객체 이벤트핸들러
onChange 현재 선택된 목록이 아닌 다른 목록을 선택시


■ select 객체 예제 : 주소 검색 결과를 선택하기
<script language="javascript">
function Check(){

i =document.form1.addr.selectedIndex // 선택항목의 인덱스 번호
if (i<0) {
alert("주소를 선택!")
return
}

var address1 = document.form1.addr.options[i].value // 선택항목 value
var address2 = document.form1.addr.options[i].text // 선택항목 text
alert(address1) // value 확인
alert(address2) // text 확인
}
</script>

<form name="form1" action="ok.asp" method="post">
<select name="addr" size="3">
<option value="서울 마포구 드래곤">서울 마포구 드래곤아이
<option value="경기 군포시 드래곤">경기 군포시 드래곤아이
<option value="강원 원주시 드래곤">강원 원주시 드래곤아이
</select>
<input type="button" value="등록" onClick="Check()">
</form>
document.form1.addr.selectedIndex 선택항목의 인덱스 번호
==> 선택이 안되면 -1을 리턴
document.form1.addr.options[i].value 선택항목 value button, submit(image), reset, .................................................
버튼 ! 흔히 보는 자주 보는 버튼이지만 기능은 다 다르다. 자바스크립트로 접근하는
방법도 약간씩 다르다.

■ HTML(생긴건 비슷해도 맛은 다 다르므로 조심해야...)
<input type="button" name="button1" value="버튼"> <INPUT style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; COLOR: black; BORDER-BOTTOM: #000000 1px solid; HEIGHT: 18px; BACKGROUND-COLOR: #cccccc" type=button value=버튼> <input type="submit" name="button2" value="전송버튼"> <INPUT style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; COLOR: black; BORDER-BOTTOM: #000000 1px solid; HEIGHT: 18px; BACKGROUND-COLOR: #cccccc" type=submit value=전송버튼> <input type="image" name="button3" value="이미지"src="123.gif"> <INPUT style="BORDER-RIGHT: #000000 0px solid; BORDER-TOP: #000000 0px solid; BORDER-LEFT: #000000 0px solid; COLOR: black; BORDER-BOTTOM: #000000 0px solid; HEIGHT: 20px; BACKGROUND-COLOR: #cccccc" type=image src="http://www.dragoneye.co.kr/boardQ/IMG/write.gif"> <input type="reset" name="button4" value="초기화"> <INPUT style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; COLOR: black; BORDER-BOTTOM: #000000 1px solid; HEIGHT: 18px; BACKGROUND-COLOR: #cccccc" type=reset value=초기화> 버튼 : 아무 기능을 내장하고 있지 않은 것으로 onClick 이벤트핸들러와 자바스크립트로 기능을 줘야한다.

전송버튼 : 전송기능을 내장하고 있는 것으로 자바스크립트의 submit() 기능을 내장하고 있으므로 따로 submit()을 설정하면 드번 전송이 된다.

이미지버튼은 기능이 위의 전송버튼과 같이 전송기능을 내장하고 있으므로 주의를 !!!

리셋버튼은 누르는 순간 입력상자의 모든 값을 초기상태로 만들어 준다.

■ 객체 속성
name 위의 name 속성 value 위의 vaule 속성 type 위의 type 속성

■ select 객체 이벤트핸들러
onClick 버튼을 누른 순간 발생


■ 버튼이 여러개일때 누른버튼 구분하기 (매개변수이용) <script language="javascript">
function Check(i){
if(i=='1'){
alert("1번 버튼 오케이!")
return
}
if(i=='2'){
alert("2번 버튼 오케이!")
return
}
if(i=='3'){
alert("3번 버튼 오케이!")
return
}
if(i=='4'){
alert("4번 버튼 오케이!")
return
}
}
</script>
<form name="form1" action="ok.asp" method="post">
<input type="button" name="button1" value="버튼1" onClick="Check('1')">
<input type="button" name="button1" value="버튼2" onClick="Check('2')">
<input type="button" name="button1" value="버튼3" onClick="Check('3')">
<input type="button" name="button1" value="버튼4" onClick="Check('4')">
</form>


■ submit (image) 버튼 사용시 이벤트 핸들러 <script language="javascript">
function Check(){

alert("1번 버튼 오케이!")
return false // 주의 !!! form 태그에 이벤트핸들러 return 함수(), return false

}
</script>
<form name="form1" action="ok.asp" method="post" onSubmit="return Check()">
<input type="submit" value="버튼1">
<input type="image" src="123.gif">
</form> * 이미지버튼은 전송버튼과 자바스크립트 구문이 동일하다.

■ <IMG> 태그를 버튼으로 사용시 <script language="javascript">
function Check(i){

if(i=='1'){
alert("1번 버튼 오케이!")
return
}
if(i=='2'){
alert("2번 버튼 오케이!")
return
}
}
</script>

<form name="form1" action="ok.asp" method="post">
<a href="javascript:Check('1')"> <img src="123.gif" border="0"></a>
<a href="javascript:Check('2')"> <img src="123.gif" border="0"></a>
</form>

* 일반 이미지에 버튼기능을 부여하는 것은 button 사용법과 자바스크립트 구문은 동일하다. 입력값 체크와 전송 예제 .................................................
* 게시판 입문자를 위한 내용입니다.

폼태그를 이용해서 서버로 전송을 하는 경우 여러가지 이유로 우리는 동일한 버튼을 사용할 수 없는 경우를 자주 만나게 된다. 몇가지 전송기능을 가진 버튼을 사용하는 방법을 알아보고 기나긴 브라우저 객체를 마칠까한다.




■ button 이나 <IMG> 태그 이용은 같은 방법으로!!! <script language="javascript">
function Check1(){

var tel=document.form1.tel.value

if (tel=="") {
alert("전화번호는 꼬~옥!")
return // 호출한 쪽으로 제어권을 넘기므로 아래소스 실행를 막게된다
}

document.form1.submit() // button 자체에 submit() 기능이 없다
}
</script>

<form name="form1" action="ok.asp" method="post">
<input type="text" name="tel">
<input type="button" value="등록" onClick="Check1()">
<a href="javascript:Check1()"><img src="123.gif" border="0"></a>
</form>


■ submit 과 image 는 같은 방법으로 !!! <script language="javascript">
function Check2(){

var tel=document.form1.tel.value

if (tel=="") {
alert("전화번호는 꼬~옥!")
return false // 자신의 submit() 기능을 행사하지 못하도록
}

return true // 자신의 submit() 기능을 행사하도록

}
</script>

<form name="form2" action="ok.asp" method="post" onSubmit="return Check2()">
<input type="text" name="tel">
<input type="submit" value="버튼1">
<input type="image" src="123.gif">
</form>

■ 매개변수를 이용하여 action 을 바꿀 수 있다. <script language="javascript">
// 매개변수로 action바꾸기

function Check3(mtype){

var tel=document.form3.tel.value
if (tel=="") {
alert("전화번호는 꼬~옥!")
return
}

else {

if (mtype=="1") {
document.form3.action="ok1.asp" // 매개변수값이 "1" 일 때 action
document.form3.submit()
}
else if (mtype=="2") {
document.form3.action="ok2.asp" // 매개변수값이 "2" 일 때 action
document.form3.submit()
}

}

}
</script>

<form name="form3" method="post">
<input type="text" name="tel">
<input type="button" value="무료회원등록" onClick="Check3('1')">
<input type="button" value="유료회원등록" onClick="Check3('2')">
</form> navigator 객체 .................................................
* 미리 공부할 필요는 없는 과정이다. 어떤 정보를 가졌는지 대~~충 살펴보고~~

첫 강좌 브라우저 객체 계층 구조에서 보듯이 얘는 window객체가 아닌 따로 독립된 객체로 사용자의 브라우저 정보를 가지고 있는 객체로 사용자의 브라우저 상황을 파악하여 거기에 맞는 서비스를 하는데 이용할 수 있다.

* 고급 웹사이트 제작시, 국제적인 사이트 제작시, 고려할 필요가 있으며...
* 가급적이면 사용자 브라우저에 영향을 받지 않는 스크립트를 사용하는 게 좋고...
* 국내 서비스용은 익스플로러를 기준으로 많이 작성하는데 버전을 낮춰 제작하는게...

■ navigator 객체 속성
appName 브라우저 이름 appVersion 브라우저 버전 appCodeName 브라우저 코드명 userAgent 브라우저가 서버로 보내는 정보 mimeType 브라우저가 지원하는 MimeType (익스플로러 지원안함) plugins 브라우저가 지원하는 플러그인 정보 language 브라우저가 사용하는 언어 (익스플로러 지원안함) platform 시스템종류

■ 몇가지 정보 알아내기 <script language="javascript">
document.write(navigator.appName) // Microsoft Internet Explorer
document.write(navigator.appVersion) // 4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)
</script>
by Anna 안나 2008. 5. 21. 18:53
1. 기본 데이터베이스

2. 테이블 사용 : use test

//Database changed라는 출력과 함께 test라는 데이터 베이스에 접속,

//이 때에는 세미콜론 사용을 안 한다.

//또한 단일라인에서만 사용가능하므로 한 줄에 다 입력해야 함.

3. 현 데이터베이스 내의 테이블들을 출력 : show tables;


4. create table pet(name varchar(20), owner varchar(20),
species varchar(20), sex char(1), birth date, death date);

//name, owner, species, sex, birth, death의 정보를 가질 table을 생성,

//가독성을 높이기 위해 2줄에 걸쳐 타입


5. describe pet;

//pet이라는 테이블이 가지는 정보에 대해 검사, 이 때 필드 이름, 데이터 타입,

//NULL의 여부, Key의 여부, DEFAULT의 여부, 기타 에 관한 정보가 출력된다




6. load data local infile
'C:/mysql/pet.txt' into table pet;

//C:mysql에 있는 pet.txt 내에 있는 정보를 pet이란 테이블에 불러와서 입력한다.

//텍스트 파일로 데이터 입력시 각각의 필드는 tab이나 띄어쓰기로 구분하도록 디폴트

//텍스트 파일 입력 중 누락된 값들은 NULL값으로 자동처리된다.

//주의할 점은 mysql에서 위치입력시 Dos처럼 를 쓰는 것이 아니라 /를 사용한다


7. load data local infile
'C:/mysql/pet.txt' into table pet
lines terminated by 'rn';

//rn을 라인 터미네이터로 사용한다




8. insert into pet values('Puffball','Diane','hamster','f',1993-03-30',NULL);

//pet이란 테이블에 값을 입력, 이 때는 NULL을 써줘서 누락된 값을 표시한다.


9. select * from pet;

//pet테이블에 있는 모든 정보 출력



10. delete from pet;

//pet테이블에 있는 모든 정보 삭제, 이 명령어는 텍스트 파일의 자료 중 잘못된 값이 많을 때

//텍스트 파일의 정보 수정 후 다시 입력하려고 할 때 필요하다. 만약 정보 수정 후 바로 load

//data를 해주게 되면 정보가 중복입력이 되기 때문이다.




11. update pet set birth = '1989-08-31' where name = 'Bowser';

//pet 테이블에서 name이 Bowser인 줄의 birth를 1989-08-31로 수정한다,

//update A set B=C where D set E의 형태로 작성하면

//A테이블의 D필드의 값이 E인 줄에서 B필드의 값을 C로 수정한다.


12. select *from pet where name = 'Bowser';

//pet 테이블에서 name이 Bowser인 줄을 모두 출력한다.




13. select *from pet where birth >= '1998-1-1';

//pet 테이블에서 birth가 1998-1-1 이후인 줄을 출력한다.

//만약 비교연산자 사용시 문자를 사용하면 ASCII코드 값을 비교한다.

//예를 들어 select *from pet where name >='S';를 타입하면

//'T~Z'까지의 문자로 시작되는 이름을 가진 줄들이 출력된다.


14. select *from pet where species = 'snake' or species = 'bird';

//pet 테이블에서 species가 snake이거나 species가 bird인 줄을 출력한다.

//or 뿐만 아니라 and도 사용된다.

//예를 들어 select *from pet where species ='cat' and owner = 'Gwen';

//을 타입하면 pet 테이블의 species가 cat이고 owner가 Gwen인 줄이 출력된다.



15. select *from pet where (species='cat' and sex='m') or (species='dog' and sex='f');

//pet 테이블에서 species가 cat이고 sex가 m인 줄이거나 species가 dog이고 sex가 f인 줄은

//모두 출력한다.

//괄호를 쓰는 까닭은 and와 or 중 우선순위가 and가 더 높기 때문에

//혼용할 수 있으므로 방지차원에 쓴다.



16. select name, birth from pet;

//pet테이블에서 name과 birth필드값들을 모두 출력한다.

//이는 특정 행을 선택하여 출력하는 것과 같다.



17. select distinct owner from pet;

//pet테이블에서 같은 이름의 owner는 한 번만 출력하도록 owner필드값들을 모두 출력한다.




18. select name, species, birth from pet where species='dog' or species='cat';

//pet테이블에서 species가 dog이거나 cat인 줄의 name, species,birth를 출력한다.



19. select name, birth, (year(curdate())-year(birth) - (right(curdate(),5)<right(birth,5)) as age from pet;


//pet 테이블에서 name과 birth 그리고 age를 출력한다.

//age는 오늘 날짜(curdate()는 오늘 날짜를 불러오는 MySQL지원 메소드) 중 연도에서

//생일의 연도를 뺀 다음에

//right(curdate(),5)는 curdate() 중 오른쪽 5자리 (몇월-몇일)를 추려내서 birth의 월일과

//비교했을 때 작으면 1, 크거나 같으면 0이란 값을 출력하게 된다.

//(비교연산자 식이 true면 1, false면 0을 리턴한다)

//그래서 나온 값을 빼주면 나이가 된다.(조금만 생각해보시면 이 식이 이해가 갈껍니다.;;)



20. select * from pet where name like 'b%';

// pet테이블에서 name이 b로 시작되는 줄을 찾는다.

// '_'을 사용하면 단일문자 매칭

// '%'를 사용하면 문자의 부정 숫자를 매칭

// SQL 패턴 사용시 논리연산자 사용불가

// 대신 like 또는 not like를 사용할 수 있다.



21. select * from pet where name like '%fy';

// pet테이블에서 name이 fy로 끝나는 줄을 찾는다.



22. select * from pet where name like '%w%';

// pet테이블에서 name이 이름 내에 w를 포함하고 있는 줄을 찾는다.



23. select * from pet where name like '_____';

// pet테이블에서 5개의 문자로 name이 되어있는 줄을 찾는다.

// _의 갯수만큼의 문자검색을 할 수가 있다.



24. select * from pet where name regexp '^b';

// pet테이블에서 name이 b로 시작하는 줄을 찾는다.

// regexp는 테스트가 되는 값이 있는 모든 곳에서 매칭

// like는 전체값에서만 패턴매치를 진행



25. select * from pet where name regexp 'fy$';

// pet테이블에서 name이 fy로 끝나는 줄을 찾는다.



26. select * from pet where naem regexp 'w';

// pet테이블에서 name이 중간에 w를 가지고 있는 줄을 찾는다.



27. select * from pet where regexp '^.....$';

// pet테이블에서 name이 5문자인 줄을 찾는다.

// regexp에서는 .을 단일문자로 취급한다.



28. select * from pet where name regexp '^.{5}$';

// pet테이블에서 name이 5문자인 줄을 찾는다.

// {n}은 repeat - n - times 연산자이다.



29. select count(*) from pet;

// pet테이블에 몇 개의 줄이 있는지 찾는다.



30. select owner, count(*) from pet group by owner;

// pet테이블에서 owner의 이름에 따른 줄이 몇 개가 있는지 그룹화한 결과를 출력한다.

// group by n은 n이란 속성에 따라 그룹화한다.

// 만약 select 후 n만 사용하고 뒤에 group by n을 붙이지 않으면 에러가 발생한다.

// ex) select owner, count(*) from pet; <- ERROR 1140



31. select species, sex, count(*) from pet group by species, sex;

// pet테이블에서 species와 sex의 조합에 따른 줄이 몇 개가 있는지 그룹화한 결과를 출력한다.



32. select species, sex, count(*) from pet where species = 'dog' or species = 'cat' group by species, sex;

// pet 테이블에서 species 이름이 dog 나 cat인 줄들을 species와 sex의 조합으로 그룹화하여 결과를 출력한다.



33. select species, sex, count(*) from pet where sex is not null group by species, sex;

// pet테이블에서 sex가 null이 아닌 줄들을 species와 sex의 조합으로 그룹화하여 결과를 출력한다.



34. select pet.name, (year(date)-year(birth)) as age, remark from pet, event where pet.name = event.name and event.type='litter';

// pet테이블의 name과

// 오늘 날짜(date) 중 년도에서 birth의 년도를 뺀 것을 age로 한 것과

// remark를

// pet과 event 테이블에서

// pet테이블의 name이 event테이블의 name과 같고

// event테이블의 type이 litter인 줄을 출력한다.

// 만약 name이나 type처럼 두 테이블에 동시에 있는 field같은 경우

// (테이블명).(필드명)을 사용한다.

// 사용 안 할시 ambigugous 에러 발생

// ex) pet.name, event.type



35. select p1.name, p1.sex, p2.name, p2.sex, p1.species from pet as p1, pet as p2 where p1.species=p2.species and p1.sex='f' and p2.sex = 'm';

// pet테이블 과 pet테이블, 즉 같은 2개의 테이블에서

// pet테이블에서 species값은 같지만

// sex에서 값이 'f'와 'm'으로 다른

// 줄의 name, sex를 각각 출력하고 species도 출력한다.

// 이 때 두 species는 같으므로 한 테이블의 species만 출력



36. select name,birth from pet order by birth;

// pet테이블에서 birth를 기준으로 오름차순으로 정렬된 name과 birth 출력



37. select name,birth from pet order by binary name;

// pet테이블에서 name을 기준으로 대소문자 구별하여 오름차순으로 정렬된 name과 birth 출력

// binary를 사용하면 ASCII코드 값의 크기에 따라 정렬



38. select name, birth from pet order by birth desc;

// pet 테이블에서 birth를 기준으로 내림차순으로 정렬된 name과 birth를 출력한다

// 마지막에 desc입력시 내림차순 정렬

// desc는 바로 앞에 있는 birth에만 영향을 미친다.

// 하나의 컬럼 이상의 컬럼에 영향을 주고 싶을 땐 계속 써넣어줘야 한다.



39. select name, species, birth from pet order by species,birth desc;

// pet테이블에서 species와 birth 내림차순으로 기준을 한 name,species,birth를 출력한다.

// 먼저 species기준으로 정렬후 birth 내림차순을 기준으로 삼아 정렬한다.



40. show index from pet;

// pet테이블에 있는 인덱스들을 보여준다.



41. select max(article) as article from shop;

// shop 테이블에서 article중에서 가장 큰 값을 가진 것을 article이라는 이름으로 출력

// select max(A) as B from C;

// C테이블에서 A중에 가장 큰 값을 가진 것을 B라는 이름 하에 출력



42. select article, dealer, price from shop where price=(select max(price) from shop);

// shop 테이블에서 price가 가장 큰 값인 줄의 price를 선택하여 그 줄에 있는 article, dealer, price를 출력



43. select article, dealer, price from shop order by price desc limit 1;

// shop테이블에서 price를 내림차순으로 정렬하여 그 중 위에서 1개의 줄만 article,dealer,price를 출력

// limit에 들어가는 값은 출력해낼 줄의 숫자

// 47번 예제보다 좀 더 유동성있고 사용하기 편함



44. select article, max(price) as price from shop group by article;

// shop테이블에서 article, price 중에 가장 큰 값만 price로 하여 article로 그룹화한 결과를 출력



45. select article, dealer, price from shop s1 where price=(select max(s2.price) from shop s2 where s1.article = s2.article);

//shop테이블에서 price가 가장 높은 줄의 article,dealer,price를 출력한다.



46. select @min_price:=min(price),@max_price:=max(price) from shop; select * from shop where price=@min_price or price=@max_price;

// shop테이블에서 min_price라는 변수를 선언하고 그 값은 price중 가장 작은 값

// 또한 shop테이블에서 max_price라는 변수를 선언하고 그 값은 price중 가장 큰 값

// shop테이블에서 price가 min_price값을 가지거나 max_price값을 가진 줄 모두를 출력



47. select name, sex from pet where name='Claws' union select name,sex from pet where sex='f';

// pet테이블에서 name이 Claws인 줄의 name, sex를 출력하고

// pet테이블에서 sex가 f인 줄의 name,sex를 출력한다.

// union은 두 개의 쿼리문 결과를 붙여서 보여준다.

// 따라서 select하는 필드값은 일치해야 한다.
by Anna 안나 2008. 5. 21. 18:51
<?

$cnt = 0;
$result = mysql_list_tables($cfg[mysql_db]);
while ($row = mysql_fetch_row($result)) {
# 테이블 복구
$sql = " REPAIR TABLE `$row[0]` ";
sql_query($sql);

# 테이블 최적화
$sql = " OPTIMIZE TABLE `$row[0]` ";
sql_query($sql);

echo "$row[0] 복구 및 최적화...<br>";

$cnt++;
}

?>
by Anna 안나 2008. 5. 21. 18:51
<?
$connect_host = "localhost";
$connect_id = "디비아이디";
$connect_pass = "디비비밀번호";
$connect_db = "디비명";
$connect_table = "gb_member";//저장할테이블명을 적으시오...
$xls_filename = "filename.xls";

$connect=@mysql_connect($connect_host,$connect_id,$connect_pass);
$mysql=@mysql_select_db($connect_db,$connect);

header( "Content-type: application/vnd.ms-excel" );
header( "Content-Disposition: attachment; filename=memberDB.xls" );
?>
<table style="border-width:1; border-color:green; border-style:dotted;">
<tr align=center>
<?
$fields = mysql_list_fields("$connect_db", "$connect_table");
$columns = mysql_num_fields($fields);

for ($i = 0; $i < $columns; $i++) {
$field[$i]=mysql_field_name($fields, $i);
echo "<th>".$field[$i]. "</th>";
}
?>
</tr>

<?
$result=mysql_query("select * from $connect_table");
while($data=mysql_fetch_assoc($result)){
echo"<tr>";

for ($i = 0; $i < sizeof($field); $i++) {
echo "<td style='border-width:1; border-color:green; border-style:dotted;'>".$data["$field[$i]"]."</td>";
}

echo"</tr>";
}
?>
</table>
한글이 깨지는 경우는 위 내용중
아래부분 붉은색 추가.. =====================================================
header( "Content-type: application/vnd.ms-excel;" );
header( "Content-Disposition: attachment; filename=data.xls" );
?>
<table style="border-width:1; border-color:green; border-style:dotted;"> <meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
by Anna 안나 2008. 5. 21. 18:50
$user_dir = "file/$mb_id"; //넣고
$user_dir1 = "file/$mb_id/pic"; //넣고
$user_dir2 = "file/$mb_id/data"; //넣고
$user_dir3 = "file/$mb_id/etc"; //넣고.... //// 설정해준 디렉토리를 생성한다.....////
@mkdir($user_dir, 0707); // 만들고
@mkdir($user_dir1, 0707); //만들고
@mkdir($user_dir2, 0707); // 만들고//
@mkdir($user_dir3, 0707); // 만들자... 후.. 4개의 디렉토리 생성. /// 파일을 만들어준다.. 바보파일을..
$file = $user_dir . "/바보.txt // 바보.txt를 $user_dir 폴더에 만들어라... $f = @fopen($file, "w"); // ㅋㅋㅋㅋ
@fwrite($f, ""); // ㅌㅌㅌㅌㅌ
@fclose($f); //ㅌㅌㅌㅌㅌ
@chmod($file, 0606); // 123123
by Anna 안나 2008. 5. 21. 18:50
<?
$filename = "test.txt"; // 파일을 읽어서..
$String = @file($filename); // $string에 쳐 넣어서..
$cnt = count($String); // 넣은 파일 줄수를 세어보자... 줄수만큼.. 뺑뺑이 돌려주마..

for ($i=0; $i<$cnt; $i++){ //줄수만큼 뺑뺑이 돌려라..
$ss = Explode(";",$String[$i]); << 한줄씩 읽었으면... " ; " 구분자대로 잘라서 다시 집어 놓그라..
$total = count($ss); << 구분자로 끊은개 몇개냐...??? total이 값을 가지고 있겠구나.. echo "<hr>"; << 쉽게 표시하기 위해서 그냥 선그은거임..
for($t=0;$t<$total;$t++){ // 또 포문이네.. 이래도 되나 -_- 배열에 담은만큼 또 돌려라...뺑뺑이...
echo $ss[$t]."/"; // 구분자로 끈은 부분을 한개씩 출력해라..몇개?? $total 만큼 출력해라..
} //첫번째 뺑뺑이 닫고..
} // 두번째 뺑뺑이 닫고..
?> ..// 이렇게 했는데. 되긴 되는디... ======================================================= [출처] PHP - TXT 파일 잃어서 웹에 뿌리자... 뿌려..팍팍..|작성자 믄서
by Anna 안나 2008. 5. 21. 18:49
TRIO HTML 매뉴얼 Netscape - Javascript Guide http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/ - Navigator object hierarchy Diagram http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/navobj.htm#1005423 Mozilla(Firefox) - Gecko DOM Reference http://developer.mozilla.org/en/docs/Gecko_DOM_Reference - HTML Element Cross Reference http://developer.mozilla.org/en/docs/HTML_Element_Cross_Reference - Core JavaScript 1.5 Reference http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference - JavaScript Methods Index http://developer.mozilla.org/en/docs/JavaScript_Methods_Index
- JavaScript Properties Index http://developer.mozilla.org/en/docs/JavaScript_Properties_Index - CSS References http://developer.mozilla.org/en/docs/Category:CSS:References MSDN HTML and DHTML Reference - Objects http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects.asp
- Properties http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties.asp
- Methods http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods.asp
- Collections http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/collections.asp
- Events http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/events.asp
- HTML Elements http://msdn.microsoft.com/workshop/author/html/reference/elements.asp?frame=true
by Anna 안나 2008. 5. 9. 17:03
공부시작

HTML4.0, CSS2공부

HTML태그단어공부

HTML태그 요약공부

HTML 연습장

이름으로색상찾기

RGB 색상표

Netscape 색상표

Boranet 색상표

바조정 색상표

Gallery그림감상

Explorer메뉴창

fullscreen만들기

Rainbow 바탕화면

스라이드 쇼

스라이드방법 모음

바탕지진화면

flash 예제모음

artgall사진감상

Java Gallery 감상

각종샘플

이미지 왕복운동

접속 때 마다 배경색이 변하는 스크립트

들어가자마자 뜨는 윈도우

internet time지 보기

마우스움직여 바탕보기

마우스를 따라다니는 그림

패스워드 달기

시작Counter세기

ZOOM IN 시키기

마우스데면 보이기

폭축

글씨

타이핑 글자

출렁이는 글자

title글자

글씨 겹처쓰기

앞뒤 왔다갔다 글자

올라가는 글자

상하좌우로 교차되는 글자

영어글자체 견본

멋있는 영어글자

아름다운 글자색2

아름다운 글자색1

커다란Welcome글자

서서히 떨어지는 글자

움직이는 그림과 글자

춤추는 글자

타이핑 글자

마우스 따라다니는 글자

참고

비만도 측정

검색창 모음

internet time지 보기

계산기
공지창

마우스데면 사라지는 공지창

로드되며 작은공지창 띄우기

화면바뀌는 공지창

TV화면 공지창

바탕색이 변하는 창

방문횟수 메모장 띄우기

나갈때 메모장 띄우기

태극기 액자

보턴누르면 뜨는창

클릭하면 화면이 커지는창

박스가 멀리사라지는 창

위에서 나오는 공지창

좌측에서 나오는 공지창

빤짝빤짝 글자창

부라이트 공지창

벌이 날아와 꽃에앉은창

글자가 올라가 살아지는창

조준점이 나타나는 창

Welcome창

마우스데면 열리는 창

바둑판 칼러배경

클릭하면 뒤집히는 창

바탕과 글씨가 움직이는 창

컬러테두리 창

아래위 엇갈리는문

좌우 엇갈리는문

아래위로 열리는문

양쪽으로 열리는문

바,보턴

열기,닫기 보턴

불끄고 키기보턴

Button2

Button1

양음각Button

원형메뉴 보턴

캡술메뉴 보턴

캡술가로메뉴 보턴

사각메뉴 보턴

Banner창 모음

Banner창 달기

T-Banner창 달기

자동 scroller바2

자동 scroller바1

바 다운보턴 시계 티커

연월일시간

시,분,초,오전후

접속한 시간표시

상태바에 시간표시

카랜더 시계

움직이는 시계

둥근시계

탁상시계

원형시계

원형시계 출처 : Tong - 하늘아래땅님의 ★ TAG, HTML ★통 [출처] ♣ 홈페이지 꾸미기 참고자료 ♣|작성자 마이클
by Anna 안나 2008. 4. 26. 18:27
브라우저의 버그를 hack으로 해결할 수 있는 부분이 많이 있습니다만 그보다 사이트의 CSS구조를 설계할때 각 브라우저의 속성을 파악해고 조금만 더 주의해서 설계를 하시면 hack을 사용하지 않고도 해결할 수 있는 부분이 많이 있습니다. hack을 사용할때는 조금 더 신중하게 사용하시는게 좋습니다. 특히 예전 버전의 브라우저에 적용되었던 hack이 새로운 브라우저에 영향을 끼칠 가능성이 있으며 CSS를 변경 할 때 업무효율을 저하시키는 한 요인이 될 것 입니다.
Intenet Explorer계열의 브라우저에서 제대로 표시가 되지 않는 경우에는 일단 width값이나 float관련 설정을 변경해 보시는 것도 하나의 방법인 것 같습니다. 혹시 Intenet Explorer에서 float와 margin을 같은 방향으로 설정했을때 문제가 생긴 경우라면 이 포스트를 참조하시기 바랍니다. Netscape 4 제외시키기 Netscape 4은 media속성값에 “screen”이외의 값이 올 경우 읽어 들이지 못하는 것을 이용한 방법이다. <link rel="stylesheet" type="text/css" href="/css/style.css" media="all" /> 이나 <link rel="stylesheet" type="text/css" href="/css/style.css" media="screen, tv" /> 라고 지정할 경우 Netscape 4은 읽어 들이지 못한다. 부분적으로 읽어들이지 못하게 하는 경우에는 Caio’s hack인 /*/*/를 이용한다. 보통 코멘트는 */으로 닫지만 /*/으로 닫게 되면 Netscape 4에서는 인식되지 않는다. 그 뒤에 평상시의 코멘트 /* */를 적어두면 그 뒤의 스타일은 Netscape 4에서도 문제없이 적용된다. p {
/*/*/ color:white; /* */
} Mac IE 4.5, Netscape 4 제외시키기 @import룰로 url()함수를 이용하여 외부 스타일시트를 이중인용부호로 지정한다.
Mac IE 4.5는 @import에 url()함수를 이용하는 경우, 단일 인용부호와 인용부호가 없는 것이 아니면 읽어 들이지 못한다. Netscape 4은 @import를 지원하지 않는다. @import url("/css/style.css") Mac IE 5 제외시키기 CSS소스 안의 코멘트 서식을 /* \*/ 이라는 방식으로 기술한다. holly hack이라고 하며 그 뒤에 평상시의 코멘트 /* */를 적어두면 그 뒤의 스타일은 Mac IE 5에서도 문제없이 적용된다. p {
/* \\*/ color:white; /* */
} Win IE 4~5 제외시키기 셀렉터 바로 뒤에 /**/라고 적는다. p/**/ { color:white;} Win IE 4~5, Mac IE 4.5~5 제외시키기 프로퍼티와 값을 구분하는 콜론(;) 앞에 코멘트에 스페이스를 포함하여 /* */라고 적는다. p { color/* */:white;} Win IE 4~6, Mac IE 4, Netscape 4 제외시키기 셀렉터 앞에 html>body를 붙인다. html>body p { color:white;} Win IE 6 제외시키기 프로퍼티와 값을 구분하는 콜론(;)의 앞에, 스페이스와 코멘트를 /**/라고 적는다. p { color /**/:white;} star hack 셀렉트 앞에 *html를 붙이면, Win IE 4~6, Mac IE 4~5 등에는 스타일이 적용되고, 그 외의 브라우저에서는 적용되지 않는다. *html p { color:white; } underscore hack 프로퍼티의 가장 앞부분에 언더스코어(_)를 붙이면, Win IE 4~6에서 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다. p { _color:white; } hash hack 프로퍼티의 앞에 ?(#)을 붙이면, Win IE 4~6, Mac IE 5, Opera 7, Mozilla, Firefox에서는 스타일이 적용되고, 다른 브라우저에는 적용되지 않는다. p { #color:white; } star 7 hack 셀렉트의 앞에 html*을 붙이면, Win IE 5.5~6, Mac IE 5, Safari 등에서 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다. html*과 셀렉터사이에 스페이스를 넣지 않는다. html*p { color:white; } xmlns hack 속성셀렉터를 이용하여, html요소에 붙이는 xmlns속성을 스타일적용을 위하여 사용하는 방법.
Mozilla, Fire-fox, Opera 7/8, Safari, IE 7 등 속성셀렉터를 서포트하는 브라우저에서는 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다. html[xmlns] h1 { color:red; } :root hack 셀렉터의 앞에 :root를 붙이면, Mozilla, Firefox, Mac IE 5, Safari 등 :root유사클래스를 지원하는 브라우저에만 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다. :root h1 { color:red; } Tantek box model hack voice-family프로퍼티를 이용한 가장 유명한 박스모델핵. div#content {
width:500px;
voice-family: "\"}\"";
voice-family:inherit;
width:400px;
} Win IE 5용 패스필터 @media tty {
i{content:"\";/*" "*/}}; @import '/css/style.css'; {;}/*";}
}/* */ Win IE 5.5용 패스필터 @media tty {
i{content:"\";/*" "*/}}@m; @import '/css/style.css';/*";}
}/* */ Win IE 5-5.5용 패스필터 @media tty {
i{content:"\";/*" "*/}}@import '/css/style.css';/*";}
}/* */ 모던브라우저용 패스필터 @import "null?\"\{";
@import "/css/style.css";
@import "null?\"\}"; 이 이외에도 많은 핵(hack)이 존재한다. CSS Filters (dithered.com)에 다양한 CSS hack이 잘 정리되어 있으므로 참고하시길… 2006년 7월 18일, IE7용의 핵(hack)을 추가. IE7에만 적용 IE7에만 다른 스타일을 적용하는 방법은 해당 셀렉터의 앞에 *+html body 이나(*+html body는 Opera8~에도 적용되어 버리는 문제가 있기에 *+html>/**/body로 Opera8~ 전용 스타일을 기술하여야 한다. 참조:IE7のCSSバグとOpera CSS Hack) *:first-child+html 을 기술한 다음 해당 셀렉터와 스타일을 작성하면 된다. 예를 들어 #banner라는 id셀렉터에 적용시키는 경우 *:first-child+html #banner {
      :
  [IE7용 스타일을 기술]
      :
} 라고 기술한다. IE7이외의 브라우저를 위한 원래의 #banner 스타일 설정은 IE7용 스타일 설정 앞에 기술한다(순서가 바뀌면 원하는 효과를 얻지 못한다. 참조:IE7 の CSS ハック) #banner {
      :
  [IE7이외의 브라우저를 위한 스타일을 기술]
      :
}
*:first-child+html #banner {
      :
  [IE7용 스타일을 기술]
      :
} IE 6 and below (IE6이하) * html IE 7 and below (IE7이하) *:first-child+html, * html IE 7 only (IE7전용) *:first-child+html IE 7 and modern browsers only (IE7과 모던브라우저) html>body Modern browsers only (not IE 7) (IE7이외의 모던 브라우저) html>/**/body Recent Opera versions 9 and below (최근의 Opera9이하)
Opera 9와 Safari 동시적용 html:first-child Safari에만 적용
Opera 9와 Safari 동시적용 /* XXX \*/로 코멘트 아웃하고 html:\66irst-child를 덧붙임으로써 Safari에만 CSS가 적용된다. /* safari only \\*/
html:\\66irst-child div.globalContainer{
margin: 0 0 0 18px;
}
/* end */ 내용중 잘못된 부분이나 수정, 추가가 필요한 부분이 있으시면 의견 부탁드립니다. Opera와 Safari용 css hack이 동시 적용이 되는 문제를 김진태님이 지적해 주셨습니다.
by Anna 안나 2008. 4. 12. 22:23
http://www.pageoff.net/666
by Anna 안나 2008. 4. 12. 22:20
<a href="#" onclick="if(document.all) window.external.AddFavorite('http://dayeong.net', '다영쩜넷')">다영쩜넷 즐겨찾기 추가</a>

위와같이 소스를 적용하신 후에
다영쩜넷 즐겨찾기 추가를 클릭하시면
주소는 http://dayeong.net, 제목은 다영쩜넷으로 즐겨찾기에 추가됩니다.
by Anna 안나 2008. 4. 6. 04:43
웹 계정에서 지워지지 않는 폴더 및 파일 삭제하는 방법
(웹에서 생성된 노바디, apache 권한 폴더 및 파일 삭제하는 방법)
웹에서 생성된 노바디 파일 및 폴더 삭제하는방법 기본적으로 웹 서버는 nobody 권한으로 동작이 되게 됩니다. FTP로 계정에 접속하여 전송한 파일이 아니라 웹상에서 사용자들이 파일을 업로드한 경우나 웹상에서 생성된 파일이나 폴더의 경우 삭제가 되지 않아 난감할 때가 있습니다. 웹 서버의 동작 권한은 nobody이고 웹상에서 생성된 파일이므로, 해당 파일이 nobody 소유권으로 시스템에 생성되게 됩니다. 이렇게 생성된 파일이나 폴더가 삭제되지 않을 경우 아래와 같은 방법으로 웹상에서 실행시키면 지워지지 않는 파일이나 폴더를 삭제할 수 있게 됩니다. 1. 메모장을 열어 아래의 소스를 복사하여 붙여넣기 하신 후 주의 : 아래 `는 키보드 상의 왼쪽 위 물결(~)키와 함께 있는 기호입니다. <?

// 폴더 또는 파일 삭제시 $cmd = `rm -rf 노바디로 된 폴더명`; echo "$cmd"; echo "삭제되었습니다."; ?> * "노바디로 된 폴더명"을 삭제하고자 하는 폴더명으로 바꿔 주세요. 2. 파일 -> 다른 이름으로 저장 -> 아래 탭에서 파일 형식을 "모든 파일"로 선택 후 -> "원하는 파일명.php" 로 저장 (ex: del.php) 3. FTP를 통해 계정에 '원하는 파일명.php'를 업로드한 후 웹상에서 '원하는 파일명.php'를 불러내면 됩니다. ex: 만약 XXX 폴더/YYY 폴더 안에 삭제하고자 하는 zzz 파일이 있을 경우 XXX 폴더 안에 del.php를 업로드한 다음 (`rm -rf YYY`) 브라우저에서 http://도메인 주소/XXX/del.php 를 입력한 후 Enter 하면 됩니다. 4. del.php를 실행하면 YYY 폴더 안의 파일은 삭제되고 nobody 권한의 YYY 폴더는 그대로 남게 됩니다. (YYY 폴더 안의 파일들만 삭제됨) 이후 FTP로 계정에 접속한 다음 해당 폴더의 권한 설정을 777로 변경한 후 해당 YYY 폴더를 삭제하시면 됩니다. (아래와 같은 방법으로 하지 않고 FTP 프로그램에서 직접 권한 설정을 777로 변경하셔도 됩니다. - 어떤 경우에는 FTP 프로그램으로도 권한 변경이 되지 않을 경우도 있습니다.) ex) <? // 퍼미션 변경시 $cmd = `chmod -R 777 노바디로 된 폴더명`; echo "$cmd"; echo "퍼미션이 변경되었습니다."; ?>

5. 위의 에에서 XXX 폴더를 삭제하고자 할 경우에는 위 del.php에 삭제하고자 하는 폴더명 XXX를 입력(`rm -rf XXX`)한 후 del.php를 FTP로 웹상에 업로드한 다음 http://도메인 주소/del.php 를 실행하면 XXX 폴더 및 그 하위 YYY 폴더 안의 파일까지 모두 삭제가 됩니다. 만약 폴더가 삭제되지 않을 경우에는 삭제하고자 하는 XXX 폴더의 권한 설정을 777로 변경한 후 del.php를 실행시키면 됩니다.
by Anna 안나 2008. 4. 5. 22:41
((-------IMAGE-------))

-다운로드-
sunga_calendar.zip


카페나 클럽에서 사용하실분은 php가 안먹히니깐
최종 index.php 파일을 index.html 로 확장자이름을 바꿔서
사용하시기 바랍니다.

-각달마다 다른 배경을 미리 볼수있습니다
-오늘날짜 색상이 초록색으로 나오게 했구요, 또 하단에 현재 년도와 날짜 그리고 시간을 표시했습니다
-하단 왼쪽에 3개의 동그란아이콘 링크메뉴가 추가되었는데... 일기장과 양음력보기/전국날씨 소스 이렇게 링크가 걸려있습니다


첫번째 동그란 핑크색 아이콘메뉴는 다이어리나 일기장 혹은 일정관리를
링크해놓았는데 이것은 본인들이 알아서 제로보드 스킨에서 원하는 걸로
다운받아 설치하시기 바랍니다.

두번째 파랑색 아이콘메뉴는 양음력을 알수있는 양음력변환소스와
처음만난후 그동안 지낸날짜와 특별한 날짜가 며칠인지 알수있는
날짜소스를 넣었는데요
이것은 ca1.php 와 ca2.php 소스인데 함께 첨부해서 바로 링크를 걸어두었으니
아무것도 손댈필요없이 압축한 파일만 그대로 모두 업로드한다면
자동으로 링크가 걸려있습니다 한번 클릭해보세요~
첨에는 양음력변환소스만 넣었다가 허전해서 다시테이블짜서 처음만난날과 특별한날
소스도 함께 만들었답니다 ^^*

세번째 노랑색 아이콘은 슈퍼보드에서 제공하는 전국날씨소스를 링크걸었는데
제이름으로 받은거 그대로 올렸으니 그대로 사용하셔도 무방합니다
다른사이트에 더좋은 날씨소스를 링크하셔도 좋구요~

물론 이세가지 아이콘의 링크주소는 본인들이 알아서 다른 원하는
주소로 링크를 자유롭게 바꿔서 걸어주셔도 좋습니다

참고로 오늘의운세라든지 인터넷가게부나 일정관리등 다양하게
링크를 걸되 그크기에 맞게 새창뜨기소스에서 가로세로 조정만 잘 해주시면
딱맞는 사이즈로 이뿌게 새창뜨기 되도록 해놓았습니다
딱맞는 사이즈로 띄우면 스크롤이 필요없기에 노로 했습니다만
자료가 길다면 스크롤링 예스로 바꾸어야 겠지요?
물론 이것도 인덱스파일안에 추가 설명이 들어가있습니다

양음력변환기와 전국날씨소스를 그대로 사용하실분은 아무것도 손댈필요없습니다만
첫번째 다이어리만 반드시 본인들이 원하는 스킨으로 바꾸어주셔야 합니다
달력에 어울리는 링크를 건다고 했는데 더좋은 소스가 있다면 바꾸어주세요~

=========================설치방법====================================
다운받아 압축을 푼 sunga_calendar 폴더를 열어서 보시면
calendar 폴더와 clendar_f 폴더가 있습니다
일반폰트는 calendar 폴더를 업로드해주시고
웹폰트를 사용하실분은 calendar_f 를 업로드 해줍니다

일반폰트를 업로드하실분은 calendar 폴더 통채로 계정 첫디렉토리에 업로드 해줍니다

웹폰트로 된 calendar_f 폴더를 업로드 하실분은?
calendar_f 안에 있는 font폴더를 먼저
계정 첫디렉토리에 통채로 업로드 해줍니다
물론 이전에 폰트폴더가 있는 분들은 제꺼 폰트폴더 열어서 그안에 자료만
빼서 기존의 폰트폴더속에 업로드해주시면 되겠지요?
또 폰트폴더속에 그폰트가 있는분들은 폰트폴더는 업로드 하실필요 없겠지요? ^^*

그리고 나서 폰트 폴더는 삭제해버리고 calendar_f 폴더를 통채로
계정 첫디렉토리에 통채로 업로드 해줍니다

이제 웹주소창에다 아래주소를 그대로 복사한다음 웹주소창에 붙여넣고
앞에 본인 홈페이지 주소만 수정하시고 확인해보세요~

일반폰트 ☞ http://본인 홈페이지 주소입력/calendar/index.php
웹폰트 ☞ http://본인 홈페이지 주소입력/calendar_f/index.php

위에처럼 확인해서 성공적으로 나온다면?
아이프렘소스로 불러서 본인 홈페이지 테이블속에다
넣어 주시면 되는겁니다 아이프렘 어떻게 거냐구요?
카렌다 넣을 위치에 아래처럼.... 아이프렘소스를 적용하시면 됩니다 ^^*

<iframe src=http://본인 홈페이지 주소입력/sunga_calender/index.php frameborder=0 width=200 height=230 marginwidth=0 marginheight=0 scrolling=no></iframe>

아이프렘 가로세로 크기는 정확히 얼마인지 잘모르겠네요 ㅎㅎ
대충 비슷하게 잡아놨는데 달아보시고 알아서 조정하세요 ^^*

이러면 모든것이 끝났습니다 아주 간단하지요? ^^*

참그리고요 중요한 거...

배경이 마음에 안드는게 있다면?
추가로 배경이미지 8개를 더 만들어서 이미지 폴더속에 업로드 해두었습니다
d13_09.gif 부터 d20_09.gif 까지가 배경이미지입니다
그러니깐 각달에 09번이 배경이미지입니다
1d_09.gif 부터 12d_09.gif 중에서 마음에 안드는 이미지를 삭제하신후에
d13_09 부터 d20_09 중에서 원하는걸로 그달에 이름으로 바꾸어 주시면 됩니다

참고로 1d 는 1월달이고 12d는 12월입니다.
by Anna 안나 2008. 4. 5. 22:27
1.레이어를 만듭니다. <Div id="Pop" style="position:absolute; left:100px; top:100px; width:100px; height:100px; z-index:1;"></Div> Pop라는 이름의 레이어를 이렇게 생성합니다. 윈도우창 왼쪽에서 100px 위에서 100px 떨어진 곳에 시작하는 레이어죠. 2.레이어속에 원하는 내용물을 넣어줍니다. <Div id="Pop" style="position:absolute; left:100px; top:100px; width:100px; height:100px; z-index:1;"> <img src="이미지주소"> </Div> 3.레이어의 초기상태를 보이지 않게 숨겨둡니다. <Div id="Pop" style="position:absolute; left:100px; top:100px; width:100px; height:100px; z-index:1;display:none;"> <img src="이미지주소"> </Div> 4.이제 클릭할 경우 미리 만들어진 저 Pop 라는 레이어를 보여주면 됩니다. 간단한 스크립트를 작성하겠습니다. <script> function ViewLayer(){ document.getElementById("Pop").style.display='inline' } </script> 5.작성한 펑션을 불러오면 원하시는 작업이 끝이 납니다. <a href="javascript:ViewLayer();">열어주세요</a> ============================================================ 간단하게 작성한것들이 사용함에 불편함이 있을거예요. 예를들어 열었는 레이어를 닫아준다던가 하는 그런것들요. 자 그럼 스크립트를 조금 수정해서 사용하기 편하게 만들어 보겠습니다. <script> function ViewLayer(){ //만일 Pop라는 녀석이 닫혀있다면?? if(document.getElementById("Pop").style.display=="none"){ //열어주어라 document.getElementById("Pop").style.display='inline' //그렇지 않은 모든 경우라면?? }else{ //닫아주어라 document.getElementById("Pop").style.display='none' } } </script> 이렇게 작성하시면 한번 클릭하면 열리고 한번 더 클릭하면 닫히게 됩니다.
by Anna 안나 2008. 3. 21. 20:13
Div & Rounded box | Page Layout Series Part IX Home > Document > CSS > Page Layout Series > PLS Part IX


둥근 모서리 모서리가 둥근 box라는 물건이 언제 부터인지 유행인가 봅니다. 이런 형태의 box(rounded box)가 나온 시기는 대충 Windows XP 라는 OS가 나오면서 부터인 걸로 기억합니다만... 물론 실제로 그런 건지는 모르고 순전히 제 추측 에 불과 하지만 아마 2002 년도 전후가 아닌가 합니다. 제가 처음 둥근 모서리의 box를 보았을 때 제 스스로는 별 다른 감응이 없었습니다. 저는 지금도 XP를 쓰고 있지 않지만 그 당시에도 XP를 보고 '모서리가 둥글 둥글해 진 것 하고, icon 바뀐 것 말고 뭐가 달라졌지? 모서리가 둥글면 머 쩜 나은가. 저렇게 둥근 모서리를 만들기 위해서 programing 하는데 과연 얼마 만큼의 code가 더 들어 갔을까. 차라리 딴 데 신경 쓰는게 났지 않을까. ' 라는 생각이 들더군요. 이후의 진행을 보면 아시겠지만 program code가 아닌 HTML code로 둥근 모서리 box를 만드는 데도 만만치 않은 작업이 필요합니다. 그런데 둥근 모서리 box가 처음 등장한 이후로 Yahoo나 Naver 등의 포탈 사이트를 비롯하여 많은 사이트들이 rounded box를 전체 또는 일부에 사용하기 시작해서 지금은 '웬만해선 모서리가 둥근 box의 사용을 말릴 수 없는' 상태가 된 것 같습니다.

하지만 제 성격이 모난 탓 인지 아니면 미적인 감각이 남 보다 떨어져서 인지 저는 아직도 둥근 모서리 box를 별로 좋아하질 않아서 모서리가 둥근 테이블 에서와 같이 하나의 예를 들 경우에나 쓰든지 나중에나 쓸까 아직은 '모서리를 둥글게 깍을 시간이 있으면 그 시간에 차라리 딴 걸 하겠다!' 라는 생각이 드는 걸 보니 저도 참 미적인 부분에 대한 투자에 인색한 모양 입니다. 그럼에도 불구하고 왜 PLS Part IX 의 제목을 Div & Rounded box 로 정하고 이걸 다루려고 하느냐 하면 Div와 Table의 특성을 이해 하는데 아주 좋은 소재라고 판단이 되었기 때문 입니다. Div & Table and Rounded box 혹시 CADD(Computer Aided Design & Drafting)에 대해 아는 분 이라면 둥근 모서리 box 정도는 아주 가볍게 여기리라 봅니다. CAD 에서는 fillet 이라는 모서리를 둥글게 깍는 명령이 있어서 쉽게 둥근 모서리 box를 만들 수 있습니다. 저도 처음에 둥근 모서리 box(이후 'rounded box' 로 부르겠음)를 봤을 때 'HTML이나 CSS에도 fillet 같은 property가 있으면 좋겠다.' 라는 생각을 해 본 적이 있는데, 다행스럽게도 향후에 발표될 CSS Level 3(CSS3) 에서 border-radius 라는 spec이 생길 예정이라니 기대해 봄 직 합니다만 문제는 브라우저 들이 그 spec을 지원해 주느냐 겠지요. 하지만 현재의 HTML 이나 CSS 자체는 그런 property를 가지고 있지 않기 때문에 rounded box를 꼭 써야 될 필요가 있는 사람들은 CSS3가 나올 때 까지 마냥 기다릴 수는 없으므로 어떤 방법으로 이 물건을 쓰긴 써야 겠는데, HTML과 CSS를 사용해서 rounded box를 만들기 위해서는 어느 정도의 노력이 불가피 하다고 하겠습니다. Rounded box를 만드는 방법은 여러 가지가 있는데 우선 문서 중에서 rounded box 를 사용하는 부분의 상황이 어떤 경우인가에 대해 생각해 볼 필요가 있습니다. 즉, 아래와 같이 Box size의 고정 여부에 따라 가로 와 세로가 고정 가로는 고정, 세로는 가변(可變) 가로는 가변, 세로는 고정 가로와 세로 모두 가변 Box 내부와 외부 background-color 의 고정 여부에 따라 내부와 외부 모두 고정 내부는 고정, 외부는 가변(可變) 내부는 가변, 외부는 고정 내부와 외부 모두 가변 이렇게 위와 같이 분류할 수 있겠습니다. 따라서 가로와 세로의 size가 모두 고정이면서 내부와 외부의 background-color가 모두 고정인 경우는 '1a'와 같이 표기해서 구분하겠습니다. 그러므로 rounded box를 사용하려고 하는데 자기의 경우가 어떤 경우인지는 위와 같이 분류하면 거의 해결이 되겠죠. 그럼 위의 분류에 의해서 Case '1a' & '1b' 내용이 들어 가는 곳 이 경우는 비교적 간단합니다. 우선 왼쪽의 그림과 같이 원하는 크기와 색상 (width:150px, height:100px; 내부 background-color: silver 로 가정하겠습니다.)으로 rounded box를 image file로 만듭니다. 혹시 rounded box image file을 어떻게 만드는지 가르쳐 달라고 하시지는 않겠죠? 그건 각자의 역량에 달려 있으므로 각자 해결 하시기 바랍니다. 마음 같으면 그 것도 가르쳐 드리고 싶지만 여기서는 HTML, CSS 등의 웹 언어로 범위를 국한 하도록 하겠습니다. 하지만 혹시 필요하다면 http://www.nutrocker.co.uk/corners.html에서 일반적인 named color를 사용하여 미리 만들어 놓은 rounded box 에 사용 할 수 있는 corner image들을 압축 파일 형태로 제공하고 있으니 참고 하시지요. 제 경우에는 이런 image를 만들기 위해서 Fireworks를 사용하는데 여러분 들이 어떤 프로그램을 쓰건 이런 image를 만들 수 만 있다면 상관 없습니다. 왼쪽 그림(corners/150_100_c0c0c0_in.gif)의 경우 rounded box 내부는 silver(#c0c0c0)로 채우고 외부(모서리)는 투명(transparent)으로 처리한 gif file 입니다. 따라서 외부 background-color를 white, beige 등으로 바꾸어서 재사용(re-use)이 가능 하므로 '1a' 뿐만 아니라 '1b' 도 동시에 해결 할 수 있겠죠. Code는 아래와 같습니다. Case '1a', '1b' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<title>Case 1a1b</title>
<style type="text/css">
<!--
.case_1a1b{
background-image:url(corners/150_100_c0c0c0_in.gif);
width:130px; /* 표준 모드이므로 padding 10px를 감안하여 150px - 20px = 130px로 지정 */ height:80px; /* 표준 모드이므로 padding 10px를 감안하여 100px - 20px = 80px로 지정 */ padding:10px; } --> </style> </head> <body> <div class="case_1a1b">내용이 들어 가는 곳</div> </body> </html>

Case '1c' 내용이 들어 가는 곳 이 번 경우는 위의 예제인 case '1a1b' 의 경우와는 반대로 오른쪽 그림(corners/150_100_c0c0c0_out.gif) 과 같이 내부 배경색은 투명하고 외부의 모서리는 배경색을 가진 gif file 로 처리하여 내부를 white, beige 등으로 변경할 수 있습니다. 또한 이 경우에는 case '1a', '1b'와 마찬 가지로 gif file이 div의 배경으로 깔려 있기 때문에 div 내부에 내용을 넣을 수 있다는 장점이 있습니다. Case '1d' 또는 'd' 이런 경우가 생길 수 있을까요? 'd'의 경우와 같이 내부와 외부의 background-color 모두가 가변인 경우의 처리 방법은 제 머리로는 도저히 떠오르질 않는군요. 그런 방법을 아는 고수께서 제발 쩜 가르쳐 주시기 바랍니다. 'd'의 경우는 사실 분류를 하다보니 생긴 case로서 그야말로 'CSS3' 의 border-radius 같은 것이 나오지 않는 이상 해결할 수 없을 것 같습니다. 따라서 case 'd'의 경우는 이후로 생각하지 않겠습니다. Case '2a', '2b', '2c' 이 경우는 case '2c' 를 예로 들면 되겠습니다. 즉, width:200px 고정에 내부 background-color 가변, 외부 배경색 고정의 경우가 되겠네요. 여기에 사용될 그림은 아래의 와 가 되겠습니다. 아래의 code를 실행해 보시죠. Case '2c' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<title>Case 2c</title>
<style type="text/css">
<!--
.top_div{
background:#fff url(corners/150_top_out.gif) top center no-repeat;
width:130px; /* 표준 모드이므로 padding 10px를 감안하여 150px - 20px = 130px로 지정 */ } .bottom_div{ background:url(corners/150_bottom_out.gif) bottom center no-repeat; width:130px; /* 표준 모드이므로 padding 10px를 감안하여 150px - 20px = 130px로 지정 */ padding:10px; } --> </style> </head> <body style="background-color:gray"> <div class="top_div"> <div class="bottom_div">내용이 들어 가는 곳</div> </div> </body> </html>

DIV(DIVision marker) 의 특성 위의 실행 결과가 이해가 되시겠죠? 이런 방식으로 같은 block level box속에 block bevel box를 내포(nested)할 수 있는 element는 div 뿐이며, 같은 크기의 box를 box 자신 속에 내포 시켜서 같은 위치에 포개어 놓을 수 있는 특성은 오직 div 만이 가지고 있습니다. 즉, 위 결과를 나누어서 표현해 보면 아래와 같이 왼쪽 2 개의 box가 같은 위치에 포개어 졌다는 것을 알 수 있습니다. 물론 2 개 이상도 얼마든지 가능 하구요. + = 단, 위와 같이 같은 크기의 div를 같은 위치에 일치 시켜서 포개어 놓기 위해서는 아래의 사항을 유의해야 하며, 이 PLS 에서는 표준 모드(IE 의 !DOCTYPE switch on)를 기준으로 하므로 만약 표준 모드에 대한 내용을 모르고 이 페이지를 보신다면 PLS Part I 부터 보셔야 되겠습니다. 가장 밖에 있는 div를 제외한 내부에 들어 가는 나머지 div(들)에는 margin을 주지 말 것.
내포된 div (들)에 margin을 주면 각 모서리에 지정한 corner image들이 주어진 margin 만큼의 틈을 가지게 됩니다. 최 상위 div에 padding 을 주지 말 것.
위의 경우와 반대로 생각하면 설명이 되겠습니다. 최 상위 div를 제외한 내부 div에 border 를 주지 말 것.
이 또한 틈이 생기지 않게 하기 위한 요소 입니다. 최 하위 div에 padding을 줄 것.
만약에 rounded box 속에 들어갈 내용을 padding을 주어 일정 간격을 띄우고 싶으면 최 하위 div에 padding을 주어야 div box 사이에 틈이 생기지 않습니다. 이 역시 위의 두 항목과 같은 맥락 입니다. Div의 특성에 대해서는 이미 이 사이트 HTML > 고급 과정 > Division marker 에서 div와 span을 비교하여 설명한 바 있지만 그 때는 HTML 의 범위 내에 국한된 것 이었고, 이제 CSS 로 범위를 넓혀서 설명하면 대략 아래와 같이 DIV 는 기본값(intrinsic value)으로 주어진 margin이 없고, positioning 같은 방법을 쓰지 않아도 같은 위치에 같은 크기의 box를 포개어 놓을 수 있는 block level element. 라고 할 수 있습니다. Web design을 도시계획과 비교해 보면, 어떤 도시를 개발 한다고 했을 때 도시 전체의 기능이나 성격을 구상하는 master plan을 만들고, 주거 지역, 상업 지역 등으로 구획 정리를 한 다음, 구획된 면적에 정해진 규칙 대로 건물을 앉히게 되는데 div를 여기에 비유하면 하나의 구획 이라고 할 수 있습니다. 즉, 하나의 아파트 단지를 예로 들면 div는 아파트 단지의 대지 경게선(border)과 같다고 해도 무리가 아닙니다. 대지 경계선 이라는 실체는 분명히 있지만 직접적으로 눈에 먼저 보이는 것은 건물인 것 처럼 page layout 에서 div의 역할은, 건물처럼 사람이나 가구 등의 내용물을 직접 담고 있지는 않지만 분명한 경계선(border)을 가지고 있습니다. 그렇다면 div 속의 div는 어떻게 비교하면 될까요. 주거의 형태에 아파트 같은 공동 주거 단지만 있는게 아니고, 단독 주택 단지도 있는 것 처럼 div 속의 div는 단독 주택 단지 속의 일개 택지라고 하면 되겠군요...^^ Case '3a', '3b', '3c' 이 경우는 case '2a', '2b', '2c' 와 비교했을 때 90° 회전된 것 말고는 같으므로 생략하고, code 만으로 설명하면 아래와 같습니다. 예를 들어 height:200px의 rounded box를 만든다면 아래와 같을 것 입니다. 입력 ...
...
.left_div{
background:#fff url(그림이름.gif) left center no-repeat;
height:200px;
width:필요한px;
}

.right_div{
background:url(그림이름.gif) right center no-repeat;
width:필요한px;
height:200px;
padding:10px;
}
...
... Case '4a', '4b', '4c' 이 3 가지의 경우 '4b', '4c' 를 예로 들면 모두 해결이 되겠죠. 방법은 위에서 사용한 방법과 동일합니다. 다만 width와 height가 고정되지 않고 가변적이므로 각 4개의 모서리를 따로 처리해야 되는 번거로움이 있습니다만, 일단 만들어 놓으면 어디에나 쓸 수 있기 때문에 가장 바람직한 방법이라고 할 수 있습니다. '가변적' 이라는 것... 제가 가장 좋아하는 방법입니다. 지금 당장은 정해진 크기 말고는 쓸 일이 없을 것 같아도 사이트를 지속적으로 운영하다 보면 이상하게도 예외적으로 가변적인 크기를 쓸 일이 생기거든요. 희한한 일 입니다. 가로 세로 가변 크기의 box를 만들려면 우선 아래와 같이 4개의 corner image가 필요합니다. 아래는 case '4c'의 경우에 사용되는 image 들 입니다. tl.gif + tr.gif + bl.gif + br.gif = 이 image 들의 이름은 위에 표기한 것과 같이 예를 들어 tl.gif 의 경우 top left(좌측 상단) 로 CSS의 background-position:top left; 로 지정했을 경우의 첫 글자를 붙여서 지정 했습니다. 그럼 아래의 code를 '코드 실행기'로 실행해 봅시다. 실행하고 '코드 실행기'의 창 크기를 크게 또는 작게 resizing 해 보면 창 크기의 변동에 따라 rounded box의 크기가 신축성(flexibility)있게 변하는 것을 확인할 수 있습니다. 입력 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<title></title>
<style type="text/css">
<!--
.tl_gray{background:#fff url(corners/gray/tl.gif) no-repeat top left;}
.tr_gray{background: url(corners/gray/tr.gif) no-repeat top right;}
.bl_gray{background: url(corners/gray/bl.gif) no-repeat bottom left;}
.br_gray{background: url(corners/gray/br.gif) no-repeat bottom right;}
-->
</style>
</head>
<body style="background-color:gray;">
<div class="tl_gray">
<div class="tr_gray">
<div class="bl_gray">
<div class="br_gray" style="padding:20px;">내용이 들어 가는 곳.
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
</div>
</div>
</div>
</div>
</body>
</html>

곡면(경사면) 테두리의 anti-alias 처리과 solid 처리에 대한 고려 곡면이나 경사면을 처리하는 방법에는 anti-alias 와 solid 가 있습니다. 화면상의 화소(pixel)는 화면을 가로와 세로로 분할해서 표시(display)하기 때문에 4각형을 이루고 있습니다. 따라서 경사면의 테두리(각기 다른 색끼리 만다는 경계선)는 계단이나 톱니 처럼 각이 져 보이게 되죠. 그러므로 경사면의 경우 톱니의 거친 모양이 드러나게 되는데, anti-alias의 경우 톱니 모양의 빈 부분에 중간색 계열의 색상을 투명도 농담 등으로 처리하여 보정하므로써 부드러운 면처럼 보이게 하는 방법 입니다. 마치 바탕화면 등록정보에서 '효과 / 글꼴 가장자리 다듬기'와 같은 처리인데, anti-alias 처리를 하면 경사면이 부드러워 보이는 반면 단점이 몇 개 있는데, 그 중에 하나가 아래의 예와 같이 anti-alias 처리된 모서리의 내부 색상이 진할 경우 anti-alias 처리된 부분이 드러나게 된다는 것 입니다. anti-alias 곡면(경사면) 처리 내용이 들어 가는 곳.
내부 bgColor beige내부 bgColor gray 위의 경우내부를 gray 로 채우면 anti-alias 부분이 나타납니다. 하지만 아래와 같이 모서리의 image를 solid 로 처리하면 solid 곡면(경사면) 처리 내용이 들어 가는 곳.
내부 bgColor beige내부 bgColor gray 내부와 외부의 곡면 경계선에 아무런 틈이 생기지 않겠습니다. 정말 빈틈 없는 넘 이죠. 물론 solid의 경우 곡면이 거칠어 보인다는 단점이 있지만 말이죠. 그러니까 anti-alias와 solid의 차이는 '너의 단점이 나의 장점이고, 나의 단점의 너의 장점' 인 셈이 되겠군요. 따라서 여러분 들이 계획하는 페이지에서 둥근 모서리가 어떻게 쓰일 것인가에 따라 anti-alias와 solid 처리를 결정하면 되겠습니다. 그럼 여기에서 Div & rounded box 는 마치도록 하겠습니다. 사실 지금 쓰는 모니터가 19" 라서 1280 X 1024를 사용하고 있습니다. 그 전에는 17" 1024 X 768을 썼었는데, 19" 에 익숙해 지다 보니 화면 높이와 scroll bar 크기가 비례 한다는 것을 깜박 잊었습니다. 800 X 600 이나 1024 X 768에서 보니까 쩜 길긴 길군요... 다음의 PLS Part X 에서는 Table 과 rounded box에 대해 알아 보도록 하겠습니다.


이 문서의 저작권은 www.cadvance.org 에 있습니다.
by Anna 안나 2008. 3. 21. 18:07
일반적으로 margin과 padding을 구별하기가 힘듭니다.
간단한 예제소스를 만들어 연습하시면 이해가 쉬울것 같네요.

아래에 비교 예제를 올렸습니다.

margin : 특정 영역(box)의 바깥쪽 여백을 의미
padding : 특정 영역(box)의 안쪽 여백을 의미


((-------IMAGE-------))
by Anna 안나 2008. 3. 21. 18:05
필요에 따라 자바스크립트 php등을 부분 결합해서 많은 응용이 가능합니다

전 이것을 폴더를 담는 그릇으로 자바 스크립트를 이용해서 열림 닫힘 박스로 만들어,
쪼물딱 거리고 있는 프로그램의 서브메뉴 표현부에 쓰고 있습니다
포토샵으로 라운드를 그려놓고 확대시켜 일일이 css 픽셀을 맞춰 표현했기에 라운드가 정확합니다


장점이라면
css를 이용한 것이기에 로딩이 빠르고
혹 기타사유로 로딩이 실패해도 div로 자리매김 했기에 그림 파일로 만든 것 보다는 좀더 표현이 완만합니다
자바 스크립트나 그림파일등은 간혹 로딩중 에러가 나올수 있는고 거기에
비하면 사용하는 입장에서느 꽤 쓸모 있지 않을까 싶습니다

더블어 php 또는 자바 스크립트의 변수등을 이용해서
여러가지 사용자 정의 색을 한계 범위 없이 만들어 낼수 있습니다
ㅡ 실상 이부분 때문에 만들었구 디비와 결합해서 사용하고 있습니다
그림 파일등으로 표현하게 되면 사용할수 있는 색은 고정될수 밖에 없습니다 ㅡ

단점이라면 라운드가 고정이라는 ...
자바 스크립트의 라운드 테이블등이 나와 있기도 하지만 그보다 부드러운 표현이 가능하고 이중 테두리 구조이기에
용도에 따라 표현하기 좋을거 같습니다







<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
<head>
<style type="text/css">
body {
font: 14px Arial, Helvetica, sans-serif;
color: #000;
background-color: #fff;
}
/*
사용법: ┏━━━━━━━━━━━━ 높이와 넓이 ━━━━━━━━━━━━━┓
┃넓이 : 테이블을 감싸줄 DIV에서 조절 ┃
┃높이 : .CONTENTS에서 높이와 마진을 조절 ┃
┗━━━━━━━━━━━━ 높이와 넓이 ━━━━━━━━━━━━━┛ ┏━━━━━━━━━━━━ 바깥쪽 테이블 ━━━━━━━━━━━━━┓
┃테두리 색 : ┃
┃ .rt1에서 .rt6까지는 border-right border-left의 색을 조절 ┃
┃ .rt7 은 background-color로 라인의 색을 맞춰줌 ┃
┃ ┃
┃배경색 : ┃
┃.rt1에서 .rt6까지 background-color로 맞춤 ┃
┗━━━━━━━━━━━━ 바깥쪽 테이블 ━━━━━━━━━━━━━┛ ┏━━━━━━━━━━━━━ 안쪽 테이블 ━━━━━━━━━━━━━┓
┃테두리 색 : ┃
┃.rt1in1 에서 .rt2in4 까지는 border-right border-left의 색을 조절 ┃
┃.rt2in5 는 background-color로 라인의 색을 맞춰줌 ┃
┃ ┃
┃배경색 : ┃
┃.rt1in1 에서 .rt2in4 까지 background-color로 맞춤 ┃
┗━━━━━━━━━━━━━ 안쪽 테이블 ━━━━━━━━━━━━━┛ */ /* 바깥쪽 테이블 테이블: 시작 */
.rt1{
background-color: #fdfdfd;
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
margin : 0px 0px 0px 0px;
padding : 0px;
overflow: hidden;
height : 4px;
}
.rt2{
background-color: #fdfdfd;
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
margin : 0px 1px 0px 1px;
padding : 0px;
overflow: hidden;
height : 2px;
}
.rt3{
background-color: #fdfdfd;
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
margin : 0px 2px 0px 2px;
padding : 0px;
overflow: hidden;
height : 1px;
}
.rt4{
background-color: #fdfdfd;
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
margin : 0px 3px 0px 3px;
padding : 0px;
overflow: hidden;
height : 1px;
}
.rt5{
background-color: #fdfdfd;
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
margin : 0px 4px 0px 4px;
padding : 0px;
overflow: hidden;
height : 1px;
}
.rt6{
background-color: #fdfdfd;
border-right: 2px solid #ccc;
border-left: 2px solid #ccc;
margin : 0px 5px 0px 5px;
padding : 0px;
overflow: hidden;
height : 1px;
}
.rt7{/* 상하단 라인 */
background-color: #ccc;
margin : 0px 7px 0px 7px;
padding : 0px;
overflow: hidden;
height : 1px;
}
.rtoutLRline{/* 좌우 라인 */
background-color: #fdfdfd;
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
margin : 0px 0px 0px 0px;
padding : 0px;
overflow: hidden;
} /* 바깥쪽 테이블 테이블: 끝 */
/* 안쪽 테이블: 시작 */
.rt2in5{/* 상하단 라인 */
background-color: #000;
margin : 0px 8px 0px 8px;
padding : 0px;
overflow: hidden;
height : 1px;
}
.rt2in4{
background-color: #F2F2F2;
border-right: 2px solid #000;
border-left: 2px solid #000;
margin : 0px 6px 0px 6px;
padding : 0px;
overflow: hidden;
height : 1px;
}
.rt1in3{
background-color: #F2F2F2;
border-right: 1px solid #000;
border-left: 1px solid #000;
margin : 0px 6px 0px 6px;
padding : 0px;
overflow: hidden;
height : 1px;
}
.rt1in2{
background-color: #F2F2F2;
border-right: 1px solid #000;
border-left: 1px solid #000;
margin : 0px 5px 0px 5px;
padding : 0px;
overflow: hidden;
height : 2px;
}
.rt1in1{
background-color: #F2F2F2;
border-right: 1px solid #000;
border-left: 1px solid #000;
margin : 0px 4px 0px 4px;
padding : 0px;
overflow: hidden;
height : 1px;
} .rtinLRline{/* 좌우 라인 */
background-color: #F2F2F2;
border-right: 1px solid #000;
border-left: 1px solid #000;
margin : 0px 4px 0px 4px;
padding : 0px;
overflow: hidden;
} /* 안쪽 테이블: 끝 */
/* 내용 테이블 */
.CONTENTS{
margin : 0px 0px 0px 0px;
padding : 5px 10px 5px 10px;
height : 100px; }
</style> </head>
<body> css 처리한 라운드
<div style="margin : 0px 10px 0px 0px; width: 250px;">
<div class="rt7"></div>
<div class="rt6"></div><div class="rt5"></div>
<div class="rt4"></div><div class="rt3"></div>
<div class="rt2">
<div class="rt2in5"></div><div class="rt2in4"></div>
</div>
<div class="rt1">
<div class="rt1in3"></div><div class="rt1in2"></div>
<div class="rt1in1"></div>
</div>
<div class="rtoutLRline">
<div class="rtinLRline"> <div class="CONTENTS">
내용을 이곳에 넣으시면 됩니다 ^_____________________^*
</div> </div>
</div>
<div class="rt1">
<div class="rt1in1"></div><div class="rt1in2"></div>
<div class="rt1in3"></div>
</div>
<div class="rt2">
<div class="rt2in4"></div><div class="rt2in5"></div>
</div>
<div class="rt3"></div><div class="rt4"></div>
<div class="rt5"></div><div class="rt6"></div>
<div class="rt7"></div>
</div>
<br />
이미지 처리한 라운드( gif 파일 )
<br />
<img src="http://repter.ddam119.com/test/images/roundTable.gif" alt="이미지처리한 라운드 테이블" />
</body>
</html>


태그로 넣었더니 코드가 깨지네요 링크로 올립니다

http://repter.ddam119.com/test/roundTable.html
by Anna 안나 2008. 3. 1. 20:08
| 1 ··· 4 5 6 7 |