· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Docbook Sgml/APM_tip-KLDP

APM 팁 모음

APM 팁 모음

김용일

$Date: 2003/08/07 01:04:21 $

홈페이지를 만들면서 그동안 조그마한 팁을 모아 놓은 것입니다.

고친 과정
고침 0.12002-11-16고친이 김 용일
최초 작성

차례
1. 소개
1.1. 이글은
1.2. 덧글
1.3. 도와 주신분
1.4. 저작권
2. 설치
3. Apache
4. Html
5. Perl
5.1. 펄 사용하기 위한 apache, mysql 설정
5.2. 디렉토리, 화일 만들기
5.3. 시간 출력및 테이블 내용 출력
5.4. 이름을 입력받아 mysql에 저장하고 출력하기
5.5. 입력 받는 부분을 체크 하기
6. Php
6.1. 노프레임 만드는법
6.2. 이름을 입력받아 mysql에 저장하고 출력하기
6.3. 이름을 입력받아 체크하고 mysql에 저장하고 출력하기
6.4. 테이블 출력 프로그램
6.5. mysql_fetch_array 예제
6.6. 이미지 화일 출력
6.7. 달력 예제
6.8. 원하는 문자열 검색(ereg)
6.9. 인증 예제
6.10. 커널 버전 나타내주는 함수
6.11. 도메인 표시 함수
6.12. 문자열 체크 함수 예제(ereg)
6.13. ID체크 해주는 프로그램
6.14. 게시물 페이지 변경 예제
6.15. 정규표현식
6.16. 영어 단어 검색
6.17. IP 소속기관,회사 알아보기
6.18. 현재의 년/월/일 구하기
7. 자바스크립트
7.1. idcheck를 위한 예제
7.2. 메뉴 만들기 예제
8. Oracle
9. Mysql
9.1. mysql 주기적으로 백업하기
9.2. mysql 루트 패스워드를 잃어 버렸을 때
9.3. 데이타 타입 (테이블 생성시 컬럼의 데이타 타입입니다.)
9.4. 쉘에서 DB 내용 보기
9.5. Mysql에 들어가기
9.1. 데이타 백업 받기 (화일로 받음)
9.2. 데이타 입력하기 (화일--> Mysql)
9.3. 사용자 만들기
9.4. 테이블 만들기
9.5. 테이블 보기
9.6. 테이블 데이타 입력하기
9.7. 특정 필드만 입력
9.8. 테이블내용 보기
9.9. 필드 추가
9.10. 필드 삭제
9.11. 기타 alter 용법
9.12. 데이타 삭제
9.13. 데이타 수정
9.14. 내림 차순으로 정렬
9.15. 무작위 정렬
9.16. 년도순으로 정렬
9.17. 년도, 번호순으로 정렬
9.18. 20살 이상이 몇명인가를 찾는다.
9.19. null 값 검색하기
9.1. null 값 검색하기
9.2. 검색 하기
9.3. 범위 검색
9.4. in 검색
9.5. not in 검색
9.6. 날짜 검색하기
9.7. 테이블 내용을 화일로 만들기
9.8. 테이블 내용을 화일로 만들때 |로 구분하기
9.9. 화일을 불러오기

1. 소개

1.1. 이글은

홈페이지를 만들면서 그동안 조그마한 팁을 모아 놓은 것입니다.

apache, mysql, php, perl 에 관련된 문서 입니다.


1.2. 덧글

한글을 살리고 나라를 살리는 길은, 과학적으로 으뜸가는 세벌식을 사용하는 것뿐입니다.

대한민국 과학기술을 살리는길은 쉬운 한글로 된 문서를 만드것입니다. 외국문서를 자기 혼자만 보고 말것이 아니라, 쉽게 번역, 보충해서 초중고생들로 볼수 있게 해야 합니다.

나라를 잘 살고, 부강하게 해야 하는 이유는 다른나라나, 인종에게 서러움을 받지 않기 하기 위함입니다.


1.3. 도와 주신분

관련서적과 여러 인터넷 사이트를 운영하고 계신 분들께 감사합니다.


1.4. 저작권

이 문서는 GNU Free Documentation License 버전 1.1 혹은 자유 소프트웨어 재단에서 발행한 이후 판의 규정에 따르며 저작권에 대한 본 사항이 명시되는 한 어떠한 정보 매체에 의한 본문의 전재나 발췌도 무상으로 허용됩니다.

본 저자는 문서의 내용이 야기할 수 있는 어떠한 결과에 대해서도 책임을 지지 않습니다.


2. 설치

  • 다운로드를 합니다.

    http://www.mysql.com/downloads/index.html

    http://apache.org/

  • 압축을 풀기

    tar xvfz mysql-3.23.7-alpha.tar.gz
    tar xvfz apache_1.3.12.tar.gz
    tar xvfz php-4.0.1.tar.gz
    tar xvfz ZendOptimizer-Beta2-Linux-glibc2.1.tar.gz
        

  • Mysql

    cd mysql-3.23.7-alpha
    
    ./configure --with-charset=euc_kr --prefix=/usr/local/mysql
    
    make
    make install
    
    ./scripts/mysql_install_db (처음 한번)
    ./bin/safe_mysqld &
        

  • Zend 옵티마이저

    cd ZendOptimizer-Beta2-Linux-glibc2.1
    mkdir /usr/local/Zend/
    mkdir /usr/local/Zend/lib
    cp ZendOptimizer.so /usr/local/Zend/lib
        

  • Apache

    cd apache_1.3.12
    ./configure --prefix=/usr/local/apache
        

  • Php

    cd ../php-4.0.1
    ./configure --with-mysql --with-oci8=/oracle/app/oracle/product/8.1.5/ -- with-apache=../apache_1.3.12 --enable-track-vars --disable-debug --enable-sigchild
    
    make
    make install
        

  • Apache

    cd ../apache_1.3.12
    ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a
    make
    make install
        

  • 수정 하기

    /usr/local/apache/conf/httpd.conf화일을 다음과 같이 편집을 합니다.

    AddType application/x-httpd-php .php .php3 .ph(확장자)
        

  • 예제

    index.php
    <?
    	phpinfo();
    ?>
        

  • /usr/local/lib/php.ini
    zend_optimizer.optimization_level=1
    zend_extension="/usr/local/Zend/lib/ZendOptimizer.so"
        


3. Apache

  1. CGI 사용하기

    apache 의 설정 화일인 httpd.conf 화일을 수정한다.

    CGI를 사용할 디렉토리 : /home/USER/public_html/cgi-bin

    ScriptAlias 를 설정합니다.

    ServerName www.formail.com 
    ServerAdmin USER@formail.org.com 
    ScriptAlias /cgi-bin/ /home/USER/public_html/cgi-bin/ 
           

  2. html 문서 디렉토리 설정

    아파치 설정 화일들 '/etc/httpd/conf/httpd.conf' , 'access.conf', 'srm,conf' 입니다.

    하지만, httpd.conf에서 대부분의 설정이 가능하다.

    UserDir public_html <-- 보통 이렇게 되어 있을 겁니다.

    그리고계정을 추가 하시면

    예를들어 abc라는 계정을 추가 했다면

    http://도메인/~abc 이렇게 됩니다.

  3. Url 설정

    http://도메인/~abc --> http://도메인/abc

    srm.conf 화일을 수정을 한다. 다음을 추가한다.

    Alias /abc /home/abc/public_html

    아파치를 다시 실행 시킨다.

    httpd restart or apachectl restart

  4. httpd.conf 예제

    # 아파치 서버를 설치하고 나서, localhost 를 하면 디폴트로 나오는 문서가 있는 디렉토리입니다.
    
    DocumentRoot "/home/httpd/kedu" # 손대지 말고 디폴로 그냥 나둡니다.
    
    
    
    #펄을 사용할때 CGI를 사용할때는 다음과 같이 설정을 해주어야 합니다.
    <Directory />
        Options FollowSymLinks ExecCGI
        AllowOverride None
    </Directory>
    
    #
    # Note that from this point forward you must specifically allow
    # particular features to be enabled - so if something's not working as
    # you might expect, make sure that you have specifically enabled it
    # below.
    #
    
    #
    # This should be changed to whatever you set DocumentRoot to.
    #
    <Directory "/usr/local/httpd/htdocs">  # 손대지 말고 디폴로 그냥 나둡니다.
    
    #
    # This may also be "None", "All", or any combination of "Indexes",
    # "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews".
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    
    #이것은 다음과 같이 설정을 해줍니다.
        Options Indexes FollowSymLinks Includes ExecCGI
    
    #
    # This controls which options the .htaccess files in directories can
    # override. Can also be "All", or any combination of "Options", "FileInfo", 
    # "AuthConfig", and "Limit"
    #
        AllowOverride None   # 통과
    
    #
    # Controls who can get stuff from this server.
    #
        Order allow,deny # 역시 통과
        Allow from all   # 손대지 말것
    </Directory>   #  손대지 말고 통과
    
    
    
    # 사용자 계정을 만들고 나서 유저의 index.htm 이 실행되는 디렉토리
    UserDir public_html
    
    
    
    #브라우저를 실행 할때 기본적으로 읽어 들이는 화일을 설정하는 곳입니다.
    
    DirectoryIndex index.htm index.html index.cgi index.php index.php3 
    
    
    # 펄을 사용할때 CGI 를 사용할때 다음과 같이 설정을 합니다.
    AccessFileName .htaccess
    
    <Files .htaccess>
        Order allow,deny
        Deny from all
    </Files>
    
    #php 를 사용할때는 다음과 같이 설정을 해줍니다.
    AddType application/x-httpd-php .php3
    AddType application/x-httpd-php-source .phps
    
    AddType application/x-tar .tgz
    
    
    #펄 CGI를 사용할때는 다음과 같이 설정을 해줍니다.
    AddHandler cgi-script .cgi
           


4. Html

다른 사이트로 넘어가기

<html>
<body>

<meta http-equiv='Refresh' content='0; URL=http://formail.org'>

</body>
</html>
  


5. Perl

5.1. 펄 사용하기 위한 apache, mysql 설정

  1. 아파치 설정

    펄이 설치 되어 있나 한번 봅니다.

    # which perl

    아파치 설정디렉토리 (/www/conf/httpd.conf)의 다음 내용이 없으면 추가를 합니다.

    AddHandler cgi-script .cgi 
    
    ScriptAlias /cgi-bin/ "/www/cgi-bin/" 
         
    AllowOverride None 
    Options None 
    Order allow,deny 
    Allow from all 
            

  2. 1) 펄 모듈 설치

    Perl `DBD'/`DBI' client code 는 최신 안정 버전을 사용한다.

    Perl 관련프로그램 두가지(세가지)를 다운로드한다.

    http://www.cpan.org/modules/01modules.index.html

    Msql-Mysql-modules-1.2204.tar.gz

    DBI-1.13.tar.gz

    Data-Dump-0.03.tar.gz

    ('Data-Dumper'), 'DBI', 'Msql-Mysql-modules' 을 순서대로 설치한다.

    2) 우선 압축된 패키지를 푼다.

    shell> tar xzvf DBI-VERSION.tar.gz 
    shell> tar xzvf Msql-Mysql-modules-VERSION.tar.gz 
           

    3) 생성된 디렉토리로 이동

    shell> cd DBI-VERSION 
           

    4. 컴파일 하고 설치

    shell> perl Makefile.PL 
    shell> make 
    shell> make test( 참고) 
    shell> make install 
           

    5) 테스트

    참고로 make test. 모든 모듈을 검증하기 때문이다.

    6) 나머지지 두개 패키지 설치

    나머지 'Msql-Mysql-modules'를 위와 같은 방법으로 설치한다.

  3. 테스트

    1) /www/cgi-bin/datedisp.cgi 이 화일을 vi 로 편집한다.

     
    #! /usr/bin/perl 
    print "Content-type: text/html"; 
    
    $date = `date`; 
         
    print ("Today is $date"); 
           

    2) 권한을 바꾸어 준다.

    chmod 755 datedisp.cgi 
           

    3) /www/cgi-bin 디렉토리에서 실행을 해본다.

     
    ./datedisp.cgi 
    or 
    perl datedisp.cgi 
           

    4) 브라우저에서 다음을 실행합니다.

     
    http://localhost/cgi-bin/datedisp.cgi
            


5.2. 디렉토리, 화일 만들기

디렉토리, 화일 만들기

#!/usr/bin/perl 

use Mysql; 

$dbh = Mysql->connect("","dbname","user","password"); 

print "Content-type: text/html"; 

mkdir('aaa/bbb' , 0777) or die print "디렉토리를 만들수 없습니다. 이미 만들어 졌습니다.<br>"; 
print "오게이 오게이"; 

&printf_file("aaa/bbb/test.htm"); 

exit; 

sub print_file{ 
my ($filename) = @_; 
      
$imsi; 
$top="<div align=left><table border=0 cellpadding=5><tr><td valign=top><p align=left><font face=굴림 size=2>";

$bottom="</font></td></tr></table></div>"; 
          
$parse{content} =~ s//<br>/g; 
                 
$imsi = $top; 
$imsi.= "안녕하세요. >(///)< 드세요."; 
$imsi.= $bottom; 
          
open(fh,">$filename"); 
print fh $imsi; 

close(fh); 
}
  


5.3. 시간 출력및 테이블 내용 출력

  1. Mysql 내용

    mysql> select * from test; 
    +------+--------+------+-------------+ 
    | id | name | age | tel | 
    +------+--------+------+-------------+ 
    | 1 | 김용일 | 29 | 02-825-xxxx | 
    +------+--------+------+-------------+ 
    1 row in set (0.03 sec) 
          

  2. 소스

    #!/usr/bin/perl 
    
    print "Content-type:text/html"; #웹에서 html을 볼수 있게 해준다. 
    
    useMysql; #mysql을 사용한다. 
    
    $dbh=Mysql->connect("","kbc","",""); #db와 펄을 연결한다. 
    
    #시간 값을 얻어 낸다. 
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); 
    
    #출력할 폼을 작성한다. 
    $date = sprintf("%d-%d-%d",$year += 1900, $mon+1, $mday); 
    
    print $date, " "; #출력을 한다. 
    
    #print '$curdate()'; #간단히 시간을 나타내는 방법 
    
    $query_string = "select * from test"; # 질의를 변수에 저장한다. 
    $sth=$dbh->query($query_string); #변수를 실행한다. 
    
    print $sth->fetchrow_array, " "; # 출력을 해준다.
           


5.4. 이름을 입력받아 mysql에 저장하고 출력하기

  1. Sql 을 작성한다.

     create table test ( 
       no int default '0' not null auto_increment, 
       name char(10), 
       regdate date, 
       PRIMARY KEY(no) 
     ); 
           

  2. name_input.htm 을 작성한다.

    <form name="form" method="get" action="/cgi-bin/write_db.cgi">
    <inputtype="text" name="name" size="10"> 
    <input type="submit" name="ok" value="보내기"> 
    </form>
           

  3. cgi 화일을 작성한다.

    #!/usr/bin/perl #이문서는 펄문서 임을 나타내준다. 
    
    %parse = &parse_input; # form, input을 가능하도록 정의를 한다. 
    
    print "Content-type:text/html"; # html을 사용가능하도록 한다. 
    
    print "입력 되었습니다. <br>"; 
    
    use Mysql; #Mysql 을 정의 해준다. 
    
    $dbh=Mysql->connect("","kedu","root",""); #Mysql을 펄에서 사용가능하도록 연결 시켜준다. connect("", "DB이름", "사용자", "비밀번호")
    
    $query_string = "insert into test values('','$parse{name}',curdate())"; # 이름과 시간을 변수에 저장한다. 
    
    $sth=$dbh->query($query_string); # 실행한다. 
    
    $query_string = "select * from test"; # 테이블 내용을 변수에 저장한다. 
    $sth=$dbh->query($query_string); # 실행을 한다. 
    
    while($row = $sth->fetchrow_arrayref) 
    { # 테이블의 마직막 레코드 까지 
      print "$row->[0] $row->[1] $row->[2]<br>"; # 테이블 내용을 출력 한다. 
    } 
    
    exit; # 분 문서(펄)의 끝임을 나타내 준다. 이하 함수를 정의 한다. 
    # 밑의 함수는 충분한 학습후 수정하고, 초보자는 그냥 그런가 보다 생각하고 넘어간다. 
    
    sub parse_input 
    { 
      my ($buffer,@parse,%parse,$key,$value); 
    
      if($ENV{'REQUEST_METHOD'} eq "GET")
      { 
        @parse = split(/&/,$ENV{'QUERY_STRING'}); 
      } 
      else { 
        read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); 
        @parse = split(/&/,$buffer); 
      } 
      foreach (@parse) 
      { 
        $_=~ tr/+/ /; 
        $_ =~ s/%([dA-Fa-f][dA-Fa-f])/pack("C",hex($1))/eg; 
        ($key,$value) = split(/=/,$_); 
        $parse{$key} = $value; 
      } 
      return %parse; 
    } 
           


5.5. 입력 받는 부분을 체크 하기

  1. Sql 작성 ( mysql DBNAME < test.tbl )

    create table test ( 
      no int default '0' not null auto_increment, 
      id char(10), 
      name char(10), 
      pw char(8), 
      regdate date, 
      regtime time, 
      PRIMARY KEY(no) 
    ); 
           

  2. check_input.htm 작성

    <html> 
    <body> 
    
    <table> 
    
      <form name="form" method="post" action=/cgi-bin/access_db.cgi> 
      <tr>
        <td>아이디 </td> 
        <td><input name=id size=10><br></td>
      </tr> 
      <tr>
        <td>이 름 </td> 
        <td><input name=name size=10><br></td></tr> 
      <tr> 
        <td>비밀번호</td> 
        <td><input name=pw size=10 type=password><br></td></tr> 
      <tr> 
        <td>비밀번호확인</td> 
        <td><input name=pw2 size=10 type=password></td></tr></table> 
    
      <input type="submit" value="보내기"> 
      </form> 
    
    </table> 
    </body> 
    </html> 
           

  3. access_db.cgi 작성(작성후 755 access_db.cgi 를 실행해서 실행모드로 바꾼다.)

    #!/usr/bin/perl 
    
    %parse = &parse_input; 
    
    use Mysql; 
    
    $dbh = Mysql->connect("","kedu","root",""); 
    
    print "Content-type:text/html"; 
    
    if($parse{id} eq ""){ 
      print "아이디를 입력하지 않았습니다.<br>"; 
      print "아이디를 입력 해주세요.<br>"; 
    } 
    elsif($parse{name} eq "" ){ 
      print "이름을 입력하지 않았습니다.<br>"; 
      print "이름을 입력 해주세요.<br>"; 
    } 
    elsif($parse{pw} eq "" ){ 
      print "비밀번호를 입력하지 않았습니다.<br>"; 
      print "비밀번호를 입력 해주세요.<br>"; 
    } 
    elsif($parse{pw2} eq "" ){ 
      print "비밀번호확인을 입력하지 않았습니다.<br>"; 
      print "비밀번호확인을입력 해주세요.<br>"; 
    } 
    elsif(($parse{id} =~ /^d/) || ($parse{name} =~ /^d/)) { 
      print "첫번째 글짜가 숫자로 되어 있습니다.<br>"; 
      print "첫번째글짜를 문자로 바꾸어 주세요.<br>"; 
    } 
    elsif(&registered_id($parse{id})) { 
      print "이미 있는 아이디 입니다.<br>"; 
      print "다른 아이디를 입력 해주세요.<br>"; 
    } 
    elsif($parse{pw} ne $parse{pw2}) { 
      print "비밀번호가 같지 않습니다. <br>"; 
      print "비밀번호를 다시 입력 해주세요. <br>"; 
    } 
    else { 
      print$parse{id}, "가 입력 되었습니다.<br>"; 
      $query_string = "insert into test values('','$parse{id}','$parse{name}','$parse{pw}', curdate(), curtime())"; 
      my $sth=$dbh->query($query_string); 
    } 
    
    $query_string = "select * from test"; 
    
    $sth=$dbh->query($query_string); 
    
    while($row = $sth->fetchrow_arrayref)
    { 
      print "$row->[0] $row->[1] $row->[2] $row->[3] $row->[4] $row->[5]<br>"; 
    } 
    
    exit; 
    
    sub registered_id 
    { 
      my ($id) = @_; 
      my ($query_string) = "select id from test where id = '$id'"; 
      my ($sth) = $dbh->query($query_string); 
      if($sth -> numrows eq "1") 
      { 
        return 1; 
      } 
      else 
      { 
        return 0; 
      } 
    } 
    
    sub parse_input 
    { 
      my ($buffer,@parse,%parse,$key,$value); 
      if($ENV{'REQUEST_METHOD'} eq "GET")
      { 
        @parse = split(/&/,$ENV{'QUERY_STRING'}); 
      } 
      else 
      { 
        read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); 
        @parse = split(/&/,$buffer); 
      } 
      foreach (@parse) 
      { 
        $_ =~ tr/+/ /; 
        $_ =~ s/%([dA-Fa-f][dA-Fa-f])/pack("C",hex($1))/eg; 
        ($key,$value) = split(/=/,$_); 
        $parse{$key} = $value; 
      } 
      return %parse; 
    } 
           


6. Php

6.1. 노프레임 만드는법

머리단과 바닥에 들어갈 화일을 작성하고 나서 본 화일에서 불러서 사용하면 된다.

main.php

 
<?php 

include("include/header.ph"); 

print_html("main_htm/top.htm"); 

echo("<br><br>본문 내용이 들어가는 곳입니다.<br>"); 
echo("내용은 별거 없습니다.<br>"); 
echo("프레임을 나누지 않고, 본문 내용을 사용하는 것입니다.<br>"); 
echo("본문내용을 서브 함수를 이용해서 만들면 됩니다.<br>"); 
echo("다음 작업을 위해 쉬운 내용을 아주 어렵게 했습니다.<br>"); 
echo("이내용을 잘 이해하면 여러면에서 도움이 될것입니다.<br>"); 

print_html("main_htm/bottom.htm"); 

?> 
  

include/header.ph

 
<? 
/* 한라인 출력해주는 함수 */ 
function print_html($filename)
{ 
	$fp = fopen( $filename, "r" ); 

	while(!feof($fp)) 
	{ 
		$contents .= fgets($fp, 100); 
	} 
           
  fclose($fp); 
  echo "$contents"; 
} 
?> 

	

main_htm/top.htm

<html> 
<head> 
<title>나라비의 방</title> 
<style TYPE="TEXT/CSS"> 
  A:link {color: blue; text-decoration:none} 
  A:visited {color: navy; text-decoration:none} 
  A:hover {color: red; text-decoration:underline;} 
</style> 
</head> 

<body> 
  <table border="0" width = "600" cellpadding="0" cellspacing="0"> 
    <tr><td width="589" colspan="2" bgcolor="#f9cd8a">나라비의 방을 찾아주셔서 대단히 감사합니다.</td></tr> 
    <tr> 
      <tr> 
        <td width = "120" valign="top" colspan="0"> 
          <table width = "120" border="0"> 
            <tr><td width="120" bgcolor="#b5d490"><p> <b><br>홈으로</b></font></td></tr> 
            <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">나라비 소개</font></td></tr> 
            <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">나리비 소식</font></td></tr> 
            <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">Windows NT</font></td></tr> 
            <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">시(김소월)</font></td> </tr> 
            <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">시(기타)</font></td> </tr> 
            <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">질문과답변</font></td> </tr> 
            <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">다른곳</font></td> </tr> 
          </table> 
       <td valign="top" align="center" width = "480">  
	

main_htm/bottom.htm

       </td> 
     </tr> 
   <tr> 
     <td colspan="2" align="center" valign="top">Copyright ⓒ 1999 nalabi.Mail to<a href="mailto:nalabi@hananet.net">webmaster</a></td> 
   </tr> 
  </table> 
</body> 
</html>

  


6.2. 이름을 입력받아 mysql에 저장하고 출력하기

  1. 테이블 작성 (mysql DBNAME < test.tbl)

    create table test ( 
      no int default '0' not null auto_increment, 
      name char(10), 
      regdate date, 
      PRIMARY KEY(no) 
    );
           

  2. name_input.php 작성

    <html> 
    <body> 
    
    <form name="form" method="get" action="write_db.php3"> 
    <inputtype="text" name="name" size="10"> 
    <input type="submit" name="ok" value="보내기">
    </form> 
    
    </body>
    </html>
           

  3. write_db.php 작성

    <? 
    // MySQL 서버에 연결한다 
    $connect=mysql_connect( "localhost", "root", "") or die( "SQL server에 연결 할수 없습니다."); 
    
    $tbl_list = mysql_list_tables("kedu"); //데이타 베이스를 설정합니다. 
       
    $result = mysql_query("insert into test (name) values ('$name')"); 
    $result=mysql_query($result, $connect ); 
    
    $tbl_name="select * from test" ; 
    $result=mysql_query($tbl_name, $connect ); 
    
    $print=mysql_fetch_array($result); //테이블의 내용을 가져옴 
       
    $rows = mysql_num_rows($result); 
    
    echo("입력 되었습니다..<br>"); 
    
    for($i=0; $i< $rows;$i++) 
    { 
      echo("$print[name]<br>"); 
      $print=mysql_fetch_array($result); 
    } 
    ?> 
           


6.3. 이름을 입력받아 체크하고 mysql에 저장하고 출력하기

  1. 테이블 작성 ( mysql DBNAME < test.tbl )

    create table test ( 
      no int default '0' not null auto_increment, 
      id char(10), 
      name char(10), 
      pw char(8), 
      regdate date, 
      regtime time, 
      PRIMARY KEY(no) 
    ); 
           

  2. check_input.php 작성

    <html> 
    <body> 
    
    <table> 
    <form name="form" method="post" action=access_db.php3> 
        
       <tr> 
         <td>아이디 </td> 
         <td><INPUT name=id size=10><br></td></tr> 
       <tr> 
         <td>이 름 </td> 
         <td><INPUT name=name size=10><br></td></tr> 
       <tr> 
         <td>비밀번호</td> 
         <td><INPUT name=pw size=10 type=password><br></td></tr> 
       <tr> 
         <td>비밀번호확인</td> 
         <td><INPUT name=pw2 size=10 type=password></td></tr></table> 
    
       <input type="submit" value="보내기"> 
    
    </form> 
    </table> 
    
    </body> 
    </html> 
           

  3. access_db.php 작성

    <? 
    // MySQL 서버에 연결한다 
    $connect=mysql_connect( "localhost", "root", "") or die( "SQL server에 연결 할수 없습니다."); 
    $tbl_list= mysql_list_tables("kedu"); //데이타 베이스를 설정합니다. 
    
    if($id == "") { 
      echo "아이디를 입력 하지 않았습니다."; 
    } 
    elseif($name == ""){ 
      echo "이름을 입력 하지 않았습니다."; 
    } 
    elseif($pw == ""){ 
      print "비밀번호를 입력하지않았습니다.<br>"; 
      print "비밀번호를 입력 해주세요.<br>"; 
    } 
    elseif($pw2 == ""){ 
      print "비밀번호확인을 입력하지 않았습니다.<br>"; 
      print "비밀번호확인을 입력 해주세요.<br>"; 
    } 
    elseif($pw != $pw2) { 
      print "비밀번호가 같지 않습니다. <br>"; 
      print "비밀번호를 다시 입력 해주세요. <br>"; 
    } 
    else { 
      echo "$id가 입력 되었습니다..<br>"; 
    
      $date = date("y-m-d", time()); 
    
      $result = mysql_query("insert into test values ('','$id','$name','$pw','$date','$time')"); 
      $result=mysql_query($result, $connect); 
    
      $tbl_name="select *from test" ; 
      $result=mysql_query($tbl_name, $connect ); 
    
      $print=mysql_fetch_array($result); //테이블의 내용을 가져옴 
      
      $rows = mysql_num_rows($result); 
    
      for($i=0; $i< $rows;$i++) 
      { 
        echo("$print[id] $print[name] $print[pw] $print[regdate]<br>"); 
        $print=mysql_fetch_array($result); 
      } 
    } 
    ?> 
           


6.4. 테이블 출력 프로그램

테이블 출력 프로그램

<? 
// MySQL 서버에 연결한다 
$connect=mysql_connect( "localhost", "username", "") or die( "Unabletoconnect to SQL server"); 
//-------------------------------------------------------------------------- 
// 사용가능한 DB 목록을 검색 
//-------------------------------------------------------------------------- 
$dblist = mysql_listdbs(); //데이타 베이스 목록을 인식한다. 
$dbnum=mysql_num_rows($dblist); //데이타 베이스 갯수를 변수에 저장한다. 

for($i=0; $i < $dbnum; $i++) //데이타 베이스 갯수 만큼 
{ 
  $dbname[$i] = mysql_dbname($dblist, $i) ; //데이타 베이스 목록 이름을 변수에 저장한다. 
} 
echo "데이타 베이스 검색 내용 <br>"; 
for($i=0; $i < count($dbname); $i++)
{ //데이타 베이스 갯수 만큼 
  echo "$dbname[$i] <br>"; // 데이타 베이스 이름을 웹에 나타내준다. 
} 

//-------------------------------------------------------- 
// 사용가능한 테이블 목록을 검색 
//-------------------------------------------------------- 

$tbl_list = mysql_list_tables("board"); //데이타 베이스를 설정합니다. 
$tbl_num=mysql_num_rows($tbl_list); // 테이블 갯수를 변수에 저장합니다. 

echo "<br>데이타 테이블 검색 내용--> 테이블명,레코드수<br>"; 
for($i=0; $i < $tbl_num; $i++) //테이블 갯수 만큼 
{ 
  $tbl_name[$i] = mysql_tablename($tbl_list,$i) ; // 테이블 이름을 변수에 저장 
  $result[$i] = mysql_query( "SELECT * FROM $tbl_name[$i]"); //테이블의 내용을 변수에 저장 
  $rows[$i] = mysql_num_rows($result[$i]); // 테이블의 레코드 수를변수에 저장 
  echo "$tbl_name[$i], $rows[$i], $name <br>"; //테이블의 이름과, 레코드수를 웹에 출력 해줍니다. 
} 

//-------------------------------------------------------------------- 
// 사용가능한 테이블 내용을 출력
//-------------------------------------------------------------------- 

$tbl_name="select * from test" ; 

$result=mysql_query($tbl_name, $connect ); 
$print=mysql_fetch_array($result); //테이블의 내용을 가져옴 

echo("<br>테이블 내용을 화면에 출력 시켜 줍니다.<br>"); 
echo("이름, 나이, 전화번호부, 주소<br>"); 
echo("$print[name], $print[age], $print[tel], $print[addr]<br>"); 
   

//------------------------------------------------------------------------------- 
// 사용가능한 테이블 내용을 전체 출력
//------------------------------------------------------------------------------- 
$que_bbs="select * from test" ; 

$result=mysql_query($que_bbs,$connect ); 
$print=mysql_fetch_array($result); 
$rows = mysql_num_rows($result); 
echo("<br>테이블 내용 전체를 출력 시켜 줍니다.<br>"); 
echo("이름, 나이, 전화번호부, 주소<br>"); 
for($i=0; $i < $rows; $i++) 
{ 
  echo("$print[name], $print[age], $print[tel], $print[addr]<br>"); 
  $print=mysql_fetch_array($result); 
} 
?>
  


6.5. mysql_fetch_array 예제

mysql_free_result 를 해서 메모리를 풀어 준다.

<?

mysql_connect($db_server, $db_user, $db_pass);

$result = mysql_db_query("$db_name","select * from $table_name");

while($row = mysql_fetch_array($result)) 
{
  echo $row["no"];
  echo $row["name"];
  echo " ";
}

mysql_free_result($result);
?>
    


6.6. 이미지 화일 출력

<?
Header("Content-type: image/gif");

$file = "test.gif";

$size = 4096;
if (!($fp = fopen($file, "r"))) 
{ 
  die("could not open input"); 
  exit; 
} 

while ($data = fread($fp,$size)) 
{ 
  print($data); 
}	
?>
    


6.7. 달력 예제

달력 예제

<?

// 변수값 설정
$date=01; 
$day=01; 
$off=0; 

//년도 달 설정
$year = '2000'; 
$month = '01'; 


/*  Figure out how many days are in this month  */ 
while (checkdate($month,$date,$year)): 
    $date++; 
endwhile; 

// 메뉴 표시하기
echo "<table width='420' ><tr><td align = center>$year 년 $month 월</td></tr></table>";
echo "<table border='1'  width='420'><tr>"; 
echo "<td><b><font face='돋음'>월</font></b></td>"; 
echo "<td><b><font face='돋음'>화</font></b></td>"; 
echo "<td><b><font face='돋음'>수</font></b></td>"; 
echo "<td><b><font face='돋음'>목</font></b></td>"; 
echo "<td><b><font face='돋음'>금</font></b></td>"; 
echo "<td><b><font face='돋음'>토</font></b></td>"; 
echo "<td><b><font face='돋음'>일</font></b></td>"; 
echo "<tr>"; 

//루프 돌리기
while ($day<$date): 

/*  Figure what day of the week the first falls on and set the number of preceding and trailing cells accordingly  */ 
if ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) == 'Sunday') 
{ 
    echo "<td>$day</td>"; 
    $off = '01'; 
}  
elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) ==  'Monday') 
{ 
    echo "<td></td><td>$day</td>"; 
    $off= '02'; 
}  
elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) ==  'Tuesday') 
{ 
    echo "<td></td><td></td><td>$day</td>";
    $off= '03'; 
}  
elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) ==  'Wednesday') 
{ 
    echo "<td></td><td></td><td></td><td>$day</td>"; 
    $off= '04'; 
}  
elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) ==  'Thursday') 
{ 
    echo "<td></td><td></td><td></td><td></td><td>$day</td>"; 
    $off= '05'; 
}  
elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) ==  'Friday') 
{ 
    echo "<td></td><td></td><td></td><td></td><td></td><td>$day</td>"; 
    $off= '06'; 
}  
elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) ==  'Saturday') 
{ 
    echo "<td></td><td></td><td></td><td></td><td></td><td></td><td>$day</td>"; 
    $off= '07'; 
}  
else 
{ 
    echo "<td>$day</td>"; 
} 

//일 증가 시키기
$day++; 
$off++; 

if ($off>7) 
{ 
    echo "</tr><tr>"; 
    $off='01'; 
} else 
{ 
    echo ""; 
} 

endwhile; 

echo "</table>"; 

?>
    


6.8. 원하는 문자열 검색(ereg)

어떤 문자열 중에서 000 이라는 문자열의 레코드를 찾아 내기

표현 :

int ereg(string pattern, string string, array [regs]);

사용법 :

ereg(찾을 패턴, 검사할 문자열, 결과 배열);

예제 :

ereg("([0]{3})", $hash[code], $regs)

각각의 패턴은 ()로 정의를 합니다.

([0]{3})는 0의갯수가 3개로 나와야한다는 의미이다.

([0]{2, 3}) 0의 갯수가 2개 혹은 3개를 의미

([0-9]{2, 3}) 0에서 9까지의 숫자가 2자리 혹은 3자리를 의미

    
<?

$sth = mysql_query("select * from kangsa_type order by code");

while($hash = mysql_fetch_array($sth)) 
{ 
  if(ereg("([0]{3})", $hash[code], $regs)) 
  {
    print "$hash[typename]";
  }
}

?>
    


6.9. 인증 예제

  1. auth.sql 을 먼저 작성을한다.

    # MySQL dump 6.6
    #
    # Host: localhost    Database: myhome
    #--------------------------------------------------------
    # Server version    3.23.8-alpha
    
    #
    # Table structure for table 'auth'
    #
    CREATE TABLE auth (
      id char(10) DEFAULT '' NOT NULL,
      passwd char(10),
      name char(10),
      level int(11),
      PRIMARY KEY (id)
    );
    
    #
    # Dumping data for table 'auth'
    #
    
    INSERT INTO auth VALUES ('nalabi','xxxx','김용일',1);
            

  2. auth.ph 인증하는 부분을 작성한다.

    <?php 
    
    cfunction authenticate() 
    {
      Header( "HTTP/1.0 401 Unauthorized"); 
      $title= "Invalid Login";
    ?> 
      아이디와 암호가 필요합니다! 
    <?php  exit;
    } 
    
    if(!isset($PHP_AUTH_USER)) 
    { 
      authenticate(); 
    } else 
    { 
      mysql_pconnect( 'localhost', 'root', '') or die( "Unable to connect to SQL server");  // MySQL 서버 접속 
            
      mysql_select_db( "test") or die( "Unable to select database");              // DB 선택 
            
      $result = mysql_query( "select name , level from auth where id='$PHP_AUTH_USER'  and passwd='$PHP_AUTH_PW' ");
            
      if(!mysql_num_rows($result)) 
      {  
        authenticate(); 
      } 
      else  
      { 
        $userinfo = mysql_fetch_array($result); 
      } 
    } 
    ?> 
            

  3. test.php 프로그램 하는데서 인증하는 부분을 적용한다.

    <?
    
    include ("auth.ph");
    
    echo("어서 오십시요.");
    
    ?>
            


6.10. 커널 버전 나타내주는 함수

kernel.php

<?
function kernel() 
{
  $label = array("안정버전","개발버전","알파버전");
  $cmd = "/usr/bin/finger @ftp.kernel.org| cut -c59-66 | sed -e '/^$/d'";
  exec($cmd,$array,$rtn);

  for($i=0; $i < count($array); $i++) 
  {
    list($v1, $v2, $v3)  = split('[/.-]' , $array[$i]);
    $version = "v".$v1.".".$v2."/linux-".$array[$i].".tar.gz";
		
    $label[$i] = "<a href = ftp://ftp.kernel.org/pub/linux/kernel/".$version.">".$label[$i]." : ".$array[$i]."</a>";
  }

  return $label;
}

$label = kernel();

echo("$label[0] <br> $label[1] <br> $label[2]");
	
?>
    


6.11. 도메인 표시 함수

whois 프로그램이 깔려 있어야 합니다.

rpm -qa | grep whois

 
    whois-1.0.10-1
    

프로그램

 
<?
function domain($string) 
{
  $cmd = "whois $string";
  exec($cmd,$array,$rtn);

  for ($i=0; $i < count($array); $i++) 
  { 
    $rstring .= "$array[$i]";
  }
  return $rstring;
}

print domain("formail.org");

?>
    


6.12. 문자열 체크 함수 예제(ereg)

문자열에 영어 대소문자, 숫자만 오도록 하게 하는 함수입니다

<?
function check_id($string)
{
  $error_msg = "error";

  if (ereg("[^a-zA-Z0-9]", $string)) 
  {
    $error_msg = $error_msg;
    return $error_msg;
  }
  else 
  {
    return $string;
  }
}

$id1 = "abcd";
$id2 = "ZabCA";
$id3 = "9Zab01";
$id4 = "#ab.c.%";
$id5 = "한글";

$msg = check_id($id1);
print "id1 : $msg";

$msg = check_id($id2);
print "id2 : $msg";

$msg = check_id($id3);
print "id3 : $msg";

$msg = check_id($id4);
print "id4 : $msg";

$msg = check_id($id5);
print "id5 : $msg";
?>
    


6.13. ID체크 해주는 프로그램

  1. sql 문

    # MySQL dump 7.2
    #
    # Host: localhost    Database: test
    #--------------------------------------------------------
    # Server version	3.23.11-alpha
    
    #
    # Table structure for table 'login3'
    #
    CREATE TABLE login3 (
      nick char(10)
    );
    
    #
    # Dumping data for table 'login3'
    #
    
    INSERT INTO login3 VALUES ('나라비');
            

  2. test.php

    <?
    function add_error($why, $reason, $nick) 
    {
      print "$reason<br>";
    }
    
    $nick= "나라비";
    
    if (ereg ("[~!@#$%^&*()~|"/'+=-_:;,.<>]", $nick)) 
    { 
      $why="닉네임"; 
      $reason="닉네임에 특수문자가 있습니다."; 
      add_error($why,$reason,$nick); 
      exit; 
    } 
                         
    if(ereg(" ", $nick)) 
    { 
      $why="닉네임"; 
      $reason="닉네임에 공백이 있습니다."; 
      add_error($why,$reason,$nick); 
      exit; 
    } 
                         
    if($nick=="") 
    { 
      $head = "닉네임"; 
      $mesg = "닉네임이 없습니다."; 
      add_error($head,$mesg,$nick); 
    } 
    
    if(strlen($nick) < 2) 
    { 
      $head = "닉네임"; 
      $mesg = "닉네임은 특수문자를 제외한 2자이상으로 넣어주세요."; 
      add_error($head,$mesg,$nick); 
    } 
    
    $server = "localhost";
    $name = "root";
    $passwd = "";
    $dbname = "test";
    
    mysql_connect($server, $name, $passwd);
    mysql_select_db($dbname);
    
    
    $que1 = "select nick from login3 where nick='$nick'"; 
    $result= mysql_query($que1); 
    $current_row = mysql_fetch_row($result); 
                         
    if($current_row[0] == $nick) 
    { 
      $head = "닉네임"; 
      $reason = $nick."님이  이미 등록되어 있습니다."; 
      add_error($why,$reason,$nick); 
    } 
    else 
    {
    	print $nick;
    }
    ?>
            


6.14. 게시물 페이지 변경 예제

  1. sql 문

    # MySQL dump 6.4
    #
    # Host: localhost    Database: test
    #--------------------------------------------------------
    # Server version	3.23.5-alpha
    
    #
    # Table structure for table 'login'
    #
    CREATE TABLE login (
      id char(10) DEFAULT '' NOT NULL,
      reg_date char(10),
      nick char(10),
      passwd char(10),
      name char(10),
      user_num int(11),
      address char(10),
      phone char(10),
      email char(10),
      job char(10),
      PRIMARY KEY (id)
    );
    
    #
    # Dumping data for table 'login'
    #
    
    INSERT INTO login VALUES ('nalab1','','aaaa','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nalab2','','bbbb','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nalab3','','cccc','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nalab4','','dddd','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nalab5','','eeee','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nalab6','','ffff','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nalab7','','gggg','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nalab8','','hhhh','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nalab9','','iiii','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nala10','','jjjj','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nala11','','kkkk','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nala12','','llll','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nala13','','mmmm','bbbb','1111',0,'1','cccc','dddd','eeee');
    INSERT INTO login VALUES ('nala14','','nnnn','bbbb','1111',0,'1','cccc','dddd','eeee');
            

  2. test.php

    <?
    
    $server = "localhost";
    $name = "root";
    $passwd = "";
    $dbname = "test";
    
    mysql_connect($server, $name, $passwd);
    mysql_select_db($dbname);
    
    
    $page_scale=3; //한페쥐당 보여줄 숫자 번호[1][2][3] 
    $scale=2; // 한페이쥐 당 보여줄 라인 개수(레코드)  
        
    if(!$star){ $star= 0 ;}  // 시작할 레코드 번호 - 1
        
    $page=floor($star/($scale*$page_scale));  // 페이지 수 얻기
    
    $que1="select DATE_FORMAT(reg_date,'Y.m.d'), id,nick, passwd ,name , user_num, address, phone,  email, job from login order by reg_date DESC " ; 
    
    $result = mysql_query($que1);
        
    $total = mysql_affected_rows(); //게시물 총 수
        
    $last=floor($total/$scale); //마지막 번호
        
    echo "<font size=-1>전체 등록자 : $total 명 입니다."; 
        
    echo "<html><title>회원관리</title><body bgcolor=ffffff><center><font size=4>회원관리 페이지</font>
            <table border=1><tr bgcolor=336699>
              <td align=center><font color=ffffff size=-1>등록일</font><td align=center><font color=ffffff size=-1>ID</font></td>
              <td align=center><font color=ffffff size=-1>닉네임</font></td>
              <td align=center><font color=ffffff size=-1>비밀번호</font></td>
              <td align=center><font color=ffffff size=-1>이름</font></td>
              <td align=center><font color=ffffff size=-1>주민등록번호</font></td>
              <td align=center><font color=ffffff size=-1>주소</font></td>
              <td align=center><font color=ffffff size=-1>연락처</font></td>
              <td align=center><font color=ffffff size=-1>E-Mail</font></td>
              <td align=center><font color=ffffff size=-1>직업</font></td>
              <td align=center><font color=ffffff size=-1>관리</font></td></tr>";
    
    if($star) 
    {  
      $n=$total-$star;  
    }
    else  
    {      
      $n=$total;  
    }
    
    for($i=$star ; $i< $star+$scale ; $i++)  //  star 에서 scale 까지 만
    {
      if($i< $total ) // 전체 자료 개수까지만 출력 
      { 
        mysql_data_seek($result,$i);
        $row=mysql_fetch_array($result);
                 
        $imsi=$row[5];
                 
        echo"<tr><td align=center><font size=-1>$row[0]</font></td>
               <td align=center><font size=-1>$row[1]</font></td>
               <td align=center><font size=-1>$row[2]</font></td>
               <td align=center><font size=-1>$row[3]</font></td>
               <td align=center><font size=-1>$row[4]</font></td>
               <td align=center><font size=-1>$row[5]</font></td>
               <td align=center><font size=-1>$row[6]</font></td>
               <td align=center><font size=-1>$row[7]</font></td>
               <td align=center><font size=-1><a href=mailto:$row[8]>$row[8]</font></a></td>
               <td align=center><font size=-1>$row[9]</font></td>
               <td align=center><font size=-1><a href=$admin_url?action=erase&num=$row[5]&start=$start>삭제</a></font></td></tr> ";
      }
            
      $n--;
    }
        
    echo "</table><br><br>";
         
    if($total>$scale)  
    {
      if($star+1>$scale*$page_scale)   
      {
        $pre_star=$star-$scale;
        echo"<a href='$PHP_SELF?star=$pre_star'> 이전</a>";
      }
              
      for($vj=0; $vj < $page_scale ; $vj++) 
      {
        $ln=($page*$page_scale+$vj)*$scale;
                  
        $vk=$page*$page_scale+$vj+1;
                  
        if($ln < $total) 
        {
          if($ln!=$star)   
          {
            echo"<a href='$PHP_SELF?star=$ln'><font size=2>[$vk]</a></font>";
          }
          else    
          {
            echo"<font size-2><b>$vk</b></font>";
          }
        }
      }
              
      if($total>(($page+1)*$scale*$page_scale)) 
      {
        $n_star=($page+1)*$scale*$page_scale;
                  
        echo"<a href='$PHP_SELF?star=$n_star'>다음</a>";
      }
    }
                    
    ?>
    
            


6.15. 정규표현식

  1. 정규식 표현

    a(b*) : a, ab, abb, a와 임의의 갯수들로 된 문자열
    a(b+) : ab, abb, abbb, ab와 임의의 갯수들로 된 문자열
    a(b?) : a or ab, a 다음에 b가 있어도 되고, 없어도 된다.
    a(b{3}) : abbb 
    a(b{2,}) : abb, abbb, abbbb, a 와 두개 이상의 b들로 된 문자열
    a(b{2.4}) : abb, abbb, abbbb, a 와 두개 이상, 네 개 이하의 b들로 된 문자열
    
    [a-z] : a-z 까지 문자열
    [a-zA-Z0-9] : 임의 영숫자
            

  2. 공백 문자

    [^0-9] : 임의 숫자가 아닌문자
    [~a-zA-Z0-9]: 임이의 영숫자가 아닌 문자
            

  3. 임의의 공백문자가 아닌 문자

    a.c : aac, abc, acc, a 와 c에 임의의 문자 하나가 끼어 있는 문자열
    ^a.* : a로 시작하는 임의의 문자열
    [a-c]*x$ : x, ax, bx, abax, abcx, a에서 c사이의 임의의 문자들로이루어지며, 마지막 문자가 x인 문자열
    b[ao]y : bay 또는 boy에인 문자열
    [^Zz]{5} : Z or z 가 포함되지 않은 길이가 5인 임의의 문자열
    [[:digit:]] : 임의의 숫자 , [0-9]
    [[:<:]a.* : a로 시작하는 임의의 문자열
    
    예) ^([0-9]{2,4})(-[0-9]{3,4})(-[0-9]{3,4}) : 전화번호(xxxx-xxxx-xxxx)
            
    임의의 공백문자가 아닌 문자


6.16. 영어 단어 검색

  1. engdic 프로그램이있나 확인하고 없으면 설치한다.

    which engdic

  2. test.php, exec 를 사용해서 engdic 프로그램을 실행한다.

    <?
    
    // 영한/ 사전 입니다.
    function engdic($string) 
    {
      $cmd = "engdic $string";
      exec($cmd,$array,$rtn);
    
      for ($i=0; $i < count($array); $i++) 
      {
        $rstring .= "$array[$i]";
      }
      return $rstring;
    }
    
    print engdic("hello");
    
    ?>
            


6.17. IP 소속기관,회사 알아보기

  1. fwhois 프로그램이있나 확인하고 없으면 설치한다.

    which fwhois

  2. test.php, exec 를 사용해서 engdic 프로그램을 실행한다.

    <?
    
    //아이피 소속 회사, 기관 알아내는 함수
    function ip($string) 
    {
     $cmd = "fwhois $string"."@whois.nic.or.kr";
     exec($cmd,$array,$rtn);
    
     for ($i=0; $i < count($array); $i++) 
     {
       $rstring .= "$array[$i]";
      }
      return $rstring;
    }
    
    print ip("210.180.116.238");
    
    ?>
            


6.18. 현재의 년/월/일 구하기

<?
function date_selector($name, $date) 
{
  $monthname = array(1=>"1월", "2월", "3월", "4월","5월","6월","7월","8월","9월","10월", "11월","12월");

  if($date == "") 
  {
    $date = time();
  }

  //년
  print "<select name = ".$year." year > ";

  $start_year = date("Y", $date);

  for($current_year = $start_year - 5; $current_year <= $start_year + 5; $current_year++) 
  {
    print "<option value = $current_year";

    if(date("Y", $date) == $current_year) 
    {
      print " selected ";
    }

    print " > $current_year ";
  }
	
  print "</select>";
	
  //월
  print "<select name = ".$month." month >";
  for($current_month = 1; $current_month <= 12; $current_month++) 
  {
    print "<option value = $current_month ";
		
    if(date("m", $date) == $current_month) 
    {
      print " selected ";
      print ">";
      print $monthname[$current_month];
			
    }
    else 
    {
      print ">";
      print $monthname[$current_month];
    }
		
    print " ";
  }

  print "</select>";

  //일
  print "<select name = ".$day." day >";
	
  for($current_day = 1; $current_day <= 31; $current_day++) 
  {
    print "<option value = $current_day ";
    if(date("d", $date) == $current_day ) 
    {
      echo " selected ";
    }
    echo " > $current_day 일";
  }
	
  print "</select>";
}

echo "<html>
<head>
<title>연습</title>
<body>";

if(isset($month)) 
{
  //$use_date = mktime(0, 0, 0, $sample_month, $sample_day, $sample_year);
  $use_date = mktime(0, 0, 0, $month, $day, $year);
}
else 
{
	$use_date = time();
}

print "<form action = cal.php method = post>";
print date_selector("cal", $use_date);

echo "<input type = submit value = 입력>
</form>
</body>
</html>";

?>
    


7. 자바스크립트

7.1. idcheck를 위한 예제

기존에 아이디가 있나 없나를 체크를 하기 위해서.

idcheck.htm

<html>
<script language="JavaScript">

function id_chk(obj)
{
  var form = document.select1;
  var w_id_chk;
  if ( form.s_id.value == "" ) 
  {
    alert("아이디를 입력하지 않았습니다.");
    form.s_id.focus();
    return;
  } else if ((form.s_id.value.toString().length < 4) || (form.s_id.value.toString().length > 10)) 
  {
    alert("아이디는 4자이상 10자이내로 입력하여 주십시요.");
    form.s_id.focus();
    return;
  }
  ck=1;
  var str = 'idcheck.php?s_id='+obj.s_id.value;
  window.open(str,'w_id_chk','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=300,height=150');
  return;
}

</script>

<body>
<form method=post name=select1 >
<table>
  <tr>
    <td width = 200 BGCOLOR="#F2F5F1" align = right><font size="2" color="red">*</font><font size="2">수강생 아이디</font></td>
    <td width = 550><font size="2"><input type=text name=s_id size=8 maxlength=8> 
      <input TYPE='buton' NAME='chkbutton' VALUE='중복아이디 확인' onClick="deny_javascript:id_chk(this.form);"></a>
        <br>4~8자 영문숫자 조합, 첫글자는 영문, 대소문자 구별안함</font></td>
    </tr>
</table>
</from>

</body>
</html>
    

idcheck.php

<html>
<body>
<?
include "db.ph";
db_connect();

$sth3 = mysql_query("select id from cls_member where id = '$s_id'");

$total = mysql_affected_rows(); //게시물 총 수

if($total == "0") 
{
  print "<br><br><br><font size = 2>$s_id 는 사용할수 있는 아이디 입니다.</font>";
}
else 
{
  print "<br><br><br><font size = 2>$s_id 는 이미 사용중인 아이디 입니다.</font>";
}

?>
</body>
</html>
    


7.2. 메뉴 만들기 예제

<html>
<script language="JavaScript">
<!--

// 마우스를 주메뉴 위에 올려 놓으면 부메뉴가 나오게 하는 스크립트
function MM_findObj(n, d) { //v3.0

  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {

    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}

  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];

  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;

}


function MM_showHideLayers() { //v3.0

  var i,p,v,obj,args=MM_showHideLayers.arguments;

  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];

    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }

    obj.visibility=v; }

}


// 부메뉴 롤오버 기능
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

//-->


</script>

<body marginheight=0 marginwidth=0 topmargin=0 rightmargin=0 leftmargin="0" bgcolor="ffffff">
<table width="780" border="0" cellspacing="0" cellpadding="0" >

<tr><td height="67" ></td><td height="67" width="120"><img src="top_img/p0.gif"></td></tr>
<tr><td><a href="#" onMouseOver="MM_showHideLayers('about1','','show', 'glmoum','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></A><a href="#" onMouseOver="MM_showHideLayers('product1','','show', 'glmoum','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('news1','','show', 'glmoum','','hide')"><img name="news" border="0" src="menu_img/news0.gif" width="54" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('mdata','','show', 'glmoum','','hide')"><img name="data" border="0" src="menu_img/data0.gif" width="99" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','show', 'glmoum','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','show', 'study','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('msitemap','','show', 'study','','hide')"><img name="map" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></a><img name="map" border="0" src="top_img/blank.gif" width="66" height="33"></td><td height="33" width="120"><img src="top_img/p1.gif"></td></tr>


</table>


<!-- about us -->
<div id="about1" style="position:absolute; z-index:1; left: 0; top: 67 ;visibility: hidden"> 

<!-- 주메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr>
   <td><img name="about" border="0" src="menu_img/aboutus1.gif" width="85" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="product" border="0" src="top_img/blank.gif" width="73" height="33"></a></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td>
   </tr>
</table>

<table border="0" cellspacing="0" cellpadding="0" > <tr> 

<!--   부메뉴 -->
<td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="../about1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 1','','menu_img/about_11.gif',0)"><img name="about sub 1" border="0" src="menu_img/about_10.gif" width="154" height="28"></a><a href="../about2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 2','','menu_img/about_21.gif',0)"><img name="about sub 2" border="0" src="menu_img/about_20.gif" width="85" height="28"></a><a href="../about3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 3','','menu_img/about_31.gif',0)"><img name="about sub 3" border="0" src="menu_img/about_30.gif" width="102" height="28"></a><a href="../about4.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 4','','menu_img/about_41.gif',0)"><img name="about sub 4" border="0" src="menu_img/about_40.gif" width="86" height="28"></a><a href="about5.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 5','','menu_img/about_51.gif',0)"><img name="about sub 5" border="0" src="menu_img/about_50.gif" width="166" height="28"></a><a href="about6.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 6','','menu_img/about_61.gif',0)"><img name="about sub 6" border="0" src="menu_img/about_60.gif" width="67" height="28"></a></td><td height="28" width="120"><img src="top_img/blank.gif" WIDTH="100" HEIGHT="5"></td></tr>
</table>
</div>


<!-- product -->
<div id="product1" style="position:absolute; z-index:1; left: 0; top: 67 ;visibility: hidden"> 

<!--  주메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr> 
  <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></a></td>
  <td><img name="product" border="0" src="menu_img/product1.gif" width="73" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td>
  </tr> 
</table>

<!-- 부메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr> 
    <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="product1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('product 1','','menu_img/product_11.gif',0)"><img name="product 1" border="0" src="menu_img/product_10.gif" width="80" height="28"></a><a href="product2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('product 2','','menu_img/product_21.gif',0)"><img name="product 2" border="0" src="menu_img/product_20.gif" width="116" height="28"></a><a href="product3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('product 3','','menu_img/product_31.gif',0)"><img name="product 3" border="0" src="menu_img/product_30.gif" width="148" height="28"></a><a href="product4.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('product 4','','menu_img/product_41.gif',0)"></td>
</tr> 
</table></div>

<!-- news -->
<div id="news1" style="position:absolute; z-index:1; left: 0; top: 67 ;visibility: hidden"> 

<!-- 주메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr>
  <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></a></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></a></td>
  <td><img name="product" border="0" src="menu_img/news1.gif" width="54" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td>
</table>

<!-- 부메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr>
    <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="news1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('news 1','','menu_img/news_11.gif',0)"><img name="news 1" border="0" src="menu_img/news_10.gif" width="95" height="28"></a><a href="news2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('news 2','','menu_img/news_21.gif',0)"><img name="news 2" border="0" src="menu_img/news_20.gif" width="179" height="28"></a><a href="news3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('news 3','','menu_img/news_31.gif',0)"><img name="news 3" border="0" src="menu_img/news_30.gif" width="122" height="28"></a><a href="news4.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('news 4','','menu_img/news_41.gif',0)"></td>
</tr> 
</table></div>



<!-- data -->
<div id="mdata" style="position:absolute; height: 50; z-index:1; left: 0; top: 67; visibility: hidden"> 

<!-- 주메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr> 
  <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></A></td>
  <td><img name="coll" border="0" src="menu_img/data1.gif" width="99" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td>
 </tr> 
</table>

<!-- 부메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr>
    <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="data1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('data room 1','','menu_img/data_11.gif',0)"><img name="data room 1" border="0" src="menu_img/data_10.gif" width="85" height="28"></a><a href="data2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('data room 2','','menu_img/data_21.gif',0)"><img name="data room 2" border="0" src="menu_img/data_20.gif" width="196" height="28"></a><a href="data3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('data room 3','','menu_img/data_31.gif',0)"><img name="data room 3" border="0" src="menu_img/data_30.gif" width="111" height="28"></a><a href="data4.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image30','','menu_img/data_41.gif',0)"></td>
</tr> 
</table></div>


<! -- collaborator -->
<div id="mcollaborator" style="position:absolute; height: 50; z-index:1; left: 0; top: 67; visibility: hidden">

<!--  주메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr> 
  <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></A></td>
  <td><img name="coll" border="0" src="menu_img/collaborator1.gif" width="110" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td>
  <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td>
</table>

<!-- 부메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr>
    <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="coll1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('collaborator 1','','menu_img/collaborator_11.gif',0)"><img name="collaborator 1" border="0" src="menu_img/collaborator_10.gif" width="129" height="28"></a><a href="coll2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('collaborator 2','','menu_img/collaborator_21.gif',0)"><img name="collaborator 2" border="0" src="menu_img/collaborator_20.gif" width="158" height="28"></a></td>
</tr> 
</table></div>


<!-- contactus -->
<div id="mcontactus" style="position:absolute; height: 50; z-index:1; left: 0; top: 67; visibility: hidden"> 

<!-- 주메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr> 
   <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></A></td>
   <td><img name="contact" border="0" src="menu_img/contactus1.gif" width="99" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td>
</table>

<!-- 부메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr>

    <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="contactus.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('contactus 1','','menu_img/contactus_11.gif',0)"><img name="contactus 1" border="0" src="menu_img/contactus_10.gif" width="134" height="28"></a><a href="contactus2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('contactus 2','','menu_img/contactus_21.gif',0)"><img name="contactus 2" border="0" src="menu_img/contactus_20.gif" width="78" height="28"></a><a href="contactus3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('contactus 3','','menu_img/contactus_31.gif',0)"></td>

</tr> 
</table></div>

<! -- sitemap -->
<div id="msitemap" style="position:absolute; height: 50; z-index:1; left: 0; top: 67; visibility: hidden">

<!  -- 주메뉴 -->
<table border="0" cellspacing="0" cellpadding="0" > <tr>
   <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td>
   <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td>
   <td><img name="map" border="0" src="menu_img/sitemap1.gif" width="74" height="33"></td>
   </tr>
</table>
<!-- 부메뉴 -->
</table><table border="0" cellspacing="0" cellpadding="0" > <tr><td></td></tr> 
</table>
</div>

</table>
</body>
</html>
    


8. Oracle

  1. 테이블 구조

    id int, name char(20), age int, addr(20)

  2. test.php

     
    <?php 
    $conn = OCILogon("scott","tiger"); //로그인을 한다. 
    
    $stmt = OCIParse($conn,"select * from test"); //test테이블의 내용을 변수에 저장한다. 
    
    OCIExecute($stmt); //저장한 변수를 활성화 한다. 
    
    while (OCIFetchInto($stmt, $col, OCI_NUM)) 
    { //변수의 내용을 가져온다. 
    
      echo "". $col[0]."....". $col[1]."....". $col[2]."....". $col[3]." "; 
      //테이블의 내용을 출력 시킨다. 
    } 
    
    OCIFreeStatement($stmt); // 변수의 내용을 지운다. 
    
    OCILogoff($conn);// 로그 오프를 한다. 
    ?>
          


9. Mysql

9.1. mysql 주기적으로 백업하기

  1. myhome_bakcup 셀스크립트

    #!/bin/bash
    
    T=$(echo `date +%Y%m%d%H%M`)
    MY=$(echo /home/nalabi/backup)
    
    echo "nalabi 의 데이타가 백업 되었습니다. $T"
    
    mysqldump myhome > $MY/myhome$T.sql
    gzip $MY/myhome$T.sql
            

  2. /etc/crontab 사용하기

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    
    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly
            

    형식 :

    a b c d e id runparts directory

    분(0~59) 시(0~24) 날짜(0~31) 달(0~12) 요일(0~7) id(크론이 사용할 계정) directory(실행하게될 파일 놓이게 될 경로)

    예제 :

    15 14 1 * * root /home/nalabi/backup/myhome_backup

    매달 1일 오후 2시 15에 myhome_backup을 실행한다.

    0 22 * * 1-5 root /home/nalabi/backup/myhome_backup

    월요일 부터 금요일까지 매일 오후 8시에 myhome_backup을 실행한다.

    23 0-23/2 * * * root /home/nalabi/backup/myhome_backup

    매일 0, 2, 4, ....시 23분에 실행한다.


9.2. mysql 루트 패스워드를 잃어 버렸을 때

mysql 중지한다.

/etc/init.d/mysql stop

데몬을 아무나 들어갈수 있게 다시 실행한다.

      safe_mysqld --skip-grant &
    

루트 패스워드를 변경한다.

      mysql> update user set password='' where user='root';
    

mysql 을 재시동 합니다.

      /etc/init.d/mysql stop
      /etc/init.d/mysql start
    


9.3. 데이타 타입 (테이블 생성시 컬럼의 데이타 타입입니다.)

  1. 수치 데이터 타입

              * INTEGER (INT) 
              * SMALLINT 
              * NUMBER 
              * DECIMAL(DEC) (x,y) : x는 실수자리, y는 소수점 이하자리 
              * FLOAT 
            

  2. 문자 데이터 타입

     
              * VARCHAR (n) : 8비트 문자 길이가 최대 n개인 문자열 
              *CHARACTER(CHAR) (n) : n개의 8비트 문자열 
              * LONG 
            

  3. 그외의데이터 타입

              * DATE/TIME : 날짜/시간 
              * LONG RAW 
            


9.4. 쉘에서 DB 내용 보기

mysqlshow

+-----------+ 
|Databases | 
+-----------+ 
| board | 
| kedu | 
| mysql | 
| test | 
+-----------+ 
    


9.5. Mysql에 들어가기

mysql test

Reading table information for completion of table and column names 
You can turn off this feature to get a quicker startup with-A 

Welcome to the MySQL monitor. Commands end with ; or g. 
Your MySQL connection id is 7 to server version: 3.22.23b 

Type 'help' for help. 

mysql> 
    


9.1. 데이타 백업 받기 (화일로 받음)

mysqldump 를 이용해서 sql 데이타를 백업 받을수 있으며 DB이름만 지정하면 전체 테이블이, 테이블 이름 까지 지정하면 해당 테이블만 백업을 할수 있다.

mysqldump DB이름 (table이름) > 화일이름

mysqldump test test > test.sql

# MySQL dump 6.0 
# 
# Host: localhost Database: test 
#-------------------------------------------------------- 
# Server version 3.22.23b 

# 
# Table structure for table 'test' 
# 
CREATE TABLE test ( 
no int(11), 
name char(10), 
tel char(15), 
addr char(20), 
sex char(1), 
birth date 
); 

# 
# Dumping data for table 'test' 
# 

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


9.2. 데이타 입력하기 (화일--> Mysql)

mysql test < test.sql

참고로 데이타 확인은 mysql -e "select * from test" 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 | 
+------+--------+---------------+--------+------+------------+ 
    


9.3. 사용자 만들기

  1. aaaa라는 사용자(user)를 만듭니다.

    mysql mysql(mysql db로 들어갑니다.)

     
    mysql>insert into user values ('localhost','aaaa','','y','y','y','y','y','y','y','y','y','y','y','y','y','y'); 
    Query OK, 1 row affected (0.04 sec) 
            

    reload 를 꼭 실행시킵니다.(쉘에서)

    mysqladmin reload

  2. aaaa라는 사용자에게 aaaa라는 비밀번호를 부여합니다.

    mysqladmin -u aaaa password aaaa

    mysqladmin reload

  3. 데이타 베이스 만들기

    사용자가 없을 경우 : mysqladmin create aaaa

    사용자와 비밀번호가 있는 경우 : mysqladmin -u aaaa -p create aaaa (or) mysqladmin -u aaaa -paaaa create aaaa

  4. 서버의 데이타 베이스 끌어오기

    서버 상의 데이타 베이스를 나의 컴의 프로그램으로 가져 올때 사용합니다.

    서버의 mysql mysql 을 실행 합니다.

    INSERT INTO db VALUES ('나의 컴 아이피','DB이름','사용자','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

    INSERT INTO user VALUES ('나의 컴 아이피 '사용자 ','비밀번호 ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

    그리고, 위의 퀘리문을 편집해서 실행 합니다.

    그려면 나의 컴에 DB가 없어도 서버의 DB를 가져와서 사용을 할수가 있습니다.


9.4. 테이블 만들기

사용법 : create table 테이블이름(변수명 변수값, ......);

mysql> create table test (no int, name char(10), age int, tel char(15)); 
Query OK, 0 rows affected (0.00 sec) 
    


9.5. 테이블 보기

사용법 : show tables;

mysql> show tables; 
   +-----------------+ 
   | Tables in test | 
   +-----------------+ 
   | test | 
   +-----------------+ 
   2 rows in set (0.00 sec) 

mysql> show tables like 'ad_%';
   +-------------------------+
   | Tables_in_dbkedu (ad_%) |
   +-------------------------+
   | ad_expose               |
   | ad_img                  |
   | ad_redirect             |
   | address                 |
   +-------------------------+
   4 rows in set (0.00 sec)
    


9.6. 테이블 데이타 입력하기

mysql > insert into test values(1,'김용일','29','02-825-xxxx'); 
Query OK, 1 row affected (0.00 sec) 
    


9.7. 특정 필드만 입력

mysql> insert into test (no,name) values ('7','남상욱'); 
Query OK,1 row affected (0.00 sec) 
    


9.8. 테이블내용 보기

select 문을 이용한다.

mysql> select * from test; 
+------+--------+------+---------------+ 
| no | name | age | tel | 
+------+--------+------+---------------+ 
| 1 | 김용일 | 29 | 02-825-xxxx | 
| 2 | 이주상 | 29 | 02-504-xxxx | 
| 3 | 임정남 | 29 | 02-420-xxxx | 
| 4 | 강행모| 29 | 02-856-xxxx | 
| 5 | 이현영 | 29 | 0342-718-xxxx | 
| 6 |이병환 | 12 |02-891-xxxx | 
| 7 | 남상욱 | NULL | NULL | 
+------+--------+------+---------------+ 
7 rows in set (0.00 sec) 
    


9.9. 필드 추가

alter 문을 이용한다.

mysql> alter table test add addr char(20); 
Query OK, 1 row affected (0.00 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

mysql> desc test; 
+-------+----------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------+----------+------+-----+---------+-------+ 
| no |int(11) | YES | | NULL | | 
| name | char(10) | YES | | NULL | | 
| age | int(11) | YES | | NULL | | 
| tel | char(15) | YES | | NULL | | 
| addr | char(20) | YES | | NULL | | 
+-------+----------+------+-----+---------+-------+ 
5 rows in set (0.00 sec) 
    


9.10. 필드 삭제

alter 문을 이용한다.

mysql> alter table test drop age; 
Query OK, 6 rows affected (0.01 sec) 
Records: 6 Duplicates: 0 Warnings: 0 
    


9.11. 기타 alter 용법

alter 문을 이용한다.

ALTER TABLE에는 다음 세가지 형식이 있습니다.

ALTER TABLE table_name ADD ( ... ) ;

ALTER TABLE table_name MODIFY( ... ) ;

ALTER TABLE table_name DROP PRIMARYKEY ;

  1. ALTER TABLE t1 RENAME t2;

    테이블 이름을 t1에서 t2로 바꿈

  2. ALTER TABLE t2 CHANGE a a TINYINT NOT NULL, CHANGE b c CHAR(20);

    테이블 내의 컬럼 속성을 바꿈

    원래 컬럼 a는 INTEGER였는데 TINYINT로,

    컬럼b는 CHAR(10)이었는데 컬럼이름은 c로 이타 타입은 CHAR(20)으로 수정

  3. ALTER TABLE t2 ADD d TIMESTAMP;

    테이블 t2에 d라는이름으로 TIMESTAMP 형으로 추가

  4. ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);

    새로운 인텍스를 생성 컬럼 a에 primary key 생성.

  5. ALTER TABLE test MODIFY (age NUMBER NULL );

    NOT NULL을 NULL로 바꾸기

  6. ALTER TABLE test MODIFY (age NUMBER NOT NULL );

    NULL을 NOT NULL로 바꾸기

  7. ALTER TABLEtest MODIFY (name VARCHAR2( 20 ) );

    열의 폭 늘이기

  8. ALTER TABLE test MODIFY (name VARCHAR2( 15 ) );

    열의 폭 줄이기

  9. ALTER TABLE t2 DROP COLUMN c;

    컬럼 c를 없애버리고

  10. ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);

    t2 테이블에 c라는 컬럼을 새로 생성시키는데

    INT (INTEGER) : 정수

    UNSIGNED : 양수

    NOT NULL : 아무데이타가 없으면 '0'

    AUTO_INCREMENT : 데이타가 자동적으로 입력됨...

    ADD INDEX (c) : 컬럼 c에 대해서 인텍스 생성


9.12. 데이타 삭제

delete 를 이용한다.

mysql>delete from test where name='김용일'; 
Query OK, 1 row affected(0.00 sec) 
    


9.13. 데이타 수정

update를 이용한다.

 
mysql> update test set no=1,tel='333-4444' where name='남상욱'; 
Query OK, 1 row affected (0.01 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 
    

mysql> update test set addr='동작구' where no='1'; 
    


9.14. 내림 차순으로 정렬

order문을 이용

mysql> select * from test order by no desc; 
+------+--------+------+---------------+--------+ 
| no | name | age | tel | addr | 
+------+--------+------+---------------+--------+ 
| 6 | 이병환 |12 | 02-891-xxxx | NULL | 
| 5 | 이현영 | 29 | 0342-718-xxxx | NULL | 
| 4 | 강행모 | 29 | 02-856-xxxx | NULL | 
| 3 | 임정남 | 29 | 02-420-xxxx | NULL | 
| 2| 이주상 | 29 | 02-504-xxxx | NULL | 
| 1 | 남상욱 | NULL | 333-4444 | 동작구 | 
+------+--------+------+---------------+--------+ 
6 rows in set (0.01 sec) 
    


9.15. 무작위 정렬

rand문을 이용

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


9.16. 년도순으로 정렬

year문 이용

mysql> select * from test order by year(birth) desc; 
+------+--------+---------------+--------+------+------------+ 
| no | name | tel | addr | sex | birth | 
+------+--------+---------------+--------+------+------------+ 
| 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 | 
| 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 | 
| 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 | 
+------+--------+---------------+--------+------+------------+ 
6 rows in set (0.00 sec) 
    


9.17. 년도, 번호순으로 정렬

year 문 이용

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


9.18. 20살 이상이 몇명인가를 찾는다.

where 절 이용

mysql> select count(*) from test where age >=20; 
+----------+ 
| count(*) | 
+----------+ 
| 4 | 
+----------+ 
1 row in set (0.00 sec) 
    


9.19. null 값 검색하기

null 문 이용

mysql> select * from test where addr is not null; 
+------+--------+------+----------+--------+ 
| no | name | age | tel | addr | 
+------+--------+------+----------+--------+ 
| 1 | 남상욱 | NULL | 333-4444 | 동작구 | 
+------+--------+------+----------+--------+ 
1 row in set (0.00 sec) 
    


9.1. null 값 검색하기

null 문 이용

mysql> select * from test whereaddr is null; 
+------+--------+------+---------------+------+ 
| no | name | age | tel | addr | 
+------+--------+------+---------------+------+ 
| 2 | 이주상 | 29 | 02-504-xxxx | NULL | 
| 3 | 임정남 | 29| 02-420-xxxx | NULL | 
| 4 | 강행모 | 29 | 02-856-xxxx | NULL | 
| 5 | 이현영 | 29 | 0342-718-xxxx | NULL | 
| 6 | 이병환 | 12| 02-891-xxxx | NULL | 
+------+--------+------+---------------+------+ 
5 rows in set (0.01 sec) 
    


9.2. 검색 하기

like 이용

  
mysql> select * from test where name like '%이%'; 
+------+--------+------+---------------+------+ 
| no | name | age | tel | addr | 
+------+--------+------+---------------+------+ 
| 2 | 이주상 | 29 | 02-504-xxxx | NULL | 
| 5 | 이현영 | 29 | 0342-718-xxxx | NULL | 
| 6 | 이병환 | 12 | 02-891-xxxx | NULL | 
+------+--------+------+---------------+------+ 
3 rows in set (0.00 sec) 
    


9.3. 범위 검색

등호, 부등호 를 이용해서 검색

mysql> select * from test where age>=10 and age <=20; 
+------+--------+------+-------------+------+ 
| no | name | age | tel | addr | 
+------+--------+------+-------------+------+ 
| 6 | 이병환 | 12 | 02-891-xxxx | NULL | 
+------+--------+------+-------------+------+ 
1 row in set (0.00 sec) 
    


9.4. in 검색

in 문을 이용해서 검색

mysql> select * from test where addr in('동작구','관악구'); 
+------+--------+------+-------------+--------+ 
| no | name | age | tel | addr | 
+------+--------+------+-------------+--------+ 
| 4 | 강행모 | 29 | 02-856-xxxx | 관악구 | 
| 1 | 남상욱 | NULL | 333-4444 | 동작구 | 
+------+--------+------+-------------+--------+ 
2 rows in set (0.00 sec) 
    


9.5. not in 검색

not in문을 이용해서 검색

mysql> select * from test where addr not in('동작구','관악구'); 
+------+--------+------+---------------+--------+ 
| no | name | age | tel | addr | 
+------+--------+------+---------------+--------+ 
| 2 | 이주상 | 29 |02-504-xxxx | 과천시 | 
| 3 | 임정남 | 29 | 02-420-xxxx | 송파구 | 
| 5 | 이현영 | 29 | 0342-718-xxxx | 분당구 | 
| 6 | 이병환 | 12 | 02-891-xxxx | 하안동 | 
+------+--------+------+---------------+--------+ 
4 rows in set (0.00 sec) 
   

치환 검색

mysql> select * from cls_class as a, cls_member as b where b.g_code = 'h0001_3_2' and b.g_code=a.g_code;
   


9.6. 날짜 검색하기

where 절 이용

mysql> SELECT COUNT(no) FROM brd_free WHERE date = '2000-02-17';
+-----------+
| COUNT(no) |
+-----------+
|         1 |
+-----------+
1 row in set (0.03 sec)
    


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

꼭 경로를 지정해야함

 
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 
    


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

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 
    


9.9. 화일을 불러오기

load 명령어를 쓴다.

mysql> load data infile '/root/test.txt' replace into table test fields terminated by '|'; 
Query OK, 6 rows affected (0.02 sec) 
Records: 6 Deleted: 0 Skipped: 0 Warnings: 0 
    

결과

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 | 
+------+--------+---------------+--------+------+------------+ 
    


9.1. 사칙연산

* SUM (Column_name) : 특정 컬럼에서 조건에 만족하는 모든열의 값을 다더함

* AVG (Column_name) : 평균값 추출

* MAX (Column_name) : 최대값추출

* MIN (Column_name) : 최소값 추출

* COUNT (Column_name): 열의수를 추출

sum 문 사용하기

mysql> select sum(age) from test; 
+----------+ 
| sum(age) | 
+----------+ 
| 128 | 
+----------+ 
1 row in set (0.00 sec) 
    

/기 사용하기

mysql> select no, age, (no+age), (no+age)/2 from test; 
+------+------+----------+------------+ 
| no | age | (no+age) | (no+age)/2 | 
+------+------+----------+------------+ 
| 2 | 29 | 31 | 15.50 | 
| 3 | 29 | 32 | 16.00| 
| 4 | 29 | 33 | 16.50 | 
|5 | 29 | 34 | 17.00 | 
| 6 | 12 | 18 | 9.00 | 
| 1 | NULL | NULL | NULL | 
+------+------+----------+------------+ 
6 rows in set (0.00 sec) 
    


9.2. 나이 계산하기

yser 문 사용하기

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


9.3. 유닉스 시간

unix_timestamp문을 사용한다.

mysql> select unix_timestamp(curdate()); 
  +---------------------------+ 
  | unix_timestamp(curdate()) | 
  +---------------------------+ 
  | 934210800 | 
 +---------------------------+ 
  1 row in set (0.05 sec)
    


9.4. 원격 DB 사용하기

A라는 서버에 DB가 있고, 210.180.56.204에서 프로그램을 돌릴때

A라는 서에있는 mysql mysql 에 다음과 같이 입력을 합니다.

INSERT INTO db VALUES ('210.180.56.204','dbname','user','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

INSERT INTO host VALUES ('210.180.56.204','dbname','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

INSERT INTO user VALUES ('210.180.56.204','user','passwd','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

210.180.56.204 의 컴에서 프로그램을 할때 다음과 같이 설정을 해주면 원격 DB 를 사용할수 있습니다.

$db_server ="servername"; // DB 서버 주소

$db_user = "root"; // DB 사용자

$db_name = ""; // DB 이름

$db_pass = ""; // DB 암호




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2003-08-10 11:52:29
Processing time 0.0342 sec