반응형



페이지 구현 파일

| 1. check.html 2. check.php 3. co_in.html 4. co_in.html 5. co_vi.php 6. co_in.php 7. id.html 8. id.php 9. index.html 10. pr_in.html 11. pr_in.php 12. pr_vi.php 13. sc_in.php 14. sc_vi.php 15. st_in.html 16. st_in.php 17. st_in.php 18. conn.php 19. (ch.php) |
| 참고사항 실무에서 순수 .html 파일은 점점 줄어드는 추세이다 대부분 PHP/JSP/Python 안에 HTML을 섞어 쓰고 있다 |
파일 관계 구조
conn.php → DB 연결 (모든 파일의 기반)
↓
id.php / check.php / check.php → 로그인/인증
↓
index → 메인 페이지
↓
co_in.php → co_vi.php (co = 과목)
pr_in.php → pr_vi.php (pr = 교수)
sc_in.php → sc_vi.php (sc = 성적)
st_in.php → st_vi.php (st = 학생)
패턴 설명
| _in.php | 입력 처리 (INSERT) |
| _vi.php | 조회/뷰 (SELECT, 화면출력) |
| .php 단독 | 폼 또는 로직 |
| conn.php | DB 연결 공통 파일 |
각 파일 설명
CONN.php 파일
$server = "oracle"; // DB 서버 주소 (호스트명)
$user = "st15"; // DB 계정 이름
$passwd = "st15"; // DB 비밀번호
$charset = "AL32UTF8"; // 한글 깨짐 방지 (UTF-8)
$conn = oci_connect($user, $passwd, $server, $charset);
// Oracle에 실제 접속하는 명령어
// 성공하면 $conn에 연결 정보 저장
if (!$conn) { // 연결 실패하면
$e = oci_error(); // 에러 정보 가져오기
die("오라클 연결 실패: " . $e['message']); // 에러 출력하고 종료
}
id.php 파일 ("회원가입 처리 파일" - 아이디/비번 받아서 DB에 저장)
1단계 - 준비
<?php // 1. 반드시 <?php로 시작 (Rocky Linux 호환성)
header('Content-Type: text/html; charset=utf-8'); // 한글 깨지지 마라
require('conn.php'); // DB 연결 파일 불러와
2단계 - 폼에서 데이터 받기
$id = $_POST["id"]; - HTML 폼에서 사용자가 입력한 값을 가져옴
$passwd = $_POST["passwd"];
3단계 - 빈칸 체크
if(empty($id) || empty($passwd)) { - id나 비번 중 하나라도 비어있으면
echo "<script>
alert('아이디와 비밀번호를 입력해주세요.'); - 경고창 띄우고
history.go(-1); - 뒤로가기
</script>"; - 코드 종료
exit;
}
4단계 - SQL 만들기
$sql = "INSERT INTO id (id, passwd) - id 테이블에 넣으라는 의미
VALUES ('".$id."', RAWTOHEX(STANDARD_HASH('".$id."'||'".$passwd."', 'SHA256')))";
5단계 - SQL 실행
$result = oci_parse($conn, $sql); - SQL 준비
$re = @oci_execute($result); - SQL 실행
// ★ 2. 중요: 오라클은 실행 후 반드시 커밋을 해야 저장이 됨
if($re) {
oci_commit($conn); - 성공하면 DB에 확정 저장
}
6단계 - 마무리
oci_free_statement($result); - 메모리 청소
oci_close($conn); - DB 연결 끊기
7단계 - 결과 화면
if(!$re) { - 실패하면(중복 아이디 등)
echo "<script>
alert('계정 등록에 실패했습니다. 이미 사용 중인 아이디일 수 있습니다.');
history.go(-1); - 뒤로가기
</script>";
exit;
} else { - 성공하면
echo "<meta http-equiv='Refresh' content='0; URL=index.html'>";
} - 메인페이지로 이동
?>
전체 흐름
id.html (입력폼)
↓ submit
id.php
↓ 빈칸체크
↓ SQL 만들기
↓ DB에 저장
↓
성공 → index.html
실패 → 뒤로가기
co_in.php 파일 ("과목 등록 처리 파일" - 과목정보 받아서 DB에 저장)
1단계 - 로그인 체크
<?php
session_start();
if(!isset($_SESSION["id"])) { - $_SESSION["id"] 가 없으면 = 로그인 안한 상태면
echo "<script>
alert('로그인이 필요합니다.');
location.href='index.html'; - 메인으로 강제이동
</script>";
exit; - 코드 종료
}
header('Content-Type: text/html; charset=utf-8');
require('conn.php');
2단계 - 폼에서 데이터 받기
$cno = $_POST["cno"]; - 과목번호
$cname = $_POST["cname"]; - 과목이름
$st_num = $_POST["st_num"]; - 학생수
$pno = $_POST["pno"]; - 교수번호
3단계 - SQL 만들기
$sql = "INSERT INTO course (cno, cname, st_num, pno)
VALUES ('$cno', '$cname', '$st_num', '$pno')";
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
COURSE 테이블에 넣어라
컬럼: cno, cname, st_num, pno
값: 과목번호< 과목이름, 학생수, 교수번호
4단계 - SQL 실행
$result = oci_parse($conn, $sql); - SQL 준비
$success = oci_execute($result); - SQL 실행
5단계 - 결과 화면
if($success) { - 성공하면
echo "<script>
alert('과목 정보가 등록되었습니다.');
location.href='co_vi.php'; - 과목목록 페이지로 이동
</script>";
} else { - 실패하면
echo "<script>
alert('등록에 실패했습니다. 입력 정보를 확인해주세요.');
history.back(); - 뒤로가기
</script>";
}
마무리
oci_free_statement($result); - 메모리 청소
oci_close($conn); DB 연결 끊기
?>
전체 흐름
co_in.html (과목입력 폼)
↓ submit
co_in.php
↓ 로그인 체크 (없으면 index.html로)
↓ 데이터 받기
↓ DB에 저장
↓
성공 → co_vi.php (과목목록)
실패 → 뒤로가기
sc_vi.php 파일 ("성적 조회 페이지" - 검색, 삭제, 페이징 다 있는 핵심 파일)
<?php
session_start();
1. 로그인 체크
if(!isset($_SESSION["id"])) {
echo "<script>
alert('로그인이 필요합니다.');
location.href='index.html';
</script>";
exit;
}
header('Content-Type: text/html; charset=utf-8');
require('conn.php');
2. 상단 메뉴 출력
echo "<div style='text-align:center;'>";
echo "<a href='./sc_in.html'>성적 입력하기</a> | <a href='./logout.php'>logout</a> | <a href='./index.html'>메인으로</a> | <a href='./sc_vi.php'>처음으로</a>";
- HTML을 PHP에서 echo로 출력하는 것
echo "</div><hr>";
3. 삭제 처리
$del_sno = isset($_GET['del_sno']) ? $_GET['del_sno'] : "";
$del_cno = isset($_GET['del_cno']) ? $_GET['del_cno'] : "";
- ★★★ GET으로 넘어온건 다음 페이지를 클릭할 시 검색 URL에서 삭제할 학번이랑 삭제할 강좌번호를 받아서 변수에 저장해라
근데 없으면 그냥 빈칸으로 둬라 ★★★
if (!empty($del_sno) && !empty($del_cno)) {
$sql_del = "DELETE FROM score WHERE sno = '$del_sno' AND cno = '$del_cno'";
- score 테이블에서 sno랑 cno 둘다 맞는 행만 삭제
$result_del = oci_parse($conn, $sql_del);
oci_execute($result_del);
oci_free_statement($result_del);
}
4. 검색어 설정
$search = isset($_POST['search']) ? $_POST['search'] : (isset($_GET['search']) ? $_GET['search'] : "");
- POST로 검색했으면 POST값 , GET으로 넘어왔으면 GET값, 둘다 없으면 빈값이다
★★★ GET으로 넘어온건 다음 페이지를 클릭할 시 검색어가 URL에 붙어서 넘어옴★★★
5. SQL 구성 ★★★
if (empty($search)) { - 검색어 없을 때
$sql = "SELECT s.sno, s.sname, s.major, s.syear, c.cno, c.cname, TO_CHAR(s.avr, '0.00') as avr
FROM student s, score r, course c
WHERE s.sno = r.sno AND r.cno = c.cno
ORDER BY s.sno ASC";
} else { - 검색어 있을 때
$sql = "SELECT s.sno, s.sname, s.major, s.syear, c.cno, c.cname, TO_CHAR(s.avr, '0.00') as avr
FROM student s, score r, course c
WHERE s.sno = r.sno AND r.cno = c.cno
AND (s.sname LIKE '%$search%' OR c.cname LIKE '%$search%')
- LIKE '%값%' = 값이 포함된 것 전부 찾기 , 이름에 검색어 있거나 OR 과목명에 검색어 있으면
ORDER BY s.sno ASC";
}
6. 데이터 읽기
$result = oci_parse($conn, $sql); - SQL 준비
oci_execute($result); - SQL 실행
$row_num = oci_fetch_all($result, $row); - 결과 전부 가져오기
oci_free_statement($result);
7. 페이징 계산
$scale = 5;
$start = isset($_GET['start']) ? (int)$_GET['start'] : 0;
- URL에 start 값이 있으면 그 숫자부터 시작한다.
숫자로 바꿔서 저장하고 없으면(처음 접속) 0으로 저장한다 (1페이지)
8. 검색창 출력
echo("<div style='text-align:center; margin-bottom:20px;'>
<form method='post' action='./sc_vi.php'>
학생명 또는 과목명 검색: <input type='text' name='search' value='$search'>
<input type='submit' value='검색'>
</form>
</div>");
echo("<p align='center'>조회된 전체 성적 데이터는 $row_num 건입니다.</p>");
9. 데이터 테이블 출력
echo("<table border='1' align='center' width='90%' style='border-collapse:collapse; text-align:center;'>");
echo("<tr bgcolor='#f2f2f2'>
<th>학번</th><th>이름</th><th>학과</th><th>학년</th><th>과목번호</th><th>과목명</th><th>평점</th><th>삭제</th>
</tr>");
for($i = $start; $i < ($start + $scale); $i++) {
★★★ i: 지금 몇번째 출력하고 있는지(배열번호) start: 이번 페이지 시작 번호
if($i < $row_num) {
echo("<tr>
<td>{$row['SNO'][$i]}</td>
<td>{$row['SNAME'][$i]}</td>
<td>{$row['MAJOR'][$i]}</td>
<td>{$row['SYEAR'][$i]}</td>
<td>{$row['CNO'][$i]}</td>
<td>{$row['CNAME'][$i]}</td>
<td>{$row['AVR'][$i]}</td>
<td><a href='./sc_vi.php?del_sno={$row['SNO'][$i]}&del_cno={$row['CNO'][$i]}&start=$start&search=$search' onclick=\"return confirm('정말 삭제하시겠습니까?')\">삭제</a></td>
</tr>");
}
}
echo("</table>");
10. 페이징 버튼
echo("<div style='text-align:center; margin-top:20px;'>");
$p = $start - $scale; - 이전 = 현재 - 5
$n = $start + $scale; - 다음 = 현재 + 5
if($p >= 0) {
echo("<a href='./sc_vi.php?start=$p&search=$search'>[이전페이지]</a> ");
} else { - 이전페이지 링크 보여주기
echo("이전페이지 ");
}
if($n < $row_num) {
echo("<a href='./sc_vi.php?start=$n&search=$search'>[다음페이지]</a>");
} else { - 다음페이지 링크 보여주기
echo("다음페이지");
}
echo("</div><hr>");
oci_close($conn);
?>'Infra & Security Eng > Database Engineering' 카테고리의 다른 글
| 인증 게시판 실습으로 이해하는 세션, SQL Injection, 3계층 구조 정리 (0) | 2026.04.02 |
|---|---|
| view, content, insert, id.html 4가지 웹페이지 파일 모델링 실습, 해설 (0) | 2026.04.02 |
| conn,i d, check, logout, st_in, st_vi 파일을 활용한 웹 데이터베이스 연동 프로그래밍과 해석해보기 (0) | 2026.03.31 |
| ERwin 차량운행일지 정규화 3단계 실습_0327_1 (0) | 2026.03.27 |
| 오라클 클라이언트(Client), 아파치(Apache), PHP, 삼바(Samba) 서버 설치, 설정, 연동까지 완벽 가이드 (0) | 2026.03.27 |