반응형


| 삭제 요약 프로세스 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)를 칸 안에 그대로 보여주는 명령 검색창 <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 |