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

PHP-Oracle 연동을 통한 데이터 관리 시스템 구축 및 입출력 프로세스 분석

by 엔지니어 E 2026. 3. 23.
반응형

1. PHP-Oracle 연동을 통한 데이터 입출력 프로세스

1) pr_in.html(사용자 입력 인터페이스) 

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>교수 정보 입력</title>
</head>
<body>
    <form name="pr_form" action="pr_in.php" method="post">
* 입력한 내용을 pr_in.php 파일로 보내는 폼 시작
* name: 폼 이름
* action: 데이터를 보낼 파일 
* method: 보내는 방식 (post 방식) 
        
        교수번호 : <input type="text" name="pno"><br>
* text: 글자를 입력하는 칸 생성 
* name=pno: 입력 값 이름(서버로 보낼 때 사용) 
* <br>: 줄 바꿈

        
        교수이름 : <input type="text" name="pname"><br>
        
        학과 : <select name="section">
* section: 여러 개 중 하나를 선택하는 메뉴를 시작함
                <option value="화학">화학</option>
                <option value="물리">물리</option>
                <option value="유공">유공</option>
                <option value="생물">생물</option>
                <option value="식영">식영</option>
* 보내는 값 화학,물리,유공,생물,식영 / 보이는 글자도 화학, 물리, 유공, 생물, 식영 
               </select><br>
        
        직급 : 
        <input type="radio" name="orders" value="정교수" checked> 정교수, 
* 라디오 버튼(여러 개 중 하나 선택)
* value="정교수" : 선택 시 이 값이 전송됨
* checked: 처음부터 라디오 버튼이 "정교수"로 선택되어 있음
        <input type="radio" name="orders" value="부교수"> 부교수, 
        <input type="radio" name="orders" value="조교수"> 조교수<br>
        
        발령일 : <input type="date" name="hiredate"><br>
        
        <hr>
* <br>: 가로 줄 표시(구분선)         
        <input type="submit" value="확인">
* submit: 버튼생성(누르면 입력한 내용 전송)
* value: 확인(버튼에 보이는 글자) 
        
    </form>
</body>
</html>
1. 기능: 사용자가 교수 번호, 이름, 학과, 직위, 임용일을 입력하는 화면을 제공함
2. 작동 원리: <form> 태그의 action="pr_in.php"와 method="post" 설정을 통해, 사용자가 [확인] 버튼을 누르는 순간 모든 입력값을 pr_in.php 파일로 통째로 넘긴다

 

2) pr_in.php (중간 처리 및 DB 저장)

<?php
  header('Content-Type: text/html; charset=utf-8');
* 브라우저에게 응답 데이터의 형식이 HTML이고, 한글 깨짐 방지를 위해 UTF-8 인코딩임을 알림
  require('conn.php');
* DB 연결 정보가 담긴 'conn.php' 파일을 불러옴
  $pno = $_POST["pno"];
  $pname = $_POST["pname"];
  $section = $_POST["section"];
  $orders = $_POST["orders"];
  $hiredate = $_POST["hiredate"];
* POST 방식으로 전달된 데이터들을 각각의 변수에 저장

  $sql = "INSERT INTO professor (pno, pname, section, orders, hiredate) 
          VALUES ('$pno', '$pname', '$section', '$orders',  TO_DATE('$hiredate', 'YYYY-MM-DD'))";
* TO_DATE 함수를 사용해 문자열 형태의 날짜를 Oracle의 날짜(DATE) 타입으로 변환
* INSERT INTO professor: 이미 만들어진 표에 새로운 데이터를 넣고 싶을 때 약속된 명령어인 INSERT INTO를 반드시 써야 한다

* VALUES: 앞서 말한 칸들에 들어갈 실제 데이터를 입력하기 위해 쓰는 명령어
* ('$pno', '$pname', ...): 각 칸에 실제로 들어갈 구체적인 내용

  $result = oci_parse($conn, $sql);
* 작성한 SQL 문을 실행하기 위해 준비(Parsing) 함
  $success = oci_execute($result); 
* 준비된 SQL 문을 실제로 실행(Execute)합니다. 실행 성공 시 true, 실패 시 false를 반환함

  if($success) {
echo "<script>
              alert('정상 입력 되었습니다.');
              location.href='pr_vi.php'; - 저장이 성공했다면 알림창을 띄우고 목록 페이지(pr_vi.php)로 이동
            </script>";
       } else {
      echo "저장 실패";
* 저장이 실패했다면 화면에 메시지를 출력함

  }

  oci_free_statement($result);
  oci_close($conn);
* 사용한 메모리(문서 리소스)를 해제하고 DB 연결을 닫음
?>
1. 기능: HTML에서 넘어온 데이터를 받아서 오라클 데이터베이스(DB)에 집어넣는 역할을 함
2. 작동 단계: HTML에서 넘어온 데이터를INSERT INTO professor ... 문장을 만든다. 이때 달력에서 온 날짜(2026-03-23)를 오라클이 이해할 수 있도록 TO_DATE() 함수로 감싸서 명령어를 완성한다. 받아서 오라클 데이터베이스(DB)에 집어넣는 배달부 역할을 한다
3. 실행 및 판정: oci_execute() 명령어로 DB에 전송 한다. 성공 여부($success)를 판단하여 성공 시 alert 창을 띄우고 목록 페이지인 **pr_vi.php**로 사용자를 강제 이동 시킨다

 

3) pr_vi.php (데이터 조회 및 화면 출력)

<?php
  header('Content-Type: text/html; charset=utf-8');
  echo("<div style='text-align:center;'><a href='./pr_in.html'>교수 정보 입력하기</a></div><hr>");
  require('conn.php');
* 화면에 HTML 출력
* 가운데 정렬된 링크 생성 (클릭하면 pr_in.html로 이동)

  $sql = "SELECT pno, pname, section, orders, TO_CHAR(hiredate, 'YYYY-MM-DD') 
          FROM professor ORDER BY pno ASC";          
* 실행할 SQL문 (데이터베이스에서 교수 정보 가져오기)
* hiredate → 날짜 (YYYY-MM-DD 형식으로 변환)

* ORDER BY → 교수번호 기준 오름차순 정렬
  $result = oci_parse($conn, $sql); 
* SQL문을 실행 준비 상태로 만듦
  oci_execute($result);                
* SQL문 실행

  echo "<table border='1' style='margin:0 auto; width:80%text-align:center; border-collapse:collapse;'>";
* 표(table 시작)
* border → 테두리
* margin:0 auto → 가운데 정렬
* width:80% → 너비
* text-align:center → 글자 가운데 정렬
  echo "<tr bgcolor='#f2f2f2'>
          <th>교수번호</th><th>이름</th><th>소속학과</th><th>직위</th><th>임용일</th>
        </tr>";
* 표의 첫줄=tr 배경색:bgcolor #f2f2f2
  while ($row = oci_fetch_array($result, OCI_NUM)){
      echo "<tr>
              <td>$row[0]</td>
              <td>$row[1]</td>
              <td>$row[2]</td>
              <td>$row[3]</td>
              <td>$row[4]</td>
            </tr>";
  }
* 결과 데이터를 한 줄씩 각져온다 
* OCI_NUM → 숫자 인덱스(0,1,2...)로 접근
* 한 행(row) 출력 

    // $row[0] → 교수번호
    // $row[1] → 이름
    // $row[2] → 학과
    // $row[3] → 직급
    // $row[4] → 날짜
  echo "</table>";

  oci_free_statement($result);  
* SQL 실행 결과 메모리 해제
  oci_close($conn);
* 데이터베이스 연결 종료

  echo "<hr>";
  show_source(__FILE__);
?>
1. 기능: DB 창고에 저장된 모든 교수 정보를 꺼내서 사용자 화면에 리스트 형태로 보여줍니다.
2. 작동원리: 
1) SELECT * FROM professor ORDER BY pno 명령어를 실행하여 DB 서버로부터 데이터를 한 줄씩 가져온다
2) while 문을 사용하여 데이터가 더 이상 없을 때까지 반복하며 화면에 출력함

 

 

2. 프로세스 요약표

단계 파일명 주요 역할
1. 입력 pr_in.html 데이터 포장 및 전송
2. 처리 pr_in.php 데이터 수령 및 DB 저장
3. 출력 pr_vi.php DB 데이터 조회 및 전시

 

3. 흐름 정리

1. 입력 단계: pr_in.html에서 사용자가 정보를 입력하고 [확인]을 클릭 함 
2. 처리 단계: pr_in.php가 실행되면서 DB에 저장을 시도함 
3. 알림 단계: 저장이 성공하면 "정상 입력 되었습니다." 알림창을 출력함
4. 확인 단계: 알림창의 [확인]을 누르면 즉시 목록(pr_vi.php)으로 이동함
0323 작업

각 파일 
날짜(AVR -> TO_CHAR) 변경, 테이블 태그 추가(가운데 정렬), oder by 태그(학번 등 순으로),  일반인이 읽기 쉬운 숫자와 문자 로 변경함