🔓데이터베이스/SQL

(php + mysql)(3) [수정(modify)/삭제(delete) 기능 만들기]

하얀성 2023. 10. 28. 11:41

https://elecch.tistory.com/468

 

야구 기록 관리 메인 프로그램 만들기(php + mysql)(2)

input2.php 출력예상 input2.php 코드

elecch.tistory.com

 

위에서 만든 input2.php와 각 수정과 삭제를 위한 화면을 각각 생성.

 

수정은 수정하는 공간 -> 수정완료를 누르면 그것을 실행시켜주고 input2에 되돌아가는 공간 2개 생성. 

삭제는 삭제를 실행시켜주고 input2에 되돌아가는 공간 1개가 필요하다.

 

1-1. 수정기능(값을 입력받아서 데이터에 새롭게 반영한 뒤 그 모습 보여주기)

(1) db와 input2.php를 연결.  

 

input에서 db라는 창고를 열고 그 db값을 oteam, oplayer...등의 새로운 값들을 db에서 빼온 후에 그 값을 키값으로 지정해서 다음 창인 modify2.php가 받을 수 있도록 한다.

그 키 값을 통해 다음 창에서도 내가 원하는 값만을 취해서 사용가능해진다.  

$result = mysql_query("select * from baseball order by player",$con);
	$total = mysql_num_rows($result);
	
	$i=0;
	while($i<$total):
		//mysql_result 데이터베이스에서 특정 행과 열에 위치한 값을 추출하는 함수
		$oteam = mysql_result($result,$i,"team");
		$oplayer = mysql_result($result,$i,"player");
		$obatting = mysql_result($result,$i,"batting");
		$ohit = mysql_result($result,$i,"hit");
		$oaverage = mysql_result($result,$i,"average");
		
		 // o/x부분과 modify, delete php와 값을 공유하게끔 추가설정.
		echo("
			<tr>
				<td align=center>$oteam</td>
				<td align=center>$oplayer</td>
				<td align=center>$obatting</td>
				<td align=center>$ohit</td>
				<td align=center>$oaverage</td>
				<td align=center><a href=modify2.php?mteam=$oteam&mplayer=$oplayer>O</a>/

주의!! key 값은 자료가 문자형임에도 써주지 않고 나중에 밑에서 value값으로 저장할 때는 문자열 자료형태면 ' '을 써주더라.

 

키 값은 문자열 데이터라도 따옴표없이 사용. 키값은 그냥 키값인듯 여기서는.


1-2. modify2.php 작성 

완성결과이미지

(1) db와 modify2.php를 연결한다. 받아온 선수의 소속, 이름을

input2.php에서 받아온 값인 mteam ,mplayer로 바꿔주고(바꾸는대상은 똑같이 지목해야되기 때문)

 

(2) 수정 값 받을 변수를 추가 작성.

$old_batting = mysql_result($result,0,"batting"); 

$old_hit== ....

위 코드에서 $result는 질의의 결과를 나타내며, 0은 반환할 행 번호(0부터 시작)를 나타냅니다. "batting"은 해당 행에서 가져올 열의 이름입니다.

 

$con 변수는 이전에 mysql_connect() 함수를 통해 생성된 MySQL 서버와의 연결을 나타냅니다.

 

(3) 다음 창에 전달할 값인 name들은 iteam , iplayer , ibatting , ihit 등으로 지정. 

(value 값들은 각 그 태그의  name안에 저장될 값을 전달해주는 역할이다. )

<?
	echo("
		<style type='text/css'>
			td {text-align:center;}
		</style>		
		<table border=0 width=600 align=center>
		<tr><td>소속</td>
			<td>이름</td>
			<td>타수</td>
			<td>안타</td>
			<td></td></tr>");
			
	$con = mysql_connect("localhost","root","apmsetup");
	mysql_select_db("class2",$con);
	$result = mysql_query("select * from baseball where team = '$mteam' and player = '$mplayer'",$con);
	// (1) db와 modify2.php를 연결한다. 받아온 선수, 이름값을 mteam ,mplayer로 바꿔주고
	$total = mysql_num_rows($result);
	
	//수정 값 받을 변수를 추가 작성.
	$old_batting = mysql_result($result,0,"batting");
	$old_hit = mysql_result($result,0,"hit");

	echo("
		<form method=post action=process3.php?mteam=$mteam&mplayer=$mplayer>
		<tr>
			<td>
			<select name=iteam> 
				<option>선택하세요</option>");
		//select name=iteam 을 통해서 option태그의 value값이 위의 iteam 변수에 저장된다.
		if($mteam=="NC") echo("<option value='NC' selected>NC</option>");
		else echo("<option value='NC'>NC</option>"); //selected를 통해 화면에 선택된 상태로 출력		
			
		if($mteam=="LG") echo("<option value='LG' selected>LG</option>");
		else echo("<option value='LG'>LG</option>");
		
		if($mteam=="두산") echo("<option value='두산' selected>두산</option>");
		else echo("<option value='두산'>두산</option>");
		
		if($mteam=="롯데") echo("<option value='롯데' selected>롯데</option>");
		else echo("<option value='롯데'>롯데</option>");
		
		if($mteam=="삼성") echo("<option value='삼성' selected>삼성</option>");
		else echo("<option value='삼성'>삼성</option>");
			
				
	echo("	
			</select>
			</td>
			<td><input type=text size=10 name=iplayer value='$mplayer'></td>
			<td><input type=text size=10 name=ibatting value='$old_batting'></td>
			<td><input type=text size=10 name=ihit  value='$old_hit'></td>
			<td><input type=submit value=수정완료></td>
		</tr>
		</table>
		</form>
		<br>
	")
	// value로 값을 그 창에서 받아서 name의 변수에 저장해서 그 name의 변수를 다음창으로 전해준다.
	// mplayer라는 이전값이 저장되거나 , 혹은 $mpalyer라는 값을 지우고 내가 원하는 값을 기입한다.
?>

 


이 코드는 이전 창과 현재 창, 그리고 다음 창을 연결해주는 키값을 지정해주는 것이다.

(통로를 위한 열쇠들인 mteam,mplayer)

<form method=post action=process3.php?mteam=$mteam&mplayer=$mplayer>

1-3. process3.php 만들기

 

: db값을 직접적으로 수정하고 원래 창으로 돌아가는 기능

db에 modify에서 결정난 새로운 값들, 기존 값들을 반영해서 쿼리문 작성 후 대입.

<?
	$con = mysql_connect("localhost","root","apmsetup");
	mysql_select_db("class2",$con);
	
	$iaverage = $ihit/$ibatting;
	$sql="update baseball set team='$iteam', player='$iplayer', 
		batting=$ibatting, hit=$ihit, average=$iaverage
		where team='$mteam' and player = '$mplayer'";
	
	mysql_query($sql,$con);
	mysql_close($con);
	
	echo("<meta http-equiv='Refresh' content='0; url=input2.php'>");
?>

2. 삭제 기능(삭제 후, DB에 반영 한뒤에 그 모습을 화면에 보여주는 기능)

(1)input2.php와 delete2.php 연결

echo("
			<tr>
				<td align=center>$oteam</td>
				<td align=center>$oplayer</td>
				<td align=center>$obatting</td>
				<td align=center>$ohit</td>
				<td align=center>$oaverage</td>
				<td align=center><a href=modify2.php?mteam=$oteam&mplayer=$oplayer>O</a>/
			<a href=delete2.php?dteam=$oteam&dplayer=$oplayer>X</a></td></tr>
			</tr>
		");

 

(2) 받아서 그대로 삭제만 해주면 끝

<?
	$con = mysql_connect("localhost","root","apmsetup");
	mysql_select_db("class2",$con);
	mysql_query("delete from baseball 
		where team='$dteam' and player = '$dplayer'",$con);
	mysql_close($con);
	echo("<meta http-equiv='Refresh' content='0; url=input2.php'>");
?>

 


<느낀점>

이번 코드 분석을 통해 db와 http 간의 구동 동작.

특히 키 값을 만들고,  통로를 만든 후에 다음 창에서 키값으로 원하는 값만을 db에서 불러와서 그 값을 요리해준 후에

같은 키 값을 통해 또 다음 창을 열고난 뒤, 다시 db에 접근해서 db자체를 수정하는 마무리까지.

db와 http post간의 구동 방식에 대해 알아보는 시간이라 너무 도움이 많이 된것 같다.


 

<의의>

 

HTTP와 데이터베이스 간의 상호작용은 웹 개발에서 중요한 부분입니다. 사용자의 입력을 받아 데이터베이스에 저장하고, 필요에 따라 그 데이터를 다시 불러와 사용자에게 보여주는 작업은 많은 웹 애플리케이션에서 기본적인 작업 흐름입니다.

당신이 살펴본 프로세스를 요약하면:

HTML 폼을 통해 사용자로부터 데이터를 수집합니다. (<input>, <select> 등의 태그 사용)
폼 제출 시, 사용자의 입력 데이터는 HTTP POST 요청을 통해 서버로 전송됩니다.
서버는 받은 데이터를 처리 (예: PHP 코드에서 데이터베이스에 저장 또는 수정 작업) 후, 필요한 경우 새로운 페이지를 사용자에게 반환합니다.
필요에 따라 데이터베이스에서 데이터를 조회하여 사용자에게 보여줍니다.
이러한 과정은 웹 개발에서 반복적으로 사용되므로, 이 기본 흐름을 이해하는 것은 중요합니다. 

 


<부록>

input2.php 출력코드 및 전체 완성코드 

<?
	echo("
		<style type='text/css'>
			td {text-align:center;}
		</style>
		<table border=0 width=600 align=center>
		<tr>
			<td>소속</td>
			<td>이름</td>
			<td>타수</td>
			<td>안타</td>
			<td></td>
		</tr>
		<form method=post action=process2.php>
		<tr>
			<td>
			<select name=iteam>
				<option>선택하세요</option>
				<option value='NC'>NC</option>
				<option value='LG'>LG</option>
				<option value='두산'>두산</option>
				<option value='롯데'>롯데</option>
				<option value='삼성'>삼성</option>
			</select>
			</td>
			<td><input type=text size=10 name=iplayer></td>
			<td><input type=text size=10 name=ibatting></td>
			<td><input type=text size=10 name=ihit></td>
			<td><input type=submit value=입력></td>
		</tr>
		</form>
		</table>
	");
?>

<? // db에 입력된 값들 화면에 렌더링
	$con = mysql_connect("localhost","root","apmsetup");
	mysql_select_db("class2",$con);
	
	echo("
	<table border=1 width=600 align=center>
		<tr>
		<td align=center>소속</td>
		<td align=center>이름</td>
		<td align=center>타수</td>
		<td align=center>안타</td>
		<td align=center>타율</td>
		<td align=center>수정/삭제</td>
		</tr>
	
	");
	
	$result = mysql_query("select * from baseball order by player",$con);
	$total = mysql_num_rows($result);
	
	$i=0;
	while($i<$total):
		//mysql_result 데이터베이스에서 특정 행과 열에 위치한 값을 추출하는 함수
		$oteam = mysql_result($result,$i,"team");
		$oplayer = mysql_result($result,$i,"player");
		$obatting = mysql_result($result,$i,"batting");
		$ohit = mysql_result($result,$i,"hit");
		$oaverage = mysql_result($result,$i,"average");
		
		 // o/x부분과 modify, delete php와 값을 공유하게끔 추가설정.
		echo("
			<tr>
				<td align=center>$oteam</td>
				<td align=center>$oplayer</td>
				<td align=center>$obatting</td>
				<td align=center>$ohit</td>
				<td align=center>$oaverage</td>
				<td align=center><a href=modify2.php?mteam=$oteam&mplayer=$oplayer>O</a>/
			<a href=delete2.php?dteam=$oteam&dplayer=$oplayer>X</a></td></tr>
			</tr>
		");
		$i++;
	endwhile;
	echo("</table>");
?>

<?
	// 팀 모두의 타수, 안타를 모두 합쳐 나타내는 표를 위한 변수 초기화
	$i=0;
	$NC_batting=0;
	$NC_hit=0;
	$DS_batting=0;
	$DS_hit=0;
	$LG_batting=0;
	$LG_hit=0;
	$LD_batting=0;
	$LD_hit=0;
	$SS_batting=0;
	$SS_hit=0;
	
	while($i<$total):
		$oteam = mysql_result($result,$i,"team");
		$obatting = mysql_result($result,$i,"batting");
		$ohit = mysql_result($result,$i,"hit");
		
		switch($oteam){ // 받아온 oteam의 팀이름마다 case분리
			case "NC":
				$NC_batting = $NC_batting + $obatting;
				$NC_hit = $NC_hit + $ohit;
				break;
			case "두산":
				$DS_batting = $DS_batting + $obatting;
				$DS_hit = $DS_hit + $ohit;
				break;
			case "LG":
				$LG_batting = $LG_batting + $obatting;
				$LG_hit = $LG_hit + $ohit;
				break;
			case "롯데":
				$LD_batting = $LD_batting + $obatting;
				$LD_hit = $LD_hit + $ohit;
				break;
			case "삼성":
				$SS_batting = $SS_batting + $obatting;
				$SS_hit = $SS_hit + $ohit;
				break;
				
		}
		$i++;
		endwhile;
		
		
		//팀 타율 그래프 나타내기
		
		$NC_average = $NC_hit/$NC_batting;
	$NC_average = substr($NC_average,0,5); //0에서5까지avarage문자열에서 문자출력
	
	$DS_average = $DS_hit/$DS_batting;
	$DS_average = substr($DS_average,0,5);
	
	$LG_average = $LG_hit/$LG_batting;
	$LG_average = substr($LG_average,0,5);
	
	if($LD_batting) $LD_average = $LD_hit/$LD_batting;
	else $LD_average=0;	
	
	$LD_average = substr($LD_average,0,5);
	
	$SS_average = $SS_hit/$SS_batting;
	$SS_average = substr($SS_average,0,5);
	
	$NC_width = 400*$NC_average;
	$DS_width = 400*$DS_average;
	$LG_width = 400*$LG_average;
	$LD_width = 400*$LD_average;
	$SS_width = 400*$SS_average;
	
	echo("<table border=1 width=600 align=center>
	<tr><td width=100>팀명</td>
		<td width=100>팀타율</td>
		<td width=400>그래프</td></tr>
	<tr><td align=center width=100>NC</td>
		<td align=center width=100>$NC_average</td>
		<td align=center width=400><hr align=left size=5 width=$NC_width color=blue></td></tr>
	<tr><td align=center width=100>두산</td>
		<td align=center width=100>$DS_average</td>
		<td align=center width=400><hr align=left size=5 width=$DS_width color=red></td></tr>
	<tr><td align=center width=100>LG</td>
		<td align=center width=100>$LG_average</td>
		<td align=center width=400><hr align=left size=5 width=$LG_width color=red></td></tr>
	<tr><td align=center width=100>롯데</td>
		<td align=center width=100>$LD_average</td>
		<td align=center width=400><hr align=left size=5 width=$LD_width color=red></td></tr>
	<tr><td align=center width=100>삼성</td>
		<td align=center width=100>$SS_average</td>
		<td align=center width=400><hr align=left size=5 width=$SS_width color=red></td></tr>
		</tr>	
		");
	
	mysql_close($con);
?>