php-php와 오라클 연동(2)

2020. 1. 10. 14:30Security/language

1. 과목 테이블 입력을 위한 폼 파일 작성(co_in.html)

2. 과목 테이블에 입력된 데이터를 전달 받아 입력할 프로그램을 작성(co_in.php)

3. co_in.html의 입력 부분 개선

4. co_vi.php 개선

<?
	session_start();

	if(empty($_GET["logout"])){}
	else session_unset(); // session_destroy 사용과 비교한다.

	$id = $_SESSION["id"];
	$passwd = $_SESSION["passwd"];

	require('conn.php');

	$sql="select * from id
		where id = '$id'
		and passwd = DBMS_CRYPTO.Hash(to_clob(to_char('$id$passwd')),2)";
	$result=oci_parse($conn,$sql);

	$re=oci_execute($result);
	$row_num1=oci_fetch_all($result,$row);

	if($row_num1 == 1){ // 로그인 상태일때
		echo("<a href=./co_in.html>자료 입력하기</a>
		<a href=./co_vi.php?logout=$row_num1>logout</a><hr>
		");
	}
	else{ // 비로그인 상태일때
		echo(" <a href=./id.html>계정등록</a>
		<a href=./check.html>login</a><hr>");
	}
//==========================================================================
	$del=$_GET[del]; // $del 변수가 null이 아니면 행을 삭제하는 else절이 실행된다.
	if (empty($del)){}
	else {
		$sql="delete from course where cno='$del'";
		$result=oci_parse($conn,$sql);
		oci_execute($result);
		oci_free_statement($result);
	}

//==========================================================================
	$search = $_GET[search];
	if (empty($search)) // $search 변수가 없을 때 $sql
	{
		$sql="select cno, cname, st_num, pname
			from course, professor
			where course.pno=professor.pno
			order by cname"; // pno 대신 pname이 보이게 수정
		$result=oci_parse($conn,$sql);
	}
	else // $search 변수가 있을 때 $sql
	{
		$sql="select cno, cname, st_num, pname
			from course, professor
			where course.pno=professor.pno
			and cname like  '%{$search}%'
			order by cname"; // pno 대신 pname이 보이게 수정
		$result=oci_parse($conn,$sql);
	}
	oci_execute($result);
	echo("<form name='search' method='get' action='co_vi.php'>
		검색창 &nbsp;<input type='text' name='search'>
		<input type='submit' name='확인' value='확인'>
		</form>
	");
	
//==========================================================================		

	$row_num=oci_fetch_all($result, $row);
	oci_free_statement($result);
	oci_close($conn);

	$scale=5; 
	$start = $_GET[start];
	if (empty($start)){$start=0;}
	
	echo("<table border='0'>");
	for($i=$start; $i<($start+$scale); $i++){
		if($i<$row_num){
			echo("
				<tr>
					<td width='50'><p align='center'>{$row[CNO][$i]}</p></td>
					<td width='100'><p align='center'>{$row[CNAME][$i]}</p></td>
					<td width='20'><p align='center'>{$row[ST_NUM][$i]}</p></td>
					<td width='50'><p align='center'>{$row[PNAME][$i]}</p></td>
					
			");
			if($row_num1==1){
			echo("
				
					<td width='30'><a href=./co_vi.php?del={$row[CNO][$i]}&start=$start&search=$search>del</a></td>
				</tr>
			");
			}
		
		}	
		
	}
	echo("</table><hr>");
 	
	$p=$start-$scale; // 이전 화면의 시작 위치
	$n=$start+$scale; // 다음 화면의 시작 위치
	
	if($p>=0)
		echo("<a href=./co_vi.php?start=$p&search=$search>[이전페이지]</a>&nbsp;&nbsp;");
	else
		echo("이전페이지&nbsp;&nbsp;");

	if($n<$row_num)
		echo("<a href=./co_vi.php?start=$n&search=$search>[다음페이지]</a>");
	else
		echo("다음페이지");
?>
<hr>
<a href=../20200110/index.html>홈화면으로</a>
<?
	echo("<hr>");
	show_source(__FILE__);
?>

테이블 검색 결과가 pno 대신 pname이 보이도록 개선한다

 

5. 이와 같은 방식으로 sc_in.html과 sc_in.php 작성

5-1. 점수 테이블 입력을 위한 폼 파일 작성(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>"); // 불러오는 것은 sno지만 보이는 것은 sname
	}
	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>"); // 불러오는 것은 cno지만 보이는 것은 cname
	}
?>
		</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>

5-2. 점수 테이블에 입력된 데이터를 전달 받아 입력할 프로그램을 작성(sc_in.php)

<?
	$sno = $_POST[sno];
	$cno = $_POST[cno];
	$res = $_POST[res];
	
	require('conn.php');

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

	$result=oci_parse($conn,$sql); // SQL문을 파싱해서 실행 계획을 생성한다.
	$re=oci_execute($result); // SQL문을 실행한다.

	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'>");
?>
<?
	echo("<hr>");
	show_source(__FILE__);
?>

5-3. sc_vi.php 개선

<?
	session_start();

	if(empty($_GET["logout"])){}
	else session_unset(); // session_destroy 사용과 비교한다.

	$id = $_SESSION["id"];
	$passwd = $_SESSION["passwd"];

	require('conn.php');

	$sql="select * from id
		where id = '$id'
		and passwd = DBMS_CRYPTO.Hash(to_clob(to_char('$id$passwd')),2)";
	$result=oci_parse($conn,$sql);

	$re=oci_execute($result);
	$row_num1=oci_fetch_all($result,$row);

	if($row_num1 == 1){ // 로그인 상태일때
		echo("<a href=./sc_in.html>자료 입력하기</a>
		<a href=./sc_vi.php?logout=$row_num1>logout</a><hr>
		");
	}
	else{ // 비로그인 상태일때
		echo(" <a href=./id.html>계정등록</a>
		<a href=./check.html>login</a><hr>");
	}
//==========================================================================
	$del1 = $_GET[del1]; // $del 변수가 null이 아니면 행을 삭제하는 else절이 실행된다.
	$del2 = $_GET[del2];

	if (empty($del1) && empty($del2)){}
	else {
		$sql="delete from score where sno ='$del1' and cno='$del2'";
		$result=oci_parse($conn,$sql);
		oci_execute($result);
		oci_free_statement($result);
	}

//==========================================================================
	$search = $_GET[search];
	if (empty($search)) // $search 변수가 없을 때 $sql
	{
		$sql="select cname, sname, to_char(result,'00') result
        		from student, course, score
        		where student.sno=score.sno and course.cno=score.cno
        		order by cname, sname"; // cno, sno대신 cname, sname이 검색되게 개선
		$result=oci_parse($conn,$sql);
	}
	else // $search 변수가 있을 때 $sql
	{
		$sql="select cname, sname, to_char(result,'00') result
        		from student, course, score
        		where student.sno=score.sno and course.cno=score.cno
				and sname like '%{$search}%' 
        		order by cname, sname"; // cno, sno대신 cname, sname이 검색되게 개선
		$result=oci_parse($conn,$sql);
	}
	oci_execute($result);

	echo("<form name='search' method='get' action='sc_vi.php'>
		검색창 &nbsp;<input type='text' name='search'>
		<input type='submit' name='확인' value='확인'>
		</form>
	");
//==========================================================================	
	$row_num=oci_fetch_all($result, $row);
	oci_free_statement($result);
	oci_close($conn);

	$scale=5; 
	$start = $_GET[start];
	if (empty($start)){$start=0;}
	
	echo("<table border='0'>");
	for($i=$start; $i<($start+$scale); $i++){
		if($i<$row_num){
			echo("
				<tr>
					<td width='100'><p align='center'>{$row[SNAME][$i]}</p></td>
					<td width='100'><p align='center'>{$row[CNAME][$i]}</p></td>
					<td width='40'><p align='center'>{$row[RESULT][$i]}</p></td>		
			");
			if($row_num1==1){
			echo("
					<td width='30'><a href=./sc_vi.php?del1={$row[SNO][$i]}&del2={$row[CNO][$i]}&start=$start&search=$search>del</a></td>
				</tr>
			");
			}
		}
	}
	echo("</table><hr>");

	$p=$start-$scale; // 이전 화면의 시작 위치
	$n=$start+$scale; // 다음 화면의 시작 위치
	
	if($p>=0)
		echo("<a href=./sc_vi.php?start=$p&search=$search>[이전페이지]</a>&nbsp;&nbsp;");
	else
		echo("이전페이지&nbsp;&nbsp;");

	if($n<$row_num)
		echo("<a href=./sc_vi.php?start=$n&search=$search>[다음페이지]</a>");
	else
		echo("다음페이지");
?>
<hr>
<a href=../20200110/index.html>홈화면으로</a>
<?
	echo("<hr>");
	show_source(__FILE__);
?>

테이블의 검색 결과가 cno, sno대신 cname, sname이 검색되게 개선

 

* DB 연동 사이트 구축

1. 메인 페이지(index.html) 작성

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title>index.html</title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<table border="0" align="center" width="300">
	<tr>
		<td>
			<p align="center"><a href="st_vi.php">student 검색</a></b></p>
			<p align="center"><a href="pr_vi.php">professor 검색</a></b></p>
			<p align="center"><a href="co_vi.php">course 검색</a></b></p>
			<p align="center"><a href="sc_vi.php">score 검색</a></b></p>
		</td>
	<tr>
</table>
</body>
</html>

2. 입력이 다된후 메인 홈페이지로 돌아가도록 변경

echo(" <meta http-equiv='Refresh' content = '0; URL=index.html'>");

st_in.php, pr_in.php, sc_in.php, co_in.php의 url을 index.html로 변경해준다.

'Security > language' 카테고리의 다른 글

php-세션  (0) 2020.01.03
php-php와 오라클 연동  (0) 2019.12.31
php-DB 접속  (0) 2019.12.30
php-함수  (0) 2019.12.30
php-배열(2차원 배열)  (0) 2019.12.26