[06] php 및 mysql 설치, 인증, SQL, get & post, http 헤더

|


- 2015.03.16

 


1. 실습 사전 준비


1) php 설치 여부 확인


# rpm -qa | grep php

 


2) php 설치


- php.i386
- php-devel.i386
- php-mysql.i386
- 나머지 필요 항목은 yum이 알아서 설치


# yum install -y php.i386 php-devel.i386 php-mysql.i386
# service httpd restart
# cd /var/www/html

 


3) php 설치 확인


php 테스트 코드
    # vi test.php
          1 <?
          2         phpinfo();
          3 ?>


http://ip/test.php 에서 페이지 제대로 작동하는지 확인

 


4) mysql 설치


- mysql-server.i386


# yum install -y mysql-server.i386
# service mysqld start
# mysqladmin -u root password [New_Password]

 


5) mysql 로그인


# mysql -u root -p
Enter Password:

 

 

 


2. 인증


- ID, Password
- 공인 인증서
- OTP (One Time Password)
- 금액 인증 방식 (AA)

 

 

 


3. SQL


SQL : Structured Query Language
- 구조화된 질의 언어
- 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수목적 프로그래밍 언어 (위키백과)

 


1) SQL 명령어 종류


DDL ( Data Definition Language) : 데이터 정의어, 데이터 변경 불가
   - CREATE : DB 나 Table 생성
   - DROP : DB 나 Table 삭제
   - ALTER : 속성 변경


DCL ( Data Control Language ) : 데이터 제어어
   - GRANT : 권한 부여
   - REVOKE : 권한 제거
   - BEGIN
   - COMMIT
   - ROLLBACK


DML ( Data Manipulation Language ) : 데이터 조작어
   - SELECT : 조회
   - UPDATE : 수정
   - DELETE : 삭제
   - INSERT : 입력

 

 


2) mysql 명령어 - DDL


- db와 table 목록 출력
mysql> show databases;
mysql> show tables;


- db 선택
mysql> use [db_name];


- table 정의
mysql> desc [table_name];


- table 생성 : 데이터를 정의
mysql> CREATE [table_name]( column1 type, column2 type, ... );


* varchar(SIZE) : 선택한 size 로 만들어짐. 대용량 일 시 속도 빠름
* text : size 자동 설정, 대용량 일 시 크기를 계산해야 하기 때문에 속도 느림


- table 삭제 : 테이블 안에 데이터가 남아 있으면 안됨.
mysql> DROP TABLE [table_name];

 

 


3) mysql 명령어 - DML


* SELECT : 조회


전체 목록 조회
mysql> Select [column_name], [column_name] ... FROM [table_name];


조건 목록 조회
mysql> Select [column_name], [column_name] ... FROM [table_name] WHERE [condition];

 


* INSERT : 입력


mysql> INSERT INTO [table_name] VALUES( colomn1, column2, .... )
mysql> INSERT INTO [table_name] ( [column1_name], [column2_name], ...) VALUES( [column1_data], [column2_data], ... );

 


* UPDATE : 수정


mysql> UPDATE [table_name] SET [column_name] = value, [column_name] = value, ...; (X)
    => 가능하지만 모든 행의 데이터가 바뀌기 때문에 조건 필수
mysql> UPDATE [table_name] SET [column_name] = value, [column_name] = value ... [WHERE condition];

 


* DELETE : 삭제


mysql> DELETE FROM [table_name]; (X)
   => table 전체 삭제
mysql> DELETE FROM [table_name] WHERE [condition]

 

 


[ 실습 ]


mysql> show databases;
mysql> use test;
mysql> CREATE TABLE user ( num int, name varchar(20), id text, pw text );
mysql> show tables;
mysql> desc user;
mysql> DROP TABLE user;
mysql> CREATE TABLE user ( num int, name varchar(20), id text, pw text );
mysql> INSERT INTO user VALUES( 0, 'admin', 'admin', password('1234') );
mysql> INSERT INTO user( num, id, pw ) VALUES(1, 'guest', '1234' );
mysql> SELECT * FROM user;
mysql> SELECT * FROM user WHERE num = 0;
mysql> SELECT * FROM user WHERE id = 'admin';
mysql> SELECT * FROM user WHERE id = "guest";
mysql> SELECT * FROM user WHERE num = 0 and id = 'admin';
mysql> SELECT * FROM user WHERE num = 0 or id = 'admin';
mysql> UPDATE user SET name='guest', pw=password('1234') WHERE num = 1;
mysql> INSERT INTO user VALUES( 2, 'asdf', 'asdf', password('1234') );
mysql> DELETE FROM user WHERE id = 'asdf';
mysql> quit

 

 

 


4. 페이지 작성


[ longin.html ]             [ login_check.php ]
 input : id, pw      ->               Auth
                                             <┘ 성공
                                             <┘ 실패


# pwd
/var/www/html


# vi login.html
      1 <html>
      2 <head>
      3         <title> Log In </title>
      4 </head>
      5
      6 <body>
      7         <form method=POST action=login_check.php>
      8                 id <input type="text" name="id"><br>
      9                 pw <input type="password" name="pw"><br>
     10                 <input type="submit" value="Login">
     11         </form>
     12 </body>
     13
     14 </html>

 


# vi index.html
     17                                         <li> <a href="login.html">Log In</a>         </li>

 

 


* Server side script : 서버에서 처리한 결과만 받아볼 수 있음
   - php, jsp


* Client side script : 내가 볼 수 있음
   - html, Ajax, JavaScript

 

 

 


5. GET, POST


1) http의 stack


http              -- Application Protocal
tcp               ┐
ip                 -- 전송
Ethernet      ┘

 


[ HTTP Header ]


- Start-line : POST, URL, HTTP/1.1
- header : 서버와의 원할한 통신 위한 정보
- 빈칸
- Message-Body : id=asdf&pw=asdf   ..... 


이렇게 Message-Body 에 값이 숨겨져서 인수가 전달 되는 것이 POST 방식이다.
반면, header의 url에 정보를 붙여 보내는 방식이 GET 방식이다.
하지만 헤더의 크기가 정해져 있고 url 창에 노출되기 때문에 상대적으로 보안에 취약하다.


ex)
http://gall.dcinside.com/board/list/?id=girl
protocol   -   URL  -    WebApplication - ? 로 URL과 변수 구분
(=> ? 앞에 index.php 가 숨겨져 있음)

 

 

 

And