다양한 기능 추가 (삭제, 검색, 화면단위 출력)
▶ 삭제 및 검색, 화면단위 출력 기능
위와 같이 검색기능을 활성화 할 것이다.
st_vi.php
<form name='search' method='post' action='st_vi.php'>
검색창 <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> ");
else
echo("이전페이지 ");
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'>
검색창 <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> ");
else
echo("이전페이지 ");
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> <input type="text" name="cno"></td>
</tr>
<tr>
<td width="50"><p align="center">과목명</p></td>
<td> <input type="text" name="cname"></td>
</tr>
<tr>
<td width="50"><p align="center">학점수</p></td>
<td> 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> <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> <input type="text" name="cno"></td>
</tr>
<tr>
<td width="70"><p align="center">과목명</p></td>
<td> <input type="text" name="cname"></td>
</tr>
<tr>
<td width="70"><p align="center">학점수</p></td>
<td> 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 |