본문 바로가기

5강. MySQL 데이터베이스에 저장(Insert) 된 레코드를 수정(Update)하기

728x90
반응형

4강에서 레코드를 출력 할 때 이름 부분을 보면 a태그로 링크가 있다.

<a href="modify.php?record=<?=$rd[record]?>"><?=$rd[name]?></a>

각 레코드 마다 이름을 modify.php이라는 파일과 링크 했는데 매개 변수가 하나 있다. 각 레코드의 레코드 번호에 해당하는 $rd[record]를 변수 record로 전송하게 된다. 이렇게 파일이나 URL 뒤에 ?로 구분 되서 전송 되는 매개 변수는 GET 방식이다. 서버에서 $_GET 배열로 받을 수 있다.

파일 확장자를 보면 html인 것과 php인 것이 있다. html 파일은 주로 HTML 태그로 작성 된 문서를 저장하는데 PHP 코드가 포함 된 문서는 주로 php를 사용한다. 아파치 설정에 따라 차이는 있지만 html이든 php로 하든 PHP 스크립트가 포함 돼 있으면 프로그램을 실행하는데 크게 문제는 없다. 다만 php 코드가 포함 된 문서는 보안적인 측면과 관례상 .php를 주로 사용한다.

이 강의에서는 modify.php 파일을 작성하는데 record에 전송 된 레코드 번호를 이용해 해당 레코드를 불러오고 입력 폼에서 수정 될 정보를 입력 받는다.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>명함관리</title>

<style>
body { text-align:center; }
form { margin:0; padding:0; }

.subject { text-align:center; font-size:20px; padding:30px; }

.namecard_box { width:700px; padding:10px; margin:auto; text-align:left; border:1px solid #AEAEAE; } /* 테두리 */
.namecard_box > div { clear:both; }
.namecard_box div div.item { float:left; width:20%; margin:0 auto; } /* 항목 이름*/
.namecard_box div div.val { float:left; width:80%; margin:0 auto; } /* 입력 값 */
.namecard_box .btnbox { clear:both; padding:30px; text-align:center; } /* 버튼 */
</style>
</head>
<body>
<?
//-- DB 연결
$mysql_host = '127.0.0.1'; //-- 또는 localhost
$mysql_user = 'temp';
$mysql_password = 'temp1234';
$mysql_db = 'temp';



$conn = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("데이터베이스 연결에 실패하였습니다!"); 
mysql_select_db($mysql_db, $conn); // DB 선택



//-- 수정 할 레코드를 읽어 온다.
$sql = "select * from namecard where record='" . $_GET[record] . "'";
$rs = mysql_query($sql);
$rd = mysql_fetch_array($rs);



//-- 남녀 구분
if($rd[sex] == "1") $chks1 = "checked";
else    $chks2 = "checked";
?>
 <div class="namecard_box">
 <div class="subject">수정하기</div>
 <form name="form_name" method="post" onsubmit="return senddata(this);">
 <input type="hidden" name="record" value="<?=$rd[record]?>">
 <div>
  <div class="item">이름</div>
  <div class="val"><input type="text" name="name" size="20" value="<?=$rd[name]?>"></div>
 </div>
 <div>
  <div class="item">성별</div>
  <div class="val"><input type="radio" name="sex" value="1" <?=$chks1?>>남 <input type="radio" name="sex" value="2" <?=$chks2?>>여</div>
 </div>
 <div>
  <div class="item">생년월일</div>
  <div class="val"><input type="text" name="birth" size="10" maxlength="8" value="<?=$rd[birth]?>"> 예)19991019</div>
 </div>
 <div>
  <div class="item">소개</div>
  <div class="val"><textarea name="intro" rows="5" cols="50"><?=$rd[intro]?></textarea></div>
 </div>
 <div class="btnbox"><input type="submit" value="저장"></div>
 </form>
 </div> <!-- endof namecard_box -->



<script>
function senddata(f){
 if(f.name.value == "") {
  alert("이름을 입력하지 않았습니다.");
  return false;
 }
 if(!f.sex[0].checked && !f.sex[1].checked) {
  alert("성별을 입력하지 않았습니다.");
  return false;
 }
 if(f.birth.value == "") {
  alert("생년월일을 입력하지 않았습니다.");
  return false;
 }
 if(f.intro.value == "") {
  alert("소개를 입력하지 않았습니다.");
  return false;
 }

 f.action = "update.php";
 f.submit();
}
</script>
</body>
</html>

modify.php 파이을 보면 test.html과 비슷하다. 레코드를 읽어오는 select 문이 있고 조건문을 이용해 성별을 구분해 radio 버튼에 checked 값을 결정하도록 했다.

PHP에서 <?=$변수?> 이런 형식의 문장을 종종 보게 되는데 PHP 변수를 출력하라는 명령이다. <? echo $변수; ?>와 같은 의미를 갖는다.

<input type="hidden" name="record" value="<?=$rd[record]?>">
이 문자를 보면 생소한 속성이 있다. hidden은 화면에 보이지는 않지만 FORM에서 전달 할 수 있는 정보를 담을 수 있다. 고정 된 값을 서버로 전송해야 할 때 유용하다. $rd[record]의 값을 화면에 보여주지는 않지만 record라는 이름으로 서버에 전송하게 된다.

f.action = "update.php";
f.submit();

자바스크립트 부분 하단을 보면 주의 깊게 볼 것이 있다. FORM의 action이 update.php로 되어있다. save.php는 레코드를 추가하기 위한 프로그램이였고 update.php는 레코드를 수정 하기 위해 작성할 프로그램 파일이다.

 

modify.php의 화면이다. test.html과 비슷하지만 기존에 저장 된 값이 기본 값으로 들어가 있다. 여기서 수정하고 싶은 항목을 수정하고 저장을 버튼을 클릭하면 submit이 실행 된다.

<?
extract($_POST);
//-- DB 연결
$mysql_host = '127.0.0.1'; //-- 또는 localhost
$mysql_user = 'temp';
$mysql_password = 'temp1234';
$mysql_db = 'temp';



$conn = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("데이터베이스 연결에 실패하였습니다!"); 
mysql_select_db($mysql_db, $conn); // DB 선택


//-- 수정하기
$sql = "update namecard set name='$name', sex='$sex', birth='$birth', intro='$intro' where record='$record'";
$rs = mysql_query($sql);

if($rs) echo "<script>alert('입력하신 정보를 수정 하였습니다.'); document.location.href='list.php'; </script>";
?>

update.php는 이전의 프로그램 파일보다 간단하다. 실무에서는 보안이나 유효성 체크 등 여러가지 선 처리 과정이 필요하지만 연습하는 과정에서는 sql 구문을 익히는 정도로 한다.

$sql = "update namecard set name='$name', sex='$sex', birth='$birth', intro='$intro' where record='$record'";

update 문에서 주의해야 할 것은 where 절이다. 조건 문이 없다면 모든 레코드에 같은 데이터가 업데이트 되기 때문에 반드시 조건문을 잘 따져봐야 한다. 이 문장에서는 record 필드가 hidden 속성으로 넘어 온 $record의 변수 값과 같은 레코드에 정보를 수정하겠다는 뜻이다.

delete from cardname where record='$record'

만약 이런 SQL 문을 실행 했다면 필드 record가 hidden 속성으로 넘어 온 $record 값과 일치하는 레코드를 삭제하겠다는 의미가 된다.

if($rs) echo "<script>alert('입력하신 정보를 수정 하였습니다.'); document.location.href='list.php'; </script>";

마지막에 이 문장은 레코드를 수정하고 결과가 참이면 $rs 값이 참(true)를 넘겨 받는다. 이 결과를 비교하여 정상적으로 수행이 됐다면 list.php로 이동하겠다는 문장이다. 이렇게 PHP 명령으로 태그나 자바스크립트를 출력하게 되면 브라우저에서는 이를 똑같이 해석해서 화면에 보여주거나 실행하게 된다.

<script>
    alert('입력하신 정보를 수정 하였습니다.');
    document.location.href='list.php';
</script>

이 문장에서는 결과적으로 이런 자바스크립트를 브라우저로 전송하게 된 것인데 브라우저는 이걸 자바스크립트로 이해하고 문장을 실행 한다. document.location.href='list.php';는 현재 페이지에서 list.php로 이동하겠다는 명령이다.

728x90
반응형