본문 바로가기
Infra & Security Eng/Database Engineering

페이지 구현 파일(id,conn, co_in, sc_vi.php) 파일 관계 구조, 패턴 설명, 명령어 해석하기

by 엔지니어 E 2026. 4. 1.
반응형

 

페이지 구현 파일

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>&nbsp;&nbsp;");
  } else { - 이전페이지 링크 보여주기
      echo("이전페이지&nbsp;&nbsp;");
  }
 
  if($n < $row_num) {
      echo("<a href='./sc_vi.php?start=$n&search=$search'>[다음페이지]</a>");
  } else { - 다음페이지 링크 보여주기
      echo("다음페이지");
  }
 
  echo("</div><hr>");
  oci_close($conn);
?>