17. PHP 게시판 만들기, view 제작 6

2015.05.01 01:39
저자 : Kurien

주의: 본 게시판은 보안을 생각하지 않고 만들어졌으므로 실제로 사용되어서는 안되는 코드입니다.

공부할 때 게시판이 이처럼 동작한다는 정도로만 이해해주세요.


요즘들어 피곤하네요.

야근도 잦고, 잠도 늦게 자서 그런지 힘이 읎네요 ㅋ


그래도 적을건 적어야죠, ㅎㅎ

project 파일은 앞전의 게시글에 함께 있으니 그 파일로 하시면 되겠습니다.


오늘 수정할 부분은 댓글을 업데이트(쓰기, 수정, 삭제) 하는 부분인 comment_update.php입니다.

저번에 수정했던 comment.php보다는 나을 수도 있지만, 이 부분도 복잡하다고 생각합니다.

차근차근 따라해주세요!


<?php

require_once('../dbconfig.php');

$w = '';

$coNo = 'null';

//2Depth & 수정 & 삭제

if(isset($_POST['w'])) {

$w = $_POST['w'];

$coNo = $_POST['co_no'];

}

//공통 변수

$bNo = $_POST['bno'];

$coPassword = $_POST['coPassword'];

if($w !== 'd') {//$w 변수가 d일 경우 $coContent와 $coId가 필요 없음.

$coContent = $_POST['coContent'];

if($w !== 'u') {//$w 변수가 u일 경우 $coId가 필요 없음.

$coId = $_POST['coId'];

}

}

if(empty($w) || $w === 'w') { //$w 변수가 비어있거나 w인 경우

$msg = '작성';

$sql = 'insert into comment_free values(null, ' .$bNo . ', ' . $coNo . ', "' . $coContent . '", "' . $coId . '", password("' . $coPassword . '"))';


if(empty($w)) { //$w 변수가 비어있다면,

$result = $db->query($sql);

$coNo = $db->insert_id;

$sql = 'update comment_free set co_order = co_no where co_no = ' . $coNo;

}

} else if($w === 'u') { //작성

$msg = '수정';

$sql = 'select count(*) as cnt from comment_free where co_password=password("' . $coPassword . '") and co_no = ' . $coNo;

$result = $db->query($sql);

$row = $result->fetch_assoc();

if(empty($row['cnt'])) { //맞는 결과가 없을 경우 종료

?>

<script>

alert('비밀번호가 맞지 않습니다.');

history.back();

</script>

<?php 

exit;

}

$sql = 'update comment_free set co_content = "' . $coContent . '" where co_password=password("' . $coPassword . '") and co_no = ' . $coNo;

} else if($w === 'd') { //삭제

$msg = '삭제';

$sql = 'select count(*) as cnt from comment_free where co_password=password("' . $coPassword . '") and co_no = ' . $coNo;


$result = $db->query($sql);

$row = $result->fetch_assoc();

if(empty($row['cnt'])) { //맞는 결과가 없을 경우 종료

?>

<script>

alert('비밀번호가 맞지 않습니다.');

history.back();

</script>

<?php 

exit;

}

$sql = 'delete from comment_free where co_password=password("' . $coPassword . '") and co_no = ' . $coNo;


} else {

?>

<script>

alert('정상적인 경로를 이용해주세요.');

history.back();

</script>

<?php 

exit;

}

$result = $db->query($sql);

if($result) {

?>

<script>

alert('댓글이 정상적으로 <?php echo $msg?>되었습니다.');

location.replace("./view.php?bno=<?php echo $bNo?>");

</script>

<?php

} else {

?>

<script>

alert('댓글 <?php echo $msg?>에 실패했습니다.');

history.back();

</script>

<?php

exit;

}

?>


이번에도 빨간색 부분만 나눠서 설명해드리겠습니다.

빨간색인 부분은 추가 혹은 수정이 된 부분입니다.


$w = '';

$coNo = 'null';


//2Depth & 수정 & 삭제

if(isset($_POST['w'])) {

$w = $_POST['w'];

$coNo = $_POST['co_no'];

}


먼저 처음에 $w = ''를 입력 해서 $w 변수를 초기화 해줍니다.

초기화를 했을 때 아래의 if문의 isset($_POST['w'])가 true라면 comment.php에서 input hidden 태그에 있던 w의 값(w, u, d)를 얻습니다.

만약 w에 값이 없다면 그냥 무시하게 되고 이 경우는 1depth의 댓글을 작성하게 하는거죠.


일단은 아래의 코드들을 더 봐야 하겠지만, isset($_POST['w'])를 통해서 1Depth인지, 2Depth인지, 수정인지, 삭제인지를 구분합니다.


$coNo도 null로 초기화 한 것처럼 보이지만, 사실 null이 아니라 'null'입니다.

뒤에 나올 쿼리에 넣기 위해서 'null'을 적었습니다.

이 $coNo도 1Depth가 아니라면, 즉 isset($_POST['w'])가 TRUE라면 $_POST['co_no']의 값을 받아옵니다.


여기서 $coNo은 2Depth 댓글 쓰기의 경우 해당 상위 댓글(1Depth)의 co_no이 되고,

수정과 삭제의 경우는 수정, 삭제될 댓글의 co_no을 얻습니다.


if($w !== 'd') {//$w 변수가 d일 경우 $coContent와 $coId가 필요 없음.

$coContent = $_POST['coContent'];

if($w !== 'u') {//$w 변수가 u일 경우 $coId가 필요 없음.

$coId = $_POST['coId'];

}

}


이 부분은 공통되지 않는 변수를 출력하는 부분입니다.

만약 $w 변수의 값이 'd'가 아니라면('', w, u) $coContent 변수를 선언하고,

$w 변수의 값이 'u'도 아니라면('', w) $coId 변수를 선언합니다.


if(empty($w) || $w === 'w') { //$w 변수가 비어있거나 w인 경우

$msg = '작성';

$sql = 'insert into comment_free values(null, ' .$bNo . ', ' . $coNo . ', "' . $coContent . '", "' . $coId . '", password("' . $coPassword . '"))';

if(empty($w)) { //$w 변수가 비어있다면,

$result = $db->query($sql);


$coNo = $db->insert_id;

$sql = 'update comment_free set co_order = co_no where co_no = ' . $coNo;

}

}


이제 쿼리문을 작성하는 구간입니다.

먼저 empty($w) 혹은 $w === 'w'라면 1Depth 혹은 2Depth의 댓글 쓰기입니다.

이 경우 $msg(메시지) 변수에 '작성'이라는 문구를 넣어주셔야합니다.


그 다음 $sql 변수에 insert 문을 작성합니다.

여기서 중요한 부분은 $coNo인데, 제일 위쪽에서 $w = ''였다면 $coNo = 'null'이고, $w == 'w'라면 $coNo은 1Depth 댓글의 co_id 값이 되는거죠.


그리고 여기서 empty($w)가 TRUE라면(1Depth 댓글 작성이라면) $db->query($sql)로 쿼리를 날리고,

insert 된 데이터의 id 값을 가져온 후 $coNo을 id값과 동일하게 업데이트 해줍니다.


1Depth는 co_id == co_no이여야 하기 때문이죠.

마지막에 $sql변수만 만들고 query를 보내지 않는 이유는 코드의 하단에 공통으로 사용되는 부분이 있기 때문입니다.


else if($w === 'u') { //작성

$msg = '수정';


$sql = 'select count(*) as cnt from comment_free where co_password=password("' . $coPassword . '") and co_no = ' . $coNo;

$result = $db->query($sql);

$row = $result->fetch_assoc();


......

}


여기서는 $w === 'u' 일때의 코드가 있습니다.

$w가 'u'라는 것은 수정이라는 뜻이므로 $msg에는 '수정'이라는 문구를 넣어줍니다.


그 다음 $sql 변수를 생성하는데, update문을 작성하기 전에 select 문을 통해서 수정 할 때 입력했던 비밀번호가 저장된 비밀번호와 같은지 확인합니다.

만약 저장된 비밀번호와 같다면 count(*)은 1이 될 것이고 아니면 0이 되겠죠?


if(empty($row['cnt'])) { //맞는 결과가 없을 경우 종료

?>

<script>

alert('비밀번호가 맞지 않습니다.');

history.back();

</script>

<?php 

exit;

}


$sql = 'update comment_free set co_content = "' . $coContent . '" where co_password=password("' . $coPassword . '") and co_no = ' . $coNo;


위에서 얻은 $row['cnt']에 값이 없다면 비밀번호가 맞지 않다는 메시지와 함께 이전 화면으로 돌아갑니다.

값이 있다면 update문을 작성합니다.


여기서도 하단의 공통 query 전송 부분을 사용하므로 따로 query 부분은 없습니다.


else if($w === 'd') { //삭제

$msg = '삭제';

$sql = 'select count(*) as cnt from comment_free where co_password=password("' . $coPassword . '") and co_no = ' . $coNo;


$result = $db->query($sql);

$row = $result->fetch_assoc();


if(empty($row['cnt'])) { //맞는 결과가 없을 경우 종료

?>

<script>

alert('비밀번호가 맞지 않습니다.');

history.back();

</script>

<?php

exit;

}

$sql = 'delete from comment_free where co_password=password("' . $coPassword . '") and co_no = ' . $coNo;

}


이번엔 삭제 부분입니다.

$w === 'd'라면 삭제를 나타내므로 $msg에 삭제를 넣어줍니다.


여기서도 역시 select를 이용해서 비밀번호를 확인하고, 결과가 없으면 비밀번호가 맞지 않는다는 알림창을 출력하고 되돌아갑니다.

값이 존재한다면 delete문을 이용해서 삭제 sql을 만들어줍니다.


else {

?>

<script>

alert('정상적인 경로를 이용해주세요.');

history.back();

</script>

<?php 

exit;

}


$result = $db->query($sql);


만약 $w의 값이 '', 'w', 'u', 'd' 네 개중에 하나도 일치하지 않는다면 else문이 실행됩니다.

정상적인 경로를 이용했다면 다른 값이 나올 수는 없으므로 정상적인 경로를 이용해달라는 메시지와 함께 이전 화면으로 되돌아갑니다.


만약 모든 if문의 연산이 끝났다면 공통적으로 필요한 query를 전송합니다.


if($result) {

?>

<script>

alert('댓글이 정상적으로 <?php echo $msg?>되었습니다.');

location.replace("./view.php?bno=<?php echo $bNo?>");

</script>

<?php

} else {

?>

<script>

alert('댓글 <?php echo $msg?>에 실패했습니다.');

history.back();

</script>

<?php

exit;

}

?>


if($result) 부분은 기존에 있던 부분이지만 알림창에 나오는 메시지 부분을 보면

"댓글이 정상적으로 <?php echo $msg?> 되었습니다."라는 문구로 바뀌어있습니다.

여기서 $msg 변수에는 작성, 수정, 삭제 중의 하나의 문구가 들어있겠죠?


그 다음 location.replace를 통해서 다시 view 화면으로 되돌아갑니다.

만약 마지막에서 $result값이 없다면 쿼리 전송에 실패 했으니 댓글 (작성, 수정, 삭제)에 실패했다는 문구와 함께 이전 화면으로 돌아갑니다.


여기까지 댓글 작성, 수정, 삭제 부분까지 알아보았습니다.


이번에도 길긴 한데, 오히려 이 부분이 더 쉽다고 느껴지네요.

어려운 부분은 댓글에 남겨주시고, http://kurien.dothome.co.kr에서 현재 진행 상황을 알 수 있습니다.

저작자 표시 비영리 변경 금지
신고
TAG ,
  1. 이전 댓글 더보기
  2. 호진이 2015.07.01 11:34 신고  댓글주소  수정/삭제  댓글쓰기

    게시판에 글을 안써도 등록되는거를 <input required>으로 해결 했어요 이렇게 하니 글을 안쓰면 일단 쓰라고 경고문을 날리니 이방법도 괜찮은거 같습니다.

    • Kurien 2015.07.03 10:43 신고  댓글주소  수정/삭제

      게시물을 받는 곳에서
      if(empty($_POST['name값']))
      {
      exit('내용을 입력해주세요!');
      }

      라는 식으로도 가능합니다.
      단순히 html에서만 막으신다면 웹에서 html을 마음대로 조작할 수 있으니 보안상 취약하게 됩니다.

    • 주인아님 2015.07.05 17:22 신고  댓글주소  수정/삭제

      강좌 자체가 데이타 입출력과 기본적인 데이타를 다루는 예제들이라서..
      넘어간 값에 대한 세밀한 검증에 대해서는 차후에 다루게 될 듯...

  3. ㅁㄴㅇㄹ 2015.08.14 15:21 신고  댓글주소  수정/삭제  댓글쓰기

    파일 업로드같은것도 추가해주시면 안될까요?

  4. kh 2015.08.21 01:54 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다! 파일업로드나 사진업로드 부분에 대해 더 알고 싶은데, 구글에 어떤식으로 검색해봐야할까요?

    • 신기루 2015.11.12 16:24 신고  댓글주소  수정/삭제

      이 부분은 파일업로드 처리 페이지 입니다.

      유효성 검사는 파일 용량, 파일 이름, 한글명, 한자명, 일어로
      등록 시, 경고창 스크립트 부분입니다.

      $File = $_FILES['File']['name']; // 첨부파일명

      # 파일 용량 제한
      if($_FILES["File"]["size"] > 10000000){
      echo ("<script>
      alert('파일 용량이 너무 큽니다!');
      history.go(-1);
      </script>");
      exit;
      }

      # 파일 이름 길이 제한
      if(strlen($_FILES["File"]["name"]) > 100){
      echo ("<script>
      alert('100자 내외로 된 파일을 올려주세요!');
      history.go(-1);
      </script>");
      exit;
      }

      # 한글명 파일 제한
      if(preg_match('!['
      .'\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}'
      .']+!u', $_FILES["File"]["name"])){
      echo ("<script>
      alert('한글명 파일은 등록 안됩니다!');
      history.go(-1);
      </script>");
      exit;
      }

      # 한자명 파일 제한
      if(preg_match('!['
      .'\x{2E80}-\x{2EFF}'
      .'\x{31C0}-\x{31EF}\x{3200}-\x{32FF}'
      .'\x{3400}-\x{4DBF}\x{4E00}-\x{9FBF}\x{F900}-\x{FAFF}'
      .'\x{20000}-\x{2A6DF}\x{2F800}-\x{2FA1F}'
      .']+!u', $_FILES["File"]["name"])){
      echo ("<script>
      alert('한자명 파일은 등록 안됩니다!');
      history.go(-1);
      </script>");
      exit;
      }

      # 일어명 파일 제한
      if(preg_match('!['
      .'\x{3040}-\x{309F}'// 히라가나
      .'\x{30A0}-\x{30FF}'// 가타카나
      .'\x{31F0}-\x{31FF}'// 가타카나 음성 확장
      .']+!u', $_FILES["File"]["name"])){
      echo ("<script>
      alert('일어명 파일은 등록 안됩니다!');
      history.go(-1);
      </script>");
      exit;
      }

      # 파일 업로드
      $uploaddir = '/host/home4/wees/html/upload/file/';
      $uploadfile = $uploaddir.basename($_FILES['File']['name']);
      if(move_uploaded_file($_FILES['File']['tmp_name'], $uploadfile)){
      // echo "파일이 유효하고, 성공적으로 업로드 되었습니다.";
      }


      이렇게 하심 되구요.

      마지막으로 추가해야 될 부분은 말씀하지 않아도 아실거라고 봐요~

      당연히 파일명도 저장이 되어야 하니 DB 쿼리문.. 즉

      ex)
      $sql = "insert into inquiry
      (idx, ComName, Name, Password, Email, Tel, Combo, Radio, Request, File, Hit, regdate) values
      ('', '$ComName', '$Name', '$Password', '$Email', '$Tel', '$Combo', '$Radio', '$Request', '$File', '', '$regdate')";


      여기서 보면 File 라고 들어가있죠? 저런식으로 파일명 관련해서
      컬럼추가하고 DB 쿼리에 추가만 해주심 됩니다~

    • 신기루 2015.11.12 16:27 신고  댓글주소  수정/삭제

      제가 안그래도 Kurien님 게시판 형식에서 파일업로드 기능 추가해서
      작업했는데 도움이 되실지 ~ 소스 보여드릴게요.

      이 부분은 글쓰기 페이지 입니다.

      <? # 파일 업로드 시, enctype='multipart/form-data'와 method='post' 반드시 입력 ?>
      <form name ='input_form' enctype='multipart/form-data' method='post' action='./write_proc.php'>

      <? # 파일 업로드 시, 아래와 같이 name, id(꼭, "MAX_FILE_SIZE" 이여야 함) & value = 파일크기(즉, 1000 = 1KB) ?>
      <input type="hidden" name="MAX_FILE_SIZE" id="MAX_FILE_SIZE" value="10000000" />



      <tr>
      <th>첨부파일</th>
      <td>
      <input type='file' name='File' id='File' size='20'>
      <strong style='color:red; font-size:12px;'>★반드시, 영문이름을 가진 파일만 등록</strong><br />
      <?php
      # 'File'의 값이 true = 데이터 가져옴, 'File'의 값이 false = null
      echo isset($row['File'])?$row['File']:null
      ?>
      <?php
      # $idx 값이 존재한다면,
      if(isset($idx)){

      # 'File'가 빈값이 아니면,
      if($row['File'] != ""){

      # '★기존에 등록했던 파일 이름' 메시지 출력
      echo "<strong style='color:red; font-size:12px;'>★기존에 등록했던 파일 이름</strong>";
      }
      }
      ?>
      </td>
      </tr>



      일단 이부분은 write.php 부분입니다.

    • Kurien 2015.11.16 10:39 신고  댓글주소  수정/삭제

      제 대신 답변까지 해주셨네요 ㅎㅎ
      파일 유효성 검사나 보안쪽도 다룰 생각이였는데 일 + 귀차니즘으로 인해 활동을 안하고있습니다 ㅠ

  5. 신기루 2015.11.12 16:27 신고  댓글주소  수정/삭제  댓글쓰기

    Kurien님 ~ ASP에서 PHP로 넘어오면서 딱 좋은 예제를 만난거 같네요 ~ 감사합니다~

  6. 최수형 2015.12.27 07:29 신고  댓글주소  수정/삭제  댓글쓰기

    오류가 있네요

    if($page < 1 && $page > $allPage)

    이것 때문에 존재하지 않는 페이지도 접근 가능하네요

    if($page < 1 || $page > $allPage) 로 바꿔야 할 듯

  7. 궁금해요 2016.04.06 13:33 신고  댓글주소  수정/삭제  댓글쓰기

    twoDepth에서 수정 삭제하는건 어떻게 추가해야되나요?

  8. ongoing 2016.06.09 12:26 신고  댓글주소  수정/삭제  댓글쓰기

    게시판 만들기 잘 정리되어 있어 참조하고 있습니다. 감사합니다.
    그런데 보통 게시판에서 중요한 점으로써 게시물 리스트 화면 밑의
    페이지 혹은 블럭이동 링크부분이 있는데 그에 대한 설명은
    않되있나요? 아니면 발견하지 못한것인가요?

  9. ongoing 2016.06.14 18:58 신고  댓글주소  수정/삭제  댓글쓰기

    게시판 만드는 것과 관련하여 인터넷에 많이 올려져 있음에도
    페이징부분에 대해서는 별로 많이 나와 있지 않아서

    생활코딩 egoing님 강좌와 이 사이트 정보를 토대로 했는데
    기본적인 것들은 이것으로 어느정도 커버되고
    나머지는 혼자 해보기로 하고 시작하여

    게시판 페이징 부분만을 먼저 오늘 완성했습니다. 감사합니다.

    처음으로 웹프로그램을 짜본지라 쉽지않았네요

    • Kurien 2016.06.14 20:11 신고  댓글주소  수정/삭제

      예제가 완벽하지가 않아서 죄송합니다.
      적어주신 페이지 접속해보니 페이징 구현을 잘 해놓으셨네요!

      다른 부분도 금방 만드실 것 같습니다!

  10. ongoing 2016.06.15 07:11 신고  댓글주소  수정/삭제  댓글쓰기

    아닙니다. 많은 도움됐습니다. 감사합니다!

  11. ongoing 2016.06.15 12:24 신고  댓글주소  수정/삭제  댓글쓰기

    그럼요, 도움이 되다마다요.
    게시판 짤 엄두를 내게 되었고 실질적으로도 많은 도움이 되었어요.

    그리고 게시판을 마저 제대로 완성하려면
    자주 참조해야 할 것 같습니다. ㅎㅎ~~

  12. ongoing 2016.06.15 15:42 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 앞으로도 부탁드려요~^^

  13. ongoing 2016.06.15 16:04 신고  댓글주소  수정/삭제  댓글쓰기

    한가지 질문입니다.
    보통 게시판에서 글을 올렸다가 삭제하면 해당 레코드가 삭제 되면서
    빠진 해당 레코드의 글 번호가 매워지게 하려면

    즉, 215개의 게시물중에 100번 게시물이 삭제 될 경우
    215번부터 101번 게시물의 번호는 모두 각각 215는 214, 214는 213 이렇게 하여
    마지막에는 101번이 100번이 되도록 sql에서 처리해야 할때 사용할
    query명령어 대한 정보가 있으신가요?
    (게시물이 삭제 될때마다 위의 일이 일어나도록 해줘야 함)

    • Kurien 2016.06.15 16:11 신고  댓글주소  수정/삭제

      보통 게시판에서는 게시물 번호( 여기서는 b_no이겠죠?)를 가지고 글번호로 사용하지 않습니다.

      해당 글을 불러올 때 가져올 수 있는 모든 글의 개수를 카운트 합니다.
      이 값을 $all_count라고 하죠.

      게시글 리스트가 뿌려질 때 이 $all_count--를 하면 순서대로 -1씩 줄어든 값이 됩니다.
      만약 페이지가 넘어가게 된다면 $all_count는 $all_count - ( (넘어간 페이지 수 -1) * 목록에 뿌려지는 글의 개수) 를 해줘야 합니다.

      제가 적었던 글에서는 $onePage (목록에 뿌려지는 글의 개수)가 15개고, 2 페이지인 상태라면 $all_count = $all_count - ( (2 - 1) * 15 )를 해주므로,
      $all_count가 100일 때 100 - 15 = 85
      2페이지에선 85번부터 출력되는거죠.

  14. ongoing 2016.06.15 18:51 신고  댓글주소  수정/삭제  댓글쓰기

    질문이 잘 전달이 않된 것 같아요.^^

    물론 게시물 화면을 load할때마다 전체 게시물수를 먼저 카운트한 후에 전체 블럭수
    전체 page수도 매번 새로 프로그램에서 새로 계산하게 됩니다.
    그래야 끝을 클릭하여 이동시 정확히 그곳으로 갈수 있게 되죠.
    (게시판 짠 사람이 블럭당 page수와 page당 글수만 상수로 잡게 되죠
    어제 적은 샘플 페이지이동 프로그램에서는 블럭당page수와 page당 글수를 각각
    9개와 8개로 설정한 것임)

    질문은 table에 저장될때 즉 글이 올려질때 해당 b_no가 같이 저장되는데
    누군가가 중간쯤에 있는 자신의 글을 삭제 할때에 해당테이블에서
    그 이후로 저장된 글들의 모든 b_no값을 각각 1씩 줄여 줘야 한다는 의미입니다.

    그것을 sql구문을 이용해서 간단히 처리하는 방법이 있을 것 같은데 말이죠.~~

    다른 게시판에 가보니 글을 써놓고 삭제하는 순간 나의 원래의 글 번호가 메워지면서
    바로 전체 게시물 번호가 조정되더군요. (동시에 전체게시물수는 하나 감소)

  15. Kurien 2016.06.15 18:58 신고  댓글주소  수정/삭제  댓글쓰기

    말씀하신것을 제대로 이해한게 맞는것같구요.
    원하시는 답변은 글이 삭제될 때,
    "update (table) set b_no = b_no - 1 where b_no = (삭제된 게시물의 b_no)"일거라고 생각됩니다.

    하지만 저렇게 쓰면 안되는 이유가 있는데, 한번 직접 적용하셔서 생각해보시고 답글 달아주시면 이유를 적어드리겠습니다.

  16. ongoing 2016.06.15 21:36 신고  댓글주소  수정/삭제  댓글쓰기

    b_no의 auto_increment없이 테이블을 create해야 하고

    19개의 레코드가 b_no가 1부터 순차적으로 입력되 있고 b_no가 5번인 레코드가 삭제된다면
    update table_name set b_no=b_no-1 where b_no > 5 and b_no < 20;로 하여
    b_no가 5번 이상의 레코드들의 b_no가 단번에 잘 조정되고
    b_no를 19로하는 레코드부터 다시 하나 하나 입력할 수 있게 되는군요.

    감사합니다!

    • Kurien 2016.06.15 21:59 신고  댓글주소  수정/삭제

      흠; 그게 정상적인게 아닙니다.

      auto_increment 있어도 php에서 추가로 작업 해서 가능 한 부분이기도 하구요.

      첫번째로는 기본적으로 게시판이라는게 주소 값이 고정되어있어야 하는데, 기본키인 b_no을 그렇게 수정해버리신다면 이전 게시물이 삭제될 때마다 원하던 게시물이 아닌 다른 게시물로 이동되어 버리는 점이 있구요.

      두번째로는 1000개의 글이 있다고 가정했을 때 첫 번째 글을 삭제하게 되면 나머지 999개의 게시물을 수정해야한다는 점입니다.
      물론 어느정도까진 성능적인 차이가 거의 느껴지지 않겠지만, 시간이 갈수록 점점 문제가 심해질꺼구요.
      그래서 위에 말씀 드린 count를 이용한 방법을 적어드렸던거랍니다.

  17. ongoing 2016.06.16 08:08 신고  댓글주소  수정/삭제  댓글쓰기

    Kurien님의 말이 맞습니다.
    제가 너무 고정관념을 가졌어요.
    굳이 글번호에 b_no를 넣을 필요가 없었는데 말이죠.
    b_no를 바꿀필요는 없을 것 같습니다.
    엉뚱한 질문에 답변하시느라 수고하셨습니다^^
    다시한번 감사드립니다!^^

    • Kurien 2016.06.16 08:33 신고  댓글주소  수정/삭제

      ㅎㅎ 저도 이 글을 쓸때는 b_no이면 될줄 알고 같은 방법을 사용해봤습니다.

      직접 해보신 덕분에 어떤 부분에 문제가 있을지를 아시게 됐으니 좋은거죠^^

  18. ongoing 2016.06.16 09:26 신고  댓글주소  수정/삭제  댓글쓰기

    그렇습니다.
    이건으로 처음 질문했을때
    Kurien님 답변의 서두에서
    "보통 게시판에서는 게시물 번호( 여기서는 b_no이겠죠?)를 가지고 글번호로 사용하지 않습니다."
    에 대해 그냥 건성으로 지나친것에 문제가 있었습니다.
    꼭 b_no를 글번호로 사용해야 한다는 고정관념이랄까요?
    하여간 고정관념이나 선입관으로
    상대방의 말에 경청하지 않는 습관이 나타난 것 같아요.^^
    작은 일이지만 여러가지 생각할 수 있게 되었습니다.
    또 한번 감사드립니다^^

    • Kurien 2016.06.16 09:46 신고  댓글주소  수정/삭제

      ㅎㅎ 아니에요~
      뭐든 여러번 시도해보고 결과를 찾으면 더 오래 기억됩니다.
      앞으로도 궁금한 점 있으시면 직접 실행해보고 왜 안되는지 체크하시면 더 쉽게 오류를 찾아내실 수 있으실꺼에요!

  19. NH 2016.06.29 18:55 신고  댓글주소  수정/삭제  댓글쓰기

    저 혹시 요거 소스 막 사용해도 되는 건가요..??

  20. test 2016.07.22 08:56 신고  댓글주소  수정/삭제  댓글쓰기

    리눅스 html 폴더에 넣으면 바로 사용은 불가능한건가요? ㅠㅠ 넣었는데 안되네요

    • Kurien 2016.07.26 09:12 신고  댓글주소  수정/삭제

      리눅스 설치 후 apache, php, mysql을 설치하시고 /var/www/html 에 넣으신거라면 될꺼라고 생각합니다.

      그게 아니라면 환경에 맞게 수정하셔야합니다.

  21. 박재욱 2016.10.30 20:44 신고  댓글주소  수정/삭제  댓글쓰기

    이제야 이메일 답변 드리게 되네요.
    몇일전에 윈도우 시스템이 반쯤 망가져 버려서 백업 복구작업 하느라
    이틀간 꼬박 밤을 새웠네요.
    아무튼 지난번 말씀해주신 대로
    $searchColumn = '';
    $subString = '';를
    if(isset($_GET['searchColumn'])) { 위에다 썼는데 신기하게도 한방에 되는군요.
    그 아래에서 쓸때는 안먹혔는데;
    이 if문은 검색버튼 눌러서 값이 있을때만 작동하는거 맞죠?
    제가 자바하다가 PHP도 시작했는데 앞으로도 잘 부탁드립니다. :)

    • Kurien 2016.10.31 13:22 신고  댓글주소  수정/삭제

      아마도 기존엔 if 문 안에서 작동되지 않았나 생각됩니다.

      제가 말씀드린 위치에 초기화를 하셨다면 정상적으로 작동하셨을껍니다.