다양한 기능 추가 (삭제, 검색, 화면단위 출력)

▶ 삭제 및 검색, 화면단위 출력 기능

위와 같이 검색기능을 활성화 할 것이다.

 

st_vi.php

<form name='search' method='post' action='st_vi.php'>
 검색창 &nbsp;<input type='text' name='search'>
		   <input type='submit' name='확인' value='확인'>
 </form>


<?
  echo("<a href=./st_in.html>자료 입력하기</a><hr>");

  require('conn.php');

  //==========================삭제기능========================================
  $del=$_GET[del];        // $del 변수가 null이 아니면 행을 삭제하는 else절이 실행된다.
  if (empty($del)){}
  else {
	  $sql="delete from student where sno='$del'";
	  $result=oci_parse($conn,$sql);
	  oci_execute($result);
	  oci_free_statement($result);
	  }

  //==========================검색기능=========================================

    $search = $_POST[search];
	if (empty($search))
	{
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	from student order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	else
	{
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	       from student
	 	       where sname like '%{$search}%' order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	 oci_execute($result);

  //==========================================================================


  $row_num=oci_fetch_all($result, $row);  // $row_num : 전제 행의 수
  echo("Row의 개수는 $row_num 입니다.<br><hr>"); // 행은 컬럼명, 열은 헹번호

  oci_free_statement($result);
  oci_close($conn);

   $scale=5;                           // 화면에 출력할 행의 개수
   $start = $_GET[start];
   if (empty($start)){$start=0;}    // 첫 화면은 0에서 시작, 배열의 키값은 0에서 시작

  echo("<table border='1'>");
  for($i=$start; $i<($start+$scale); $i++) {
   if ($i<$row_num){
     echo("
    	<tr>
    		<td width='50'><p align='center'>{$row['SNO'][$i]}</p></td>
    		<td width='80'><p align='center'>{$row['SNAME'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SEX'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SYEAR'][$i]}</p></td>
    		<td width='50'><p align='center'>{$row['MAJOR'][$i]}</p></td>
    		<td width='30'><p align='center'>{$row['AVR'][$i]}</p></td>
    		<td width='30'><a href=./st_vi.php?del={$row[SNO][$i]}>del</a></td>
    	</tr>
    	");
  	}
	}
   echo("</table><hr>");

  $p=$start-$scale;     // 이전 화면의 시작 위치
  $n=$start+$scale;     // 다음 화면의 시작 위치

  if($p>=0)
    echo("<a href=./st_vi.php?start=$p>[이전페이지]</a>&nbsp;&nbsp;");
  else
    echo("이전페이지&nbsp;&nbsp;");
  if($n<$row_num)
    echo("<a href=./st_vi.php?start=$n>[다음페이지]</a>");
  else
    echo("다음페이지");
?>

검색 실행결과
화면단위 실행결과


위 방식으로 프로그램을 구성할 경우 오류가 있다.

다음페이지를 눌렀을 경우 search 변수가 유지가 되지 않아서 다음페이지를 다시 처음부터 받아오는 경우가 생긴다.

search 변수를 출력함으로써 search 변수가 유지되지 않는 것을 확인할 수 있다.

 

수정된 st_vi.php

<form name='search' method='get' action='st_vi.php'>
 검색창 &nbsp;<input type='text' name='search'>
		   <input type='submit' name='확인' value='확인'>
 </form>


<?
  echo("<a href=./st_in.html>자료 입력하기</a><hr>");

  require('conn.php');

  //==========================삭제기능========================================
  $del=$_GET[del];        // $del 변수가 null이 아니면 행을 삭제하는 else절이 실행된다.
  if (empty($del)){}
  else {
	  $sql="delete from student where sno='$del'";
	  $result=oci_parse($conn,$sql);
	  oci_execute($result);
	  oci_free_statement($result);
	  }

  //==========================검색기능=========================================

    $search = $_GET[search];
	if (empty($search)) {
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	     from student order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	else {
	 	$sql="select sno,sname,sex,major,syear,to_char(avr,'0.00') avr
	 	       from student
	 	       where sname like '%{$search}%' order by sno";
	 	$result=oci_parse($conn,$sql);
	 }
	 oci_execute($result);

  //==========================================================================


  $row_num=oci_fetch_all($result, $row);  // $row_num : 전제 행의 수
  echo("Row의 개수는 $row_num 입니다.<br><hr>"); // 행은 컬럼명, 열은 헹번호

  oci_free_statement($result);
  oci_close($conn);

   $scale=5;                           // 화면에 출력할 행의 개수
   $start = $_GET[start];
   if (empty($start)){$start=0;}    // 첫 화면은 0에서 시작, 배열의 키값은 0에서 시작

  echo("<table border='1'>");
  for($i=$start; $i<($start+$scale); $i++) {
   if ($i<$row_num){
     echo("
    	<tr>
    		<td width='50'><p align='center'>{$row['SNO'][$i]}</p></td>
    		<td width='80'><p align='center'>{$row['SNAME'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SEX'][$i]}</p></td>
    		<td width='20'><p align='center'>{$row['SYEAR'][$i]}</p></td>
    		<td width='50'><p align='center'>{$row['MAJOR'][$i]}</p></td>
    		<td width='30'><p align='center'>{$row['AVR'][$i]}</p></td>
    		<td width='30'><a href=./st_vi.php?del={$row[SNO][$i]}>del</a></td>
    	</tr>
    	");
  	}
	}
   echo("</table><hr>");

  $p=$start-$scale;     // 이전 화면의 시작 위치
  $n=$start+$scale;     // 다음 화면의 시작 위치

  if($p>=0)
    echo("<a href=./st_vi.php?start=$p&search=$search>[이전페이지]</a>&nbsp;&nbsp;");
  else
    echo("이전페이지&nbsp;&nbsp;");
  if($n<$row_num)
    echo("<a href=./st_vi.php?start=$n&search=$search>[다음페이지]</a>");
  else
    echo("다음페이지");

  echo("<br>");
  echo($search); // 확인하기 위해 search 변수 출력
?>

실행결과

search 변수가 잘 유지되는 것을 확인할 수 있다.


관계(Relationship)을 가진 테이블에 대한 입출력

▶ 유효한 데이터 확인

course(과목) 테이블 입력 폼과 프로그램

co_in.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> course 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="co_in.php" method="POST">
<center>
<table border="0" width="300">
  <tr>
    <td width="70"><p align="center">과목번호</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="cno"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">과목명</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="cname"></td>
  </tr>
  <tr>
    <td width="50"><p align="center">학점수</p></td>
    <td>&nbsp;&nbsp;1<input type="radio" name="st_num" value="1">,
    2<input type="radio" name="st_num" value="2">,
    3<input type="radio" name="st_num" value="3">,
    4<input type="radio" name="st_num" value="4"></td>
  </tr>
  <tr>
    <td width="70"><p align="center">교수번호</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="pno"></td>
  </tr>
  <tr>
    <td colspan="2">
    <p align="center"><input type="submit" name="확인" value="확인"></p>
  </td>
  </tr>
<table>
</form>
</body></html>

이런식으로 과목명을 입력할 경우 교수번호를 알아야하는데 우리는 알 수가 없다. 따라서 아래처럼 교수이름을 출력하도록 수정한다.

 

수정후 co_in.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> course 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="co_in.php" method="POST">
<center>
<table border="0" width="300">
  <tr>
    <td width="70"><p align="center">과목번호</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="cno"></td>
  </tr>
  <tr>
    <td width="70"><p align="center">과목명</p></td>
    <td>&nbsp;&nbsp;<input type="text" name="cname"></td>
  </tr>
  <tr>
    <td width="70"><p align="center">학점수</p></td>
    <td>&nbsp;&nbsp;1<input type="radio" name="st_num" value="1">,
    2<input type="radio" name="st_num" value="2">,
    3<input type="radio" name="st_num" value="3">,
    4<input type="radio" name="st_num" value="4"></td>
  </tr>
  <tr>
  <td width="70"><p align="center">교수</p></td>
    <td><select name="pno">

    <?
      require('conn.php');
      $sql="select pno, pname
            from professor"; // professor 테이블에서 pno와 pname만 검색한다.
      $result=oci_parse($conn,$sql);
      oci_execute($result);
      $row_num=oci_fetch_all($result, $row);
      for ($i=0; $i<$row_num; $i++) {
          echo("<option value='{$row[PNO][$i]}'>{$row[PNAME][$i]}</option>");
        }
      oci_free_statement($result);
      oci_close($conn);
    ?>
        <option value=""></option>
    </td>
  </tr>
  <tr>
    <td colspan="2">
      <p align="center"><input type="submit" name="확인" value="확인"></p>
    </td>
  </tr>
<table>
</form>
</body></html>

 

co_in.php

<?
  $cno = $_POST[cno];
  $cname = $_POST[cname];
  $st_num = $_POST[st_num];
  $pno = $_POST[pno];

  require('conn.php');

  $sql="insert into course (cno, cname, st_num, pno)
        values ('$cno', '$cname', $st_num, '$pno')";

  $result=oci_parse($conn,$sql);
  $re=@oci_execute($result);

  oci_free_statement($result);
  oci_close($conn);

  if(!$re)
    { echo(" <script>
            window.alert('과목 입력 장애 입니다.');
            history.go(-1);
            </script>
          ");
      exit;
    }
  else
    echo(" <meta http-equiv='Refresh' content = '0; URL=co_vi.php'>");
?>

 

sc_in.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title> score 입력폼 </title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="insert" action="sc_in.php" method="POST">
<center>
<table border="0" width="300">
  <tr>
    <td width="70"><p align="center">학생</p></td>
    <td><select name="sno">
      <?
      require('conn.php'); // 학생의 명단을 나열한다.
      $sql="select sno, sname
          from student";
      $result=oci_parse($conn,$sql);
      oci_execute($result);
      $row_num=oci_fetch_all($result, $row);
      for ($i=0; $i<$row_num; $i++) {
          echo("<option value='{$row[SNO][$i]}'>{$row[SNAME][$i]}</option>");
        }
      oci_free_statement($result);
      ?>
    </td>
  </tr>
  <tr>
    <td width="50"><p align="center">과목</p></td>
    <td><select name="cno">
      <?
      $sql="select cno, cname
            from course"; // 과목정보를 나열한다.
      $result=oci_parse($conn,$sql);
      oci_execute($result);
      $row_num=oci_fetch_all($result, $row);
      oci_free_statement($result);
      oci_close($conn);
      for ($i=0; $i<$row_num; $i++) {
          echo("<option value='{$row[CNO][$i]}'>{$row[CNAME][$i]}</option>");
        }
      ?>
    </td>
  </tr>
  <tr>
    <td width="50"><p align="center">점수</p></td>
    <td><input type="text" name="res"></td>
  </tr>
  <tr>
    <td colspan="2">
    <p align="center"><input type="submit" name="확인" value="확인"></p>
    </td>
  </tr>
<table>
</form>
</body></html>

 

sc_in.php

<?
  $sno = $_POST[sno];
  $cno = $_POST[cno];
  $sc_result = $_POST[sc_result];

  require('conn.php');

  $sql="insert into score (sno, cno, sc_result)
        values ('$sno', '$cno', '$sc_result')";

  $result=oci_parse($conn,$sql);
  $re=@oci_execute($result);

  oci_free_statement($result);
  oci_close($conn);

  if(!$re)
    { echo(" <script>
            window.alert('기말고사 점수 입력 장애 입니다.');
            history.go(-1);
            </script>
          ");
      exit;
    }
  else
    echo(" <meta http-equiv='Refresh' content = '0; URL=sc_vi.php'>");
?>

추가된 것을 확인할 수 있다.

 

'PHP 공부 기록' 카테고리의 다른 글

PHP 9 - 세션  (0) 2021.12.24
PHP 7 - PHP와 오라클 연동 (입출력 프로그램)  (0) 2021.12.24
PHP 6 - PHP를 이용한 DB 접속  (0) 2021.12.12
(수정중) PHP 5 - 배열  (0) 2021.11.23
PHP 4 - 폼(Form)  (0) 2021.11.19

+ Recent posts