🔓데이터베이스/SQL

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

하얀성 2023. 10. 25. 11:39

mysql 데이터 구조.

 

database: class2 / 

클래스명: baseball

 

team    | varchar(10)  | YES  |     | NULL    |       |
| player  | varchar(20)  | YES  |     | NULL    |       |
| batting | int(3)       | YES  |     | NULL    |       |
| hit     | int(3)       | YES  |     | NULL    |       |
| average | decimal(5,3) | YES  |     | NULL    |


1. 테이블 생성 및 자료 등록하는 칸 만들기

 

코드 이름과(iteam) 파일 명 등을 개선한 뒤 작성함.

예상결과

 


input_copy

<?
	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=process_copy.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>
	");
?>

process_copy

- ' ' 태그를 붙이지 말아야할 칼럼 값도 있었는데 붙여서 에러가 났음.

<?
	$con = mysql_connect("localhost","root","apmsetup");
	mysql_select_db("class2",$con);

	
	$iaverage = $ihit / $ibatting;
	
	// sql에 맞게끔 value값 작성. 그리고 괄호를 잘 닫도록하자.
	mysql_query("insert into baseball values('$iteam', '$iplayer', $ibatting, $ihit, $iaverage)",$con);
	mysql_close($con);
?>

 

화면에서 선택을 통해  mysql에 등록까지 완료한 모습.(database는 class2 )


2.동일팀, 동일 이름의 선수에 input 누적하기

 

웹에서는 HTTP 프로토콜을 사용하며, HTTP는 상태를 유지하지 않는(stateless) 프로토콜입니다. 즉, 각 요청(request)은 독립적입니다. 따라서, 여러분이 웹 페이지를 여러 번 요청하더라도 각각의 요청은 서로 독립적으로 처리됩니다.

 

변수 $iteam, $iplayer을 너가 post 두번해도 각각 독립적값이어서 이미 이전의 post요청된 정보는 공중분해되버린 상태.

이 공중분해되기 전에 데이터베이스에 계속 저장하는것.

 

아래의 구문은 $item이라는 방 input한 값이 들어있는 독립적인 변수명일 뿐임.

같은 이름의 이전의 변수는 이전 post가 종료될때 같이 죽어서 사라졌음.

$result = mysql_query(select * from baseball 
		where team='$item' player='$iplayer',$con); 
        //지금 input한 값과 같은 값이 db에 있다면 그 데이터만 불러오기

 

예상결과: 황민태의 batting, hit 값이 누적되어 변경됨을 확인하기.

정상결과
잘못된 결과


input_copy.php 코드는 동일.

process_copy.php

 

- $기호 변수앞에 안적고 빼먹은적 많음. 자잘한 오타주의

-mysql_result() 안에는 input 변수명이 아니라, 컬럼값을 기입

<?
	$con = mysql_connect("localhost","root","apmsetup");
	mysql_select_db("class2",$con);

	
	$result = mysql_query("select * from baseball where team='$iteam' and player='$iplayer'",$con);
	$total = mysql_num_rows($result);
	
	if($total>0){ // 저장해놓은 데이터가 있다면 기존값 + input된 값
		$obatting = mysql_result($result,0,"batting"); //이전에 같은 값 불러와서
		$ohit = mysql_result($result,0,"hit"); // 동일
		$nbatting = $obatting + $ibatting; // 새로운 변수에 저장
		$nhit = $ohit + $ihit; // 동일
		$naverage = $nhit / $nbatting; // 이전,현재값 반영해서 타율계산
		//변경값 누적반영
		mysql_query("update baseball set batting=$nbatting, hit=$nhit, average=$naverage where team='$iteam' and player='$iplayer'",$con);
	
	}else{ // 저장해놓은 기존 데이터가 없다면 그대로 input시킨 값만 추가
		$iaverage = $ihit / $ibatting;
		mysql_query("insert into baseball values('$iteam', '$iplayer', $ibatting, $ihit, $iaverage)",$con);
	}
	
	
	mysql_close($con);
	//명령실행 후, 원하는 화면으로 이동하기
	echo("<meta http-equiv='Refresh' content='0; url=input_copy.php'>");
?>

3. db 데이터 화면에 출력

 

!!!!! input_copy.php에서 이미 다른 파일에서 검증된 코드로 복붙해서 코드를 실행시켜도 한글이 깨짐.

'_' 기호를 쓴게 문제인것 같아서 파일명 변경.

 

수정

input_copy => input2 .php

<form method=post action=process2.php>

 

수정

process_copy => process2 .php

echo("<meta http-equiv='Refresh' content='0; url=input2.php'>");


예상결과 

input2.php (process2는 동일)

<?
	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>
	");
?>

<?
	$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>
	</table>
	");
?>