본문 바로가기
Infra & Security Eng/Daily Records

PHP 파일 언어 분석, 웹 페이지에 delete, 검색어 기능 출력하기

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

 

삭제 요약 프로세스
1. 사용자: 화면에서 삭제버튼(del)을 누름
2. 브라우저: 주소창 뒤에 학번, 과목번호를 실어서 php 서버로 보냄 
3. PHP서버: $_GET 바구니에서 그 값들을 꺼내 변수에 담음 
4. DB: 그 변수 값들과 똑같은 데이터를 찾아 삭제함

검색어 요약 프로세스 
1. 사용자: 화면의 검색창에 이름을 입력하고 확인 버튼을 누름
2. 브라우저: 입력된 글자를 POST방식에 담아 PHP 서버로 보냄
3. PHP 서버: $_POST 바구니에서 그 값을 꺼내 $search 변수에 담고, DB에 보낼 SQL을 만듦
4. DB 서버: 그 변수 값이 포함된 데이터(이름 등)를 찾아 결과 뭉치를 PHP 서버로 돌려줌 
5. PHP 서버: 받은 결과 뭉치를 가지고 for 반복문을 돌려 검색된 내용만 담긴 새로운 표를 화면에 그림

<?php

 // 브라우저에게 한글을 깨지지 않게 출력하라고 알려주는 설정
  header('Content-Type: text/html; charset=utf-8');
  
  // 데이터베이스와 연결하는 설정 파일(conn.php)을 가져옴
  require('conn.php');

(삭제) 3단계 - PHP 서버가 데이터를 받는 시점(서버내부)
주소창에 실려온 정보를 PHP 변수(상자)에 옮겨 담는 과정
  // [삭제 기능 시작] 
  // 주소창(? 뒤에 붙는 값)에서 'del_sno'(학번)와 'del_cno'(과목번호)를 받아온다
  $del_sno = $_GET['del_sno'];
  $del_cno = $_GET['del_cno'];

(삭제 실행 내용 부분)
  // 학번과 과목번호가 둘 다 비어있지 않다면(삭제 버튼을 눌렀다면) 실행함
  if (!empty($del_sno) && !empty($del_cno)) {
      // 해당 학번과 과목번호가 모두 일치하는 성적 데이터를 지우라는 명령어를 만듬
      $sql_del = "delete from score where sno = '$del_sno' and cno = '$del_cno'";
      // 데이터베이스에 명령어를 전달할 준비를 함
      $result_del = oci_parse($conn, $sql_del);
      // 명령어를 실제로 실행
      oci_execute($result_del);
      // 작업이 끝났으므로 준비했던 메모리를 비움
      oci_free_statement($result_del);
      // 삭제가 끝난 후 화면을 새로고침하여 바뀐 목록을 보여줌
      echo ("<meta http-equiv='Refresh' content='0; URL=sc_vi.php'>");
      // 아래 코드가 실행되지 않도록 여기서 멈춘다
      exit;
  }
  // 

(검색) 1단계 - 사용자 입력 (브라우저 -> PHP 서버)
method='post' 방식에 따라, 사용자가 입력한 글자가 서버(PHP)로 전송되어 사용자가 쓴 글자가 $search 라는 변수 상자에 담긴다 
  $search = $_POST['search'];

2단계 - SQL 작성(PHP 서버 내부) 
입력값이 있는지 없는지에 따라 DB에 물어볼 질문지(if, else)를 다르게 만든다

  if (empty($search)) {
      // 검색창이 비어있을 때: 모든 학생의 성적 데이터를 가져오는 명령어
      // s(학생), r(성적), c(과목) 세 테이블을 연결(Join)해서 가져옴
      $sql = "select s.sno, s.sname, s.major, s.syear, c.cno, c.cname, 
                     to_char((r.result / 100) * 4.5, '0.00') sc_res
              from student s, score r, course c
              where s.sno = r.sno and r.cno = c.cno
              order by s.sno asc";
* select * from . . . : 빈칸 일때 모든 데이터를 다 가져와라 
  } else {
      // 검색창에 이름이 있을 때: 그 이름이 포함된 학생의 성적만 가져오는 명령어
      $sql = "select s.sno, s.sname, s.major, s.syear, c.cno, c.cname, 
                     to_char((r.result / 100) * 4.5, '0.00') sc_res
              from student s, score r, course c
              where s.sno = r.sno and r.cno = c.cno and s.sname like '%$search%'
* ... where sname like '%$search%': 이 이름이 포함된 데이터만 가져와라
              order by s.sno asc";
  }

3단계 - 데이터 수신 (PHP 서버 -> DB -> PHP 서버) 
준비한 명령어를 DB에 던져서 실제 학생 정보를 받아옴 
  // 명령어를 전달할 준비
  $result = oci_parse($conn, $sql);
  // 명령어를 실행
  oci_execute($result);
$row: 검색된 데이터들이 담긴 큰 바구니 / $row_num: 검색된 데이터가 총 몇 줄인지 알려주는 숫자
  $row_num = oci_fetch_all($result, $row);
  // 준비했던 메모리를 비움
  oci_free_statement($result);
  // 데이터베이스와의 연결을 닫음
  oci_close($conn);

4단계: 결과 화면 출력 (PHP 서버 내부에서 HTML 조립) 
 // 상단에 메뉴 링크를 출력함
  echo("<div style='text-align:center;'>
          <a href='./sc_in.html'>성적 입력하기</a> 
          <a href='./sc_vi.php'>전체보기</a>
        </div><hr>");
?>

// 사용자가 입력한 검색어를 post 방식(비밀 봉투)에 담아, 현재 페이지인 sc_vi.php로 전송하여 화면 중앙(center)에 배치하는 검색창 틀(form)을 만드는 명령
<form name='search' method='post' action='sc_vi.php' align='center'>
// 사용자가 글자를 입력할 수 있는 빈칸(text)을 만들고, 그 이름을 search라고 붙여 관리하며, 방금 검색했던 단어($search)를 칸 안에 그대로 보여주는 명령

    검색창 &nbsp;<input type='text' name='search' value='<?php echo $search; ?>'>
// 입력한 검색어를 POST에 담아 서버로 즉시 전송하는 '확인' 버튼을 만드는 명령
    <input type='submit' name='확인' value='확인'>
</form>

<?php
  // 조회된 데이터의 총 개수를 화면에 적어줌
  echo("<p align='center'>조회된 데이터 개수는 $row_num 입니다.</p>");

  // 표를 만들기 시작함
  echo("<table border='1' align='center' width='90%' style='border-collapse:collapse;'>");
  // 표의 맨 윗줄(제목)을 출력함
  echo("<tr bgcolor='#f2f2f2'>
          <th>학번</th><th>이름</th><th>학과</th><th>학년</th><th>과목번호</th><th>과목명</th><th>평점</th><th>삭제</th>
        </tr>");


(삭제) 1단계: PHP 서버의 조립(서버 내부) - delete, 검색어 명령어 이전에 표를 출력하는 단계
데이터베이스(DB)에서 가져온 성적표 뭉치를 하나씩 꺼내서 HTML 글자로 만드는 단계
동작(for문): DB에 데이터가 100줄이 있다면, 이 반복문도 100번 돌게 된다
변수치환: $i가 0일때, PHP는 $row['SNO'][$i] 자리에 실제 학번인 894501 집어넣는다 
  // 가져온 데이터 줄 수만큼 반복해서 표의 내용을 채운다

  for($i=0; $i<$row_num; $i++) {
      echo("<tr>
              <td><p align='center'>{$row['SNO'][$i]}</p></td> - $row라는 데이터 바구니에서 $i번째 줄의 SNO(학번)를 꺼내, 표의 한 칸(td) 정중앙(center)에 배치하여 출력하는 명령
              <td><p align='center'>{$row['SNAME'][$i]}</p></td>
              <td><p align='center'>{$row['MAJOR'][$i]}</p></td>
              <td><p align='center'>{$row['SYEAR'][$i]}</p></td>
              <td><p align='center'>{$row['CNO'][$i]}</p></td>
              <td><p align='center'>{$row['CNAME'][$i]}</p></td>
              <td><p align='center'>{$row['SC_RES'][$i]}</p></td>
(삭제) 2단계: 브라우저가 화면 출력(사용자 화면) - PHP 서버가 만든 글자 뭉치를 사용자의 브라우저가 받아 화면에 출력하는 단계

              <td><p align='center'><a href='./sc_vi.php?del_sno={$row['SNO'][$i]}&del_cno={$row['CNO'][$i]}'>del</a></p></td>
            </tr>"); - 
  } - $row 바구니에서 $i번째 줄의 학번(SNO)과 과목번호(CNO)를 꺼내, 클릭 시 해당 정보를 주소창에 싣고 가는 '삭제(del)' 링크를 표의 한 칸(td) 정중앙(center)에 만드는 명령

  // 표를 닫는다
  echo("</table><hr>");

  // 현재 파일의 소스 코드를 화면 하단에 보여준다
  show_source(__FILE__);
?>

 

'Infra & Security Eng > Daily Records' 카테고리의 다른 글

0326 Daily Records  (0) 2026.03.26
0326 Daily Records  (0) 2026.03.26
0324 Daily Records  (0) 2026.03.24
0323 Daily Records  (0) 2026.03.24
0320 Daily Records  (0) 2026.03.20