세이박스

자바스크립트를 이용해서 링크 클릭시 테이블 보이기 숨기기 style display 활용

웹프로그램

고객센터 질문과답변 페이지를 보여 줄때 답변 내용이 길게 나올 경우 페이지가 쭉 늘어나 정작 필요한 답변을 찾기가 쉽지가 않습니다.
이럴때 답변은 숨겨 놓고 질문 제목을 클릭하면 답변이 보이며 좀전 열었던 답변은 숨기는 기능을 자바스크립트와 style display을 이용해서 적용해 보겠습니다.


1. 자바스크립트 소스

<script language="javascript">
<!--
function QnaShow(qna) {
 /* 질문 갯수 만큼 추가 해 줍니다 */
 document.all.qna1.style.display = "none";
 document.all.qna2.style.display = "none";
 document.all.qna3.style.display = "none";
 /* 요청한 답변을 보이기 처리 입니다 */
 var obj = eval("document.all." + qna);
 obj.style.display = "block";
}
//-->
</script>



2. 테이블 소스

<table>
 <!-- 질문 1 -->
 <tr>
  <td><a href="javascript:QnaShow('qna1')">질문1</a></td>
 </tr>
 <tr id="qna1" style="display:none;">
   <td>답변1</td>
 </tr>
 <!-- 질문 2 -->
 <tr>
  <td><a href="javascript:QnaShow('qna2')">질문2</a></td>
 </tr>
 <tr id="qna2" style="display:none;">
   <td>답변2</td>
 </tr>
 <!-- 질문 3 -->
 <tr>
  <td><a href="javascript:QnaShow('qna3')">질문3</a></td>
 </tr>
 <tr id="qna3" style="display:none;">
   <td>답변3</td>
 </tr>
</table>


3. 소스 설명 :
제목을 클릭시 자바스크립트 QnaShow() 함수를 호출합니다.
이때 함께 전달한 qna 값으로 어떤 질문을 클릭했는지 구분합니다.
먼저 모든 질문을 숨기기 처리합니다.
1번 질문을 본뒤에 2번 질문을 클릭시 1번 질문을 숨기고 2번 질문의 답변을 보여주기 위한 처리인데 일괄적으로 모든 질문의 답변을 숨긴뒤에 원하는 답변만 보여주는 처리 입니다.
열려있는 질문만 숨기기 코딩하면 좋겠지만 오히려 소스가 복잡해줄수 있으므로 질문추가시 자바스크립트 항목중 document.all.qna3.style.display = "none"; 이부분도 함께 추가해 줍니다.
숨기기 처리가 끝나면 var obj = eval("document.all." + qna); 에서 obj로 클릭한 질문의 답변 <tr> id값을 조합합니다.
그리고, obj.style.display = "block"; 에서 지정한 <tr> style의 display 값을 block 으로 적용해서 보이도록 합니다.
이와같은 적용으로 페이지를 다시 접속하지 않고도 보이기 또는 숨기기 적용이 됩니다.


 ▶ 최신영화, 최신 미국드라마 무료 다운로드... 

[클래스] MySQL 테이블 복구 repair 명령어, SQL Error: Can't open file: 'sessions.MYI'. (errno: 145)

데이타베이스

어느날 갑자기 MySQL 테이블 하나를 읽을려고 할때 다음과 같은 메시지가 나타날 경우

SQL Error: Can't open file: 'sessions.MYI'. (errno: 145)

테이블이 오류가 난것입니다.
원인은 하나의 테이블에 지속적으로 접속자가 너무 많이 connection이 된 경우 혹은 MySQL 기록중에 DB서버가 강제 종료 혹은 리부팅 되는 경우 깨지는 경우가 종종 발생 합니다.

이처럼 비정상적으로 종료된 테이블인 경우 마지막 처리 과정을 복구해서 정상 동작 하도록 하는 명령어가 있습니다.

먼저 해당 테이블 DB에 접속합니다.

mysql -u아이디 -p db이름
비번 :
repair table tablename; 입력 혹은 그냥 엔터

또는 간단하게 한줄로

mysql -u아이디 -p비번 db이름 repair table 테이블명


  최신영화 보러가기... 


[mysql] ERROR 1016: Can't open file: '테이블명.MYD'. (errno: 145) 복구

데이타베이스

에러 메세지

Error 1016 : Can't open file: '테이블.MYI'. (errno: 145)


복구 방법

명령어 : mysqlcheck -u계정명 -p --auto-repair -B DB명

Enter password : 비밀번호

 
또는 mysql에 접속후 repair 테이블명; 을 해주셔도 됩니다.

mysql> repair table 테이블명;
+---------------------+--------+----------+----------+
| Table               | Op     | Msg_type | Msg_text |
+---------------------+--------+----------+----------+
| 테이블명           | repair | status      | OK          |
+---------------------+--------+----------+----------+
1 row in set (34.24 sec)

PHP 배열로 된 테이블의 값을 담은 값으로 테이블 만들기

웹프로그램
//배열로 input 테이블 만들기
<table border="0" cellpadding="3" cellspacing="1" bgcolor="#000000">
<?    
    //첫행이면 좀 넓게
    $sizevalue[0][0] = "15";
    $sizevalue[0][1] = "10";
    $sizevalue[0][2] = "3";
   
    //나머지행이면 좁개
    $sizevalue[1][0] = "30";
    $sizevalue[1][1] = "20";
    $sizevalue[1][2] = "10";
   
    for($i=0;$i<30;$i++) {
?>  
   <tr>
<? for($j=0;$j<5;$j++) { ?>
     <td align="center" bgcolor="#FFFFFF"><input name="manlevel2[<?=$i?>][<?=$j?>]" value="" type="text" id="manlevel2[<?=$i?>][<?=$j?>]" size="<? if($j==1) { echo $sizevalue[0][0]; } else if($j==2) { echo $sizevalue[0][1]; } else { echo $sizevalue[0][2]; } ?>" maxlength="<? if($j==1) { echo $sizevalue[1][0]; } else if($j==2) { echo $sizevalue[1][1]; } else { echo $sizevalue[1][2]; } ?>"></td>
<? } ?>
 </tr>
<?
    }   
?>
</table>
 
//배열로된 input 값 받아서 저장
for($i=0;$i<count($manlevel);$i++) {
  $checknum = 0;
  $manlevel_imsi = "";
  for($j=0;$j<count($manlevel[$i]);$j++) {
   if($i>0 && $j==0) $manlevel_imsi .= "||";
   if($j>0) $manlevel_imsi .= ",";
   $manlevel[$i][$j] = str_replace("|","&#124;",$manlevel[$i][$j]);
   $manlevel[$i][$j] = str_replace(",","&#44;",$manlevel[$i][$j]);
   $manlevel_imsi .= $manlevel[$i][$j];
   if($manlevel[$i][$j] != "") $checknum++;
  }
  if($checknum > 0) $manlevels .= $manlevel_imsi;
}
 
//배열로 저장된 값 테이블 만들기
$manlevel1 = explode("||",$manlevela);
for($i=0;$i<count($manlevel1);$i++) {
  $manlevel2 = explode(",",$manlevel1[$i]);
  for($j=0;$j<count($manlevel2);$j++) {
    $manlevel2[$j] = str_replace("&#124;","|",$manlevel2[$j]);
    $manlevel2[$j] = str_replace("&#44;",",",$manlevel2[$j]);
  }
}
?>

html table height=100% 안먹을 경우

웹프로그램
간혹 테이블 높이를 100%로 하고 싶을 때 있을겁니다.
그런데, 어떨땐 먹고 어떨땐 안먹고 왜그럴까요.
html 타입을 설정이 답입니다.
 
<!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">
<head>
</head>
<body>
<table height=100%>
 <tr>
  <td>a</td>
 </tr>
</table>
 
이렇게 할 경우 a라는 글자가 맨위로 가버리죠 원인은..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
이부분입니다.
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
이렇게 고치면 짜잔 정상으로 100%로 나올겁니다.
 
적용예 :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>table 100%</title>
</head>
<body style="margin:0px;" oncontextmenu="return false;">
<TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>
 <TR>
    <TD width="100%" height="25">a</TD>
  </TR>
 <TR>
   <TD height="100%">d</TD>
  </TR>
 <TR>
   <TD height="30">b</TD>
  </TR>
</TABLE>
</body>
</html>

테이블 검사 및 복구하기 - myisamchk

데이타베이스
[ myisamchk 란 ? ]

- DB 테이블에대한 오류 검사 및 오류 복구 유틸리티
- 버전 3.22.x : isamchk 유틸리티 사용
3.23.x : myisamchk 유틸리티 사용

[ myisamchk 사용전 주의사항 ]

- mysql 데몬을 stop 시킨후 이 유틸리티를 사용해야한다.
- mysql 데몬을 중지시킬수 없는 사항이라면 검사할 테이블에대한 rock을 걸고
검사를 수행하여야만 검사도중에 발생할수있는 오류를 막을수있다.
- 모든작업이 그렇듯이 항상 백업을 한후 작성을 수행하는것이 좋을것이다.

[ myisamchk 사용법 및 옵션 ]

- 해당 테이블이있는 디렉토리로 이동 ( 일반적으로 /usr/local/mysql/var 밑에
위치함 )

1.일반적인 검사

[root@angelsoma var]myisamchk [table 명]

Checking MYISAM file: [table 명]
Data records: 271 Deleted blocks: 0
- check file-size
- check delete-chain
- check index reference
- check record links
에러메시지가 없으면 테이블에 오류가 없다는것이다.

2.Global 옵션

[root@angelsoma var]myisamchk -s,--silent [table 명]

에러만 출력한다.

[root@angelsoma var]myisamchk -v,--verbose [table 명]

-s 옵션보다 많은 정보를 출력한다.

[root@angelsoma var]myisamchk -V

myisamchk 버젼을 표시한다.

3.Check 옵션

[root@angelsoma var]myisamchk -c,--check [table 명]

테이블의 에러를 check 한다.

[root@angelsoma var]myisamchk -e,--extend-check [table 명]

테이블을 좀더 세밀하게 check 한다. 일반적인 방법으로 error를 찾을수없
경우 사용하는 옵션이다.

[root@angelsoma var]myisamchk -F,--fast [table 명]

빠른게 테이블 check 한다.정교한 체크는 하지않느다.

[root@angelsoma var]myisamchk -C,--check-only-changed [table 명]

테이블을 check 하고,테이블을 check 이후의 상태로 변경한다.

[root@angelsoma var]myisamchk -f,--force [table 명]

테이블에 error에 있을경우 강재로 check 한다.

[root@angelsoma var]myisamchk -i,--information [table 명]

check한 결과의 정보를 통계화하여 보여준다.

Checking MyISAM file: insertdb
Data records: 8962 Deleted blocks: 0
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check data record references index: 1
Key: 1: Keyblocks used: 97% Packed: 0% Max levels: 2
Total: Keyblocks used: 97% Packed: 0%

- check record links
Records: 8962 M.recordlength: 241 Packed: 0%
Recordspace used: 100% Empty space: 0% Blocks/Record: 1.00
Record blocks: 8962 Delete blocks: 0
Record data: 2166962 Deleted data: 0
Lost space: 6796 Linkdata: 33634

User time 0.21, System time 0.02
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 92, Physical pagefaults 198, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0

[root@angelsoma var]myisamchk -m,--medium-check [table 명]

extend-check 옵션보다 check 속도가빠르며,99.9 % 의 에러을 찾을수있다.

4.Repair 옵션

[root@angelsoma var]myisamchk -o -B,--backup [table 명]

- recovering (with sort) MyISAM-table 'insertdb.MYI'
Data records: 8962
- Fixing index 1

MYD파일을 백업한다. 형식은 [filename-time.BAK]의 파일이 생긴다.

[root@angelsoma var]myisamchk -e,--extend-check [table 명]

세부적인 파일까지 복구를해준다.일반적으로 아주 하찮은 에러까지 찾을수
있다.하지만 자포자기의 상태가 아니고서는 이옵션을 사용하지 않는게 좋다.

[root@angelsoma var]myisamchk -f,-force [table 명]

이전것의 temporary file을 덥어쒸운다.

[root@angelsoma var]myisamchk -l,--no-symlinks [table 명]

심복릭 링크를 따르지않겠다는 옵션이다. 일반적으로 myisamchk 는symlink
points를 복구한다.

[root@angelsoma var]myisamchk -r,--recover [table 명]

unique key를 제외한 대부분를 복구한다.

[root@angelsoma var]myisamchk -n,--sort-recover [table 명]

sorting하면서 테이블을 복구한다. 심지어 temporary 파일과 같은 아주 큰
파일역시 sorting하면서 복구한다.

[root@angelsoma var]myisamchk -o,--safe-recover [table 명]

-r 옵션보다 느리게 복구한다.그러나 좀더 섬세한 복구를 지원한다.

[root@angelsoma var]myisamchk -q,--quick [table 명]

테이터 파일의 수정없이 복구한다.

5.기타 옵션

[root@angelsoma var]myisamchk -a,--analyze [table 명]

key의 distribution 을 분석한다.
만약, distribution 을 산출하고 싶을경우에는 --verbose 나 --describe 라
는 옵션과 동행해서 확인할수있다.

[root@angelsoma var]myisamchk -d,--descript-xion [table 명]

테이블에 대한 정보를 출력한다.

[root@angelsoma var]myisamchk -S,--sort-index [table 명]

index 블록을 sort한다.

[root@angelsoma var]myisamchk -R[index번호],--sort-records [table 명]

index 번호를 기준으로 인덱스를 정렬해준다.



6.검사중 아래의 메시지가출력되면 해당테이블을 사용중이라는 의미이므로 테
이블에 LOCK을 걸든가 데몬을 죽이고 나서 검사 및 복구를해야함.

myisamchk: warning: 1 clients is using or hasn't closed the table
properly

7.LOCK 걸기

myisamchk 는 테이블에대한 read 만 할수있으면 되기때문데 read 를 제외한
모든것에 lock을 걸면된다.

mysql> lock tables [table 명] READ ;
mysql> flush tables ;

flush tables 는 mysql이 테이블의 내용을 메모리에만 보관하고 실제 테이
블파일에 기록을하지 않았을경우 실제 테이블파일에 기록하라는 의미이다

8.LOCK 풀기

mysql> unlock talbe;

9.Myisamchk 로 복구를 위한 LOCK 걸기

서비스를 죽이지않고 복구를 해야할경우는 write lock를 걸어주면된다.
복구는 write 를 해야하기때문에 write lock를 걸어줘야한다.

mysql>lock tables [table명] write;
mysql>flush tables;

10.LOCK 풀기

mysql> unlock table;

MYSQL 테이블을 화일로 백업 및 복구

데이타베이스
1. 테이블을 화일로 백업 및 복구

-. 테이블 내용을 화일로 만들기

mysql> select * from test into outfile '/root/test.txt';  꼭 경로를 지정해야함

결과 :
2 이주상 02-504-xxxx 과천시 m 1971-02-02
3 임정남 02-420-xxxx 송파구 f 1971-03-03
4 강행모 02-856-xxxx 관악구 f 1971-04-04
5 이현영 0342-718-xxxx 분당구 m 1971-05-05
6 이병환 02-891-xxxx 하안동 m 1980-06-06
1 남상욱 333-4444 동작구 m 1971-01-01


-. 테이블 내용을 화일로 만들때 |로 구분하기

terminated 문을 쓴다.
mysql> select * from test into outfile '/root/test.txt' fields terminated by '|';

결과 :
2|이주상|02-504-xxxx|과천시|m|1971-02-02
3|임정남|02-420-xxxx|송파구|f|1971-03-03
4|강행모|02-856-xxxx|관악구|f|1971-04-04
5|이현영|0342-718-xxxx|분당구|m|1971-05-05
6|이병환|02-891-xxxx|하안동|m|1980-06-06
1|남상욱|333-4444|동작구|m|1971-01-01


-. 화일을 불러오기
load 명령어를 쓴다.
mysql> load data infile '/root/test.txt' replace into table test fields terminated by '|';

결과 :
mysql> select * from test;
+------+--------+---------------+--------+------+------------+
| no | name | tel | addr | sex | birth |
+------+--------+---------------+--------+------+------------+
| 2 |이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 |
| 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 |
| 4 | 강행모 | 02-856-xxxx | 관악구| f | 1971-04-04 |
| 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 |
| 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 |
| 1 |남상욱 | 333-4444 | 동작구 | m | 1971-01-01 |
+------+--------+---------------+--------+------+------------+

Ascii Code table 아스키 코드 테이블

웹프로그램

아스키 코드 테이블

사용자 삽입 이미지

테이블에 링크걸기

웹프로그램

<table style=cursor:hand; onclick=location.href="http://kissofgod.net">내용</table>

onclick="parent.frames[타겟이될프레임번호].location='링크될문서'"