1. 아파치 웹 인증
-설정파일 : /etc/httpd/conf/httpd.conf //317줄
<directory /var/www/html>
...
AuthType Basic // 이런식으로 중간에 추가해준다.
AuthName "Basic Authentication"
AuthUserFile /var/www/html/.htpasswd //사용자파일 경로
Require valid-user //어떤 사용자에게 인증을 요구하냐
</directory>
이렇게 인증칸이 생겼다.
인증 아이디 만드는법
AuthUserFile /var/www/html/.htpasswd
즉, /var/www/html 위치에서
htpasswd -c .htpasswd user1
htpasswd -c [파일명] [아이디]
// -c 옵션은 아예 처음 만들 때만 사용 한다.
2. 인증 처리 프로그램 작성
- 데이터 베이스 (DataBase)
SQL(Structured Query Language)
-구조화된 질의 언어
- CREATE , DROP, SELECT , INSERT , UPDATE , DELETE
1. DDL(Data Definition Language)
- 데이터를 정의할 수 있는 구문
- 생성 및 삭제 : CREATE , DROP
2. DML(Data Manipulation Language)
- 데이터를 조작할 수 있는 구문
- 조회, 입력 , 수정 , 삭제
3. DCL(Data Control Language)
- 데이터를 제어할 수 있는 구문
- 권한, 트랜잭션 , ...
MySQL
- 참조 사이트 : dev.mysql.com
[설치]
1. 데몬(서버 프로그램) : mysql-server
yum -y install mysql-server.i686
2. 클라이언트 프로그램 : mysql
mysql 서버 접속
mysql -h [localhost] -u root //리눅스의root계정과 관계 x
이런식으로 뜨면 mysql 서버에 접속한 것이다.
//이땐 리눅스 명령어 통하지 않음.
[패스워드 설정]
mysqladmin -u root password 패스워드
mysql -u root -p // 그다음 패스워드 입력창이 뜬다.
[간단한 명령어]
service mysqld start //mysql 실행
[DDL]
show [프로그램 이름] ; // 보여준다.
drop database [DB이름]; //삭제
test파일이 사라져 있다.
create database [DB이름]; //생성
youngwook이 생성 되어 있다.
use [DB이름]; //들어가기 (화면상에 안뜨므로 기억해야함)
show tables; //테이블 확인 (아직 만들지 않아 내용이 없음)
[테이블 생성 및 삭제 ]
-데이터의 구조를 정의
정형화된 데이터 : 사용자 정보
- no -> 식별번호 -> int
- 아이디 -> varchar
- 패스워드 -> hash -> 고정길이 -> char
CREATE TABLE 테이블 이름 ( 컬럼 이름 컬럼 속성들 , 컬럼 이름 컬럼 속성들 , ...)
CREATE TABLE user_info( id varchar(10), pw char(50) );
만든 테이블 안을 보려면
DESC 이름;
DROP TABLE 테이블 이름; //테이블 삭제(데이터가 존재해도 바로 삭제됨
Key값과 Extra 값을 준 상태.
[DML]
[입력] : insert
- INSERT INTO 테이블 이름(컬럼이름, ...) VALUE(값1,...);
- INSERT INTO user_info VALUE('user1',md5('1234'));
// 오류가 난다. 테이블의 갯수와 설정 갯수가 같지 않기 때문에
-INSERT INTO user_info(id,pw) VALUE('user1',md5('1234'));
따라서 이렇게 컬럼을 지정해줘 오류가 나지 않게 설정 한다.
[조회/검색] : select //출력도 가능
- SELECT 컬럼, ...FROM 테이블 이름;
- SELECT no, id ,pw FROM user_info;
연산이 가능하다. //printf 같은 역할도 한다.
SELECT 컬럼, ...FROM 테이블 이름 WHERE 조건
= ( 같다 표시 ==를 쓰지 않는다)
<> ( 같지 않다 !=와 같은 뜻)
SELECT * FROM user_info WHERE id='user1';
[수정] : update
UPDATE 테이블 이름 SET 할당 리스트;
UPDATE 테이블 이름 SET 할당 리스트 WHERE 조건;
UPDATE user_info SET id='quest';
UPDATE user_info SET id='user1' WHERE no=1;
[삭제] : delete
DELETE FROM 테이블 이름 WHERE 조건;
DELETE FROM user_info WHERE no=1;
PHP 로 mysql에 연결
PHP mysql 다운
- yum -y install php-mysql.i686
$link : 여러개의 DB를 연결할 때 사용
DB 쿼리 -> PHP( mysql_query() )
1. 입력 , 수정 , 삭제
- 쿼리가 제대로 실행 되었는가?
<?php
// connect to mysql database
// mysql> -h localhost -u root -p;
$link = mysql_connect( 'localhost','root','1234');
if ( $link === False ) {
// die("mysql connect error: " . mysql_error());
exit();
}
//db select
//mysql > use user;
$ret = mysql_select_db('youngwook',$link);
if ($ret === False) {
//die("mysql db select error: " . mysql_error() );
exit();
}
if (!isset($_REQUEST[id] ) || !isset($_REQUEST[pw] ) || $_REQUEST[id] ===''|| $_REQUEST[pw] === '') {
//echo "<script> alert('input id and password'); </script>";
?>
<form method=POST action=db.php>
<input type=text name=id placeholder='user name' >
<br>
<input type=password name=pw placeholder='password here'>
<input type=submit value='join'>
</form>
<?php
} else{
$id = $_POST[id];
$pw = $_POST[pw];
$query = "INSERT INTO user_info(id,pw) VALUES( '$id', md5('$pw'))";
$ret= mysql_query($query);
if(!$ret) {
die('mysql INSERT ERROR: '.mysql_error() );
}
}
?>
값을 입력하면
아래와 같이 db테이블 안에 저장 된다.
2. 조회
- 조건에 맞는 조회된 데이터가 있는가?
- 조건에 맞는 조회된 데이터가 없는가?
mysql_num_rows() // id의 갯수가몇개인지 확인
$id = $_POST[id];
$pw = $_POST[pw];
$query = "SELECT * FROM user_info WHERE id='$id'";
$resource = mysql_query($query);
if( $resource) {
$cnt = mysql_num_rows($resource);
echo "number of rows: " .$cnt;
mysql_fetch_row() //배열 형태로 내용을 보여줌
//row 대신 array라 사용해도 무방
$id = $_POST[id];
$pw = $_POST[pw];
$query = "SELECT * FROM user_info WHERE id='$id'";
$resource = mysql_query($query);
if( $resource) {
$row = mysql_fetch_row($resource);
print_r($row);
MYSQL_BOTH // 테이블 열의 이름을 보여준다?
$row = mysql_fetch_row($resource,MYSQL_BOTH);
print_r($row);
현재 한 줄만 출력이 되고 있다. 전부 출력 하고 싶으면 수 만큼 $row = mysql_fetch_row($resource,MYSQL_BOTH);
print_r($row); 이 문을 계속 수행 해주면 된다
ex) number of rows : 3 //반복문 사용해도 된다.
$row = mysql_fetch_row($resource,MYSQL_BOTH);
print_r($row);
$row = mysql_fetch_row($resource,MYSQL_BOTH);
print_r($row);
$row = mysql_fetch_row($resource,MYSQL_BOTH);
print_r($row);
for문을 사용했을 때
for($i=$cnt; $i > 0; $i--){
$row = mysql_fetch_array($resource,MYSQL_BOTH);
print_r($row);
print_r("<br>");
}
[실습]
-이미 존재하는 사용자라면 입력받은 값으로 새로 업데이트 할 수 있도록 수정
[소스]
$query = "INSERT INTO user_info(id,pw) VALUE('$id',md5('$pw'))";
if($cnt === 0){
$result = mysql_query($query);}
$query = "UPDATE user_info SET pw=md5('$pw') WHERE id='$id'";
if($cnt > 0) {
$ret = mysql_query($query); }