본문 바로가기
낙서장/php홈페이지 만들기

수정 - modify.php

by "뭉치" 2021. 8. 13.
728x90

 

  1. <?
  2. //DB에 연결하는 부분입니다. 항상 반복되는 부분이니 꼭 암기!!!
  3. mysql_connect("localhost", "phpbbs", "phpbbs") or die (mysql_error());
  4. mysql_select_db("itmembers");
  5.  
  6. //변수 설정합니다.
  7. $tablename="bbs"; //테이블 이름
  8.  $number = $_GET["number"]; 
  9. //테이블에서 글을 가져옵니다.
  10. $query = "select * from $tablename where number='$number'"; // 글 번호를 가지고 조회를 합니다.
  11. $result = mysql_query($query) or die (mysql_error());
  12. $array = mysql_fetch_array($result);
  13.  
  14. //백슬래쉬 제거, 특수문자 변환(HTML용), 개행(<br>)처리 등
  15. $array[name] = stripslashes($array[name]);
  16. $array[subject] = stripslashes($array[subject]);
  17. $array[memo] = stripslashes($array[memo]);
  18.  
  19. //$array[subject] = htmlspecialchars($array[subject]);
  20. //$array[memo] = htmlspecialchars($array[memo]);
  21.  
  22. //$array[memo] = nl2br($array[memo]);
  23.  
  24. ?>
  25.  
  26. <html>
  27. <head>
  28. <title>PHP 게시판 프로젝트 - 수정</title>
  29.  
  30. <STYLE TYPE="text/css">
  31. BODY,TD,SELECT,input,DIV,form,TEXTAREA,center,option,pre,blockquote {font-family:굴림;font-size:9pt;color:#555555;}
  32. A:link    {color:black;text-decoration:none;}
  33. A:visited {color:black;text-decoration:none;}
  34. A:active  {color:black;text-decoration:none;}
  35. A:hover  {color:gray;text-decoration:none;}
  36. </STYLE>
  37.  
  38.  
  39. <script language="javascript">
  40.  
  41. function check_submit() {
  42.         
  43.         if (document.myForm.name.value == "") {
  44.                 alert('이름을 입력하세요');
  45.                 document.myForm.name.focus();
  46.                 return;
  47.                 
  48.         } else if (document.myForm.password.value == "") {
  49.                 alert('비밀번호를 입력해야 글을 수정하거나 삭제할 수 있습니다.');
  50.                 document.myForm.password.focus();
  51.                 return;
  52.                 
  53.         } else if (document.myForm.subject.value == "") {
  54.                 alert('제목을 입력하세요');
  55.                 document.myForm.subject.focus();
  56.                 return;
  57.                 
  58.         } else if (document.myForm.memo.value == "") {
  59.                 alert('내용을 입력하세요');
  60.                 document.myForm.memo.focus();
  61.                 return;
  62.                 
  63.         } else {
  64.                 document.myForm.action = "modify_ok.php";
  65.                 document.myForm.submit();
  66.         }
  67.         
  68. }
  69.  
  70. </script>
  71.  
  72. </head>
  73.  
  74. <body bgcolor=white background=./images/body_bg.gif>
  75.  
  76. <img src=./images/maintitle.gif>
  77.  
  78. <br>
  79.  
  80. <form name='myForm' method='post' >
  81.  
  82. <input type=hidden name=page value='<? echo $page; ?>'>
  83. <input type=hidden name=number value='<? echo $number; ?>'>
  84.  
  85. <table border=0 cellspacing=1 cellpadding=0 width=670>
  86.         <tr>
  87.           <td align=center>
  88.           <font color=green><b>글 수정 화면입니다.</b></font>
  89.           </td>
  90.         </tr>
  91. </table>
  92.  
  93. <table border=0 bgcolor=#CCCCF><tr><td>
  94.  
  95. <table border=0 width=670 cellspacing=0 cellpadding=0 bgcolor=#F0F0F0>
  96.  
  97.         <col width=100></col><col width=></col>
  98.  
  99.         <tr>
  100.         <td colspan=2>
  101.              <table border=0 cellspacing=0 cellpadding=0 width=100%>
  102.                  <tr>
  103.                   <td width=100 align=right><b>이름&nbsp;</b></td>
  104.                 <td><input type=text name=name size=20  maxlength=20 value= '<? echo $array[name]; ?>'></td>                    
  105.                   <td width=100 align=right><b>비밀번호&nbsp;</b></td>
  106.                 <td><input type=password name=password  size=20  maxlength=20 value=''></td>
  107.                  </tr>
  108.                         </table>
  109.           </td>
  110.         </tr>
  111.  
  112.         <tr><td bgcolor=white height=1 colspan=2></td></tr>
  113.         
  114.         <tr>
  115.           <td align=right><b>전자우편&nbsp;</b></td>
  116.           <td> <input type=text name=email size=40  maxlength=200 value='<? echo $array[email]; ?>'> </td>
  117.         </tr>
  118.         
  119.         <tr><td bgcolor=white height=1 colspan=2></td></tr>
  120.  
  121.         <tr>
  122.           <td align=right><b>홈페이지&nbsp;</b></td>
  123.           <td> <input type=text name=homepage size=40  maxlength=200 value='<? echo $array[homepage]; ?>'> </td>
  124.         </tr>
  125.  
  126.         <tr><td bgcolor=white height=1 colspan=2></td></tr>
  127.  
  128.         <tr>
  129.           <td align=right><b>제목&nbsp;</b></td>
  130.           <td> <input type=text name=subject size=87  maxlength=200 value='<? echo $array[subject]; ?>'> </td>
  131.         </tr>
  132.  
  133.         <tr><td bgcolor=white height=1 colspan=2></td></tr>
  134.  
  135.         <tr>
  136.           <td align=right><b>내용&nbsp;</b></td>
  137.           <td valign=top>
  138.           <textarea name=memo cols=85 rows=20> <? echo $array[memo]; ?> </textarea>
  139.           </td>
  140.         </tr>
  141.  
  142. </table>
  143.  
  144. <br>
  145.  
  146. <table border=0 width=670>
  147. <tr><td>
  148. <center>
  149. <a href="javascript:check_submit();"><img src='./images/write.gif' border=0></a> &nbsp;&nbsp;
  150. <a href="list.php?page=<? echo $page ;  ?>"><img src=./images/list.gif border=0></a>
  151. </center>
  152. </td></tr>
  153. </table>
  154. </td></tr></table>
  155.  
  156. </form>
  157.  
  158. </body>
  159. </html>

 

글 입력 폼인 write.php와 크게 다르지 않아 코드를 이해하기 그리 어렵지 않을 것입니다.

  1. document.myForm.action = "modify_ok.php"; 

    modify.php는 글 수정 폼입니다. 여기서 수정한 내용이 실제 DB에 반영되기 위해서 modify_ok.php를 실행하기 위한 코드입니다. 
    이미 앞서 글 입력 코드에서 다룬 바 있어서 부연 설명하지는 않겠습니다.

  2. <input type=hidden name=page value='<? echo $page; ?>'> 
  3. <input type=hidden name=number value='<? echo $number; ?>'> 

    modify.php에서 수정한 내용을 반영하기 위해 modify_ok.php를 실행한다고 했죠? modify_ok.php로 수정된 내용을 넘길 때 현재의 목록 페이지와 현재 글 번호를 함께 넘기기 위해 위와 같이 숨김 속성의 입력 폼을 만드는 것입니다.
  4. <form name='myForm' method='post' > 에서 post 속성으로 값을 넘기도록 설정한 거 기억나죠? post 형식으로 넘길 때 현재 페이지와 글 번호를 함께 넘기려고 하는데 따로 입력받는 곳이 없으니까 이렇게 숨김 속성으로 input 폼을 만들고 기본 값으로 현재 페이지와 글 번호를 저장하는 겁니다.

  5. <input type=text name=name size=20  maxlength=20 value= '<? echo $array[name]; ?>'>
    modify.php가 write.php와 결정적으로 다른 곳이 바로 이런 부분들입니다. 기본값을 보여주는 value 속성이 있습니다. 
    이미 DB에 저장된 내용 중 해당 항목을 미리 보여주고 수정할 부분만 수정하도록 하고 있습니다. 

    그 외 부분은 write.php와 거의 동일합니다.

  6. <textarea name=memo cols=85 rows=20> <? echo $array[memo]; ?> </textarea> 
    textarea는 value 속성을 사용하지 않습니다. <textarea>와 </textarea> 사이에 기본 값을 표시하면 됩니다.

  7. <a href="list.php?page=<? echo $page ;  ?>"><img src=./images/list.gif border=0></a>
    목록 보기 버튼을 눌렀을 때 현재 페이지 번호 값을 가지고 list.php를 실행하기 위한 코드입니다.

 

 

하다보니 그냥 복사 붙여넣기를 하게 되는군요.. 마저 다 하고 비공개를 하던지 해야 겠습니다.. 버겁네요.. ㅜ

 

 

===========================================================================================================

modify_ok.php

===========================================================================================================

 

  1. <?
  2. //db 연결 부분입니다.
  3. mysql_connect("localhost", "phpbbs", "phpbbs") or die (mysql_error()); //host,id,passwd
  4. mysql_select_db("itmembers"); //db이름
  5.  
  6. //수정폼(modify.php)에서 전송된 내용을 변수에 담습니다.
  7. $name = $_POST["name"];
  8. $password = $_POST["password"];
  9. $email = $_POST["email"];
  10. $homepage = $_POST["homepage"];
  11. $subject = $_POST["subject"];
  12. $memo = $_POST["memo"];
  13. $number = $_POST["number"];
  14.  
  15. $name = addslashes($name);
  16. $password = addslashes($password);
  17. $email = addslashes($email);
  18. $homepage = addslashes($homepage);
  19. $subject = addslashes($subject);
  20. $memo = addslashes($memo);
  21.  
  22. //디폴트 값이 필요한 변수에는 디폴트 값을 넣습니다.
  23. $tablename="bbs"; //테이블 이름
  24. $writetime = time();
  25. //$ip = getenv("REMOTE_ADDR");
  26.  
  27. //비밀번호가 맞는지 확인합니다.
  28. $sql = "select number from $tablename where number=$number and password=$password";
  29. $result = mysql_query($sql) or die (mysql_error());
  30.  
  31. if(mysql_num_rows($result)) {  //반환된 열이 있으면...
  32.         //수정한 내용을 UPDATE합니다.
  33.         $sql = "update $tablename set
  34.                         name='$name',email='$email',homepage='$homepage',
  35.                         subject='$subject',memo='$memo' where number=$number";
  36.         mysql_query($sql) or die (mysql_error());
  37.         $msg = "수정을 하였습니다.";
  38.  
  39.         echo " <html><head>
  40.                 <script name=javascript>
  41.  
  42.                 if('$msg' != '') {
  43.                         self.window.alert('$msg');
  44.                 }
  45.  
  46.                 location.href='list.php?page=$page';
  47.  
  48.                 </script>
  49.                 </head>
  50.                 </html> ";
  51.  
  52. } else {
  53.         $msg = "비밀번호가 틀립니다.";
  54.         echo " <html><head>
  55.                 <script name=javascript>
  56.  
  57.                 if('$msg' != '') {
  58.                         self.window.alert('$msg');
  59.                 }
  60.  
  61.                 history.go(-1);
  62.  
  63.                 </script>
  64.                 </head>
  65.                 </html> ";
  66.  
  67. }
  68.  
  69.  
  70. ?>

=================================================================

 

이 부분 역시 앞서 insert.php와 크게 다르지 않아 코드를 이해하기 그리 어렵지 않을 것입니다.

단지 다른 점이라고는 SQL 쿼리문이, insert.php에서 INSERT문을 쓴데 반해 여기서는 UPDATE문을 사용한다는 것입니다. 글을 새로 입력하는 것과 수정하는 것이니, 당연한 말이겠죠....

 

아래 코드에서 SQL 쿼리문의 뜻만 이해하면 됩니다.

 

  1. $sql = "select number from $tablename where number=$number and password=$password"; 
  2. $result = mysql_query($sql) or die (mysql_error()); 
  3.   
  4. if(mysql_num_rows($result)) {  //반환된 열이 있으면... 
  5.         //수정한 내용을 UPDATE합니다. 
  6.         $sql = "update $tablename set 
  7.                         name='$name',email='$email',homepage='$homepage', 
  8.                         subject='$subject',memo='$memo' where number=$number"; 

    먼저 20행에서 현재 글번호와 패스워드를 비교하여 DB에 저장된 해당 글번호의 패스워드와 일치하는지 알아보기 위한 쿼리문을 정의합니다.
    21행에서 쿼리문을 실행합니다.
    23행은, 쿼리의 결과가 있으면 24행부터 실행하라는 의미입니다. 없다면? 비밀번호가 틀리다고 메시지를 보이고 전 화면으로 이동하게 되는 거죠. (코드 44행부터입니다.)

    25~27행의 쿼리문은 modify.php에서 넘어온 값들을 DB에 원래 저장된 내용에 덮어쓰는 기능을 합니다.

    나머지 이해가 안되는 부분이 있으면 insert.php 코드를 해설해 놓은 강좌를 보시면 됩니다.
728x90

'낙서장 > php홈페이지 만들기' 카테고리의 다른 글

2013. 9. 16. 23:05 마무리 하며..  (0) 2021.08.13
삭제 - delete.php  (0) 2021.08.13
view.php  (0) 2021.08.13
list.php 리스트 페이지  (0) 2021.08.13
insert.php (DB 에 저장하기)  (0) 2021.08.13

댓글