[php질문] 게시판 리스트 값 출력문제입니다.

price의 이미지

일반형게시판을 보면 보통 리스트 출력을
--------------------------------------------------
no | title | name | date
--------------------------------------------------
6 test test 2005
5 test1 test1 2005
4 test2 test2 2005
3 test3 test3 2005
2 test4 test4 2005
--------------------------------------------------
prev [1] [2] next
--------------------------------------------------
이렇게 되는데 그중 no=5번을 지우고 글을 다시 입력하면
--------------------------------------------------
no | title | name | date
--------------------------------------------------
7 test5 test5 2005
6 test1 test1 2005
4 test2 test2 2005
3 test3 test3 2005
2 test4 test4 2005
--------------------------------------------------
prev [1] [2] next
--------------------------------------------------

이렇게 되버리거든요?
지우고 다시 입력 하더라도 순서가 6 5 4 3 2 이렇게 정렬 할 수 있는 방법을 문의 드리고 싶습니다.

제 코드 입니다.

<?

$numresults=mysql_query("select id from $board where del!='y'");
$numrows=mysql_num_rows($numresults);

function re_see($parentid)
{

global $board;

static $i=0;

$query3="select id,del from $board where parent=$parentid order by id desc";

$mysql_result3=mysql_query($query3);
 while ($row3=mysql_fetch_array($mysql_result3))
 {

   if ($row3[del]=='n')
  {
  $i++;
  $query4="update $board set next=$i where id=$row3[id]";
  mysql_query($query4);
  }
  
     re_see($row3[id]);
 
 }
}
re_see(0);

function kstrcut($str, $len, $suffix = "") 
{
    if ($len >= strlen($str)) return $str;

    $klen = $len - 1;

    while(ord($str[$klen]) & 0x80) $klen--;

    return substr($str, 0, $len - (($len + $klen + 1) % 2)) . $suffix;
}

$limit=15;    //  페이지 안에 게시물 수
if (!$offset) {
   $offset=0;
}

$result=mysql_query("select * from $board where del!='y' order by next limit $offset,$limit");
while($row=mysql_fetch_array($result))
{
					 echo "<tr>";
                     echo "<td width=2 align=left background=../www_board/images/www_15.gif><img src=../www_board/images/www_15.gif width=2 height=25></td>";
                     echo "<td width=40 align=center>";
					 echo "$row[id]"; <<--------- 이부분이 auto_increment로 지정되어 있습니다.
					 echo "</td>";
					 $day=explode(" ",$row[wdate]);
                     echo "<td width=100 align=center>";
					 echo "&nbsp;$day[0]";
					 echo "</td>";
                     echo "<td width=229 align=left>&nbsp; ";
					   $title=htmlspecialchars($row[title]); 
 
   if ($row[parent]!=0)  // re 이미지
 {
   echo ("&nbsp;&nbsp;<img src=images/re.gif align=absmiddle border=0>");
 }
					 echo "<a href=www_view.php?id=$row[id]&offset=$offset>";
					 echo kstrcut("$title",50,"...");
					 echo "</a>";
					 echo "</td>";
                     echo "<td width=100 align=center>";
					 echo "$row[name]";
					 echo "</td>";
                     echo "<td width=70 align=center>";
					 echo "$row[see]";
					 echo "</td>";
                     echo "<td width=2 align=right background=../www_board/images/www_15.gif><img src=../www_board/images/www_15.gif width=2 height=25></td>";
                     echo "</tr>";
                     echo "<tr bgcolor=#CAE10A>";
                     echo "<td height=1 colspan=7 align=left><img src=../../images/spacer.gif width=1 height=1></td>";
                     echo "</tr>";
}

mysql_close();

?>

물론 편법으로 이렇게도 해보았습니다.

$limit=15;    //  페이지 안에 게시물 수
if (!$offset) {
   $offset=0;
}

$result=mysql_query("select * from $board where del!='y' order by next limit $offset,$limit");
while($row=mysql_fetch_array($result))
{
$count=$numrows--; <<------- 이부분 수정					 echo "<tr>";
                     echo "<td width=2 align=left background=../www_board/images/www_15.gif><img src=../www_board/images/www_15.gif width=2 height=25></td>";
                     echo "<td width=40 align=center>";
					 echo "$count"; <<--------- 이부분 수정 
					 echo "</td>";

이렇게 하면 리스트에서는 $numrows(총게시물수) 하나씩 차감하니까 제대로 되었습니다.

문제는 다음 페이지 리스트로 옮기면 이어서 카운트가 되어야 하는데 앞면과 똑같이 되어버리네요.... ㅜㅡ

--------------------------------------------------
no | title | name | date
--------------------------------------------------
6 test test 2005
5 test1 test1 2005
4 test2 test2 2005
3 test3 test3 2005
2 test4 test4 2005
--------------------------------------------------
prev [1] [2] next
--------------------------------------------------
1페이지

--------------------------------------------------
no | title | name | date
--------------------------------------------------
6 test5 test5 2005
--------------------------------------------------
prev [1] [2] next
--------------------------------------------------
2페이지

카운트(no)가 1이 되어야하는데 똑같이 6 이 나와버리네요.. ㅜㅡ

도움을 요청 하겠습니다.

price의 이미지

참..페이지 나누는 부분입니다.

<?
if ($offset!=0) {  
 $prevoffset=$offset-20;
    echo  "<a href=\"$PHP_SELF?offset=$prevoffset\"><img src=../www_board/images/www_28.gif width=9 height=9 border=0></a>&nbsp;&nbsp;\n";
}

$pages=intval($numrows/$limit);

if ($numrows%$limit) {
  $pages++;
}

for ($i=1;$i<=$pages;$i++) {
    $newoffset=$limit*($i-1);
    if ($offset!=$newoffset){
      echo "<a href=\"$PHP_SELF?offset=$newoffset\">[";
     }
    echo "$i";
    if ($offset!=$newoffset){
      echo "]</a>";
    }
 
}

if($pages!=1)
{
  $last=($offset/$limit)+1;
  if($pages!=$last)
 {
   $newoffset=$offset+$limit;
   echo "&nbsp;&nbsp;<a href=$PHP_SELF?offset=$newoffset><img src=../www_board/images/www_30.gif width=9 height=9 border=0></a><p>";
 }
}
?>

[ShadowMind_Angels]
배움의 길은 멀고도 험하군요..............
진정한 배움의 길이란 ★━────

blueruin의 이미지

보여주신 코드는 DB에서 SELECT 하는 부분만 있네요.
아마 database 의 no 필드에 auto_increment 가걸린것 같은데 그렇다면 수동으로 작업해주는 방법밖엔 없습니다.
auto_increment 가 걸리지 않아도 수동으로 체크해서 작업해야겠네요.

만약 no 가 프라임으로 걸려있다면 그냥 놔두는게 좋습니다.
출력할때의 정렬이 문제라면 일반적으로 정렬용 필드를 하나 따로 두고 그필드를 필요에따라 가공하여 사용하는게 좋습니다.

질문은 php 쪽으로 하셨지만 답은 database 쪽에 있고,
원하는 결과는 php의 다른곳에 있는것 같습니다. (무슨말이지.. :roll: )

time to wait...

price의 이미지

mysql> desc customer_board;
+----------+---------------+------+-----+---------+----------------+
| Field    | Type          | Null | Key | Default | Extra          |
+----------+---------------+------+-----+---------+----------------+
| id       | int(11)       |      | PRI | NULL    | auto_increment |
| name     | varchar(30)   | YES  |     | NULL    |                |
| email    | varchar(30)   | YES  |     | NULL    |                |
| homepage | varchar(90)   | YES  |     | NULL    |                |
| pass     | varchar(10)   | YES  |     | NULL    |                |
| title    | varchar(90)   | YES  |     | NULL    |                |
| comment  | text          | YES  |     | NULL    |                |
| wdate    | datetime      | YES  |     | NULL    |                |
| uip      | varchar(16)   | YES  |     | NULL    |                |
| see      | int(11)       | YES  |     | NULL    |                |
| parent   | int(11)       | YES  |     | NULL    |                |
| egroup   | int(11)       | YES  |     | NULL    |                |
| next     | int(11)       | YES  |     | NULL    |                |
| del      | enum('n','y') | YES  |     | NULL    |                |
+----------+---------------+------+-----+---------+----------------+
14 rows in set (0.00 sec)

디비테이블 구조입니다.

$id 는 글이 쓰여을때 자동으로 값이 넘어가는거 맞습니다.

편법

$limit=15;    //  페이지 안에 게시물 수 
if (!$offset) { 
   $offset=0; 
} 

$result=mysql_query("select * from $board where del!='y' order by next limit $offset,$limit"); 
while($row=mysql_fetch_array($result)) 
{ 
$count=$numrows--; <<------- 이부분 수정                echo "<tr>"; 
                     echo "<td width=2 align=left background=../www_board/images/www_15.gif><img src=../www_board/images/www_15.gif width=2 height=25></td>"; 
                     echo "<td width=40 align=center>"; 
                echo "$count"; <<--------- 이부분 수정 
                echo "</td>";

을 사용하여 전체값에 대한 내림순으로 값을 따로 줬습니다.

그결과가 내림순 값은 잘되는데 다음 페이지로 넘어 갔을때가 적용이 안되고 앞 페이지 처럼 처음 내림순 값을 나온다는 것입니다.

저두 이쪽에서 수정을 봐야 할듯 싶은데...영 감이 안오네요.

<? 
if ($offset!=0) {  
 $prevoffset=$offset-20; 
    echo  "<a href=\"$PHP_SELF?offset=$prevoffset\"><img src=../www_board/images/www_28.gif width=9 height=9 border=0></a>&nbsp;&nbsp;\n"; 
} 

$pages=intval($numrows/$limit); 

if ($numrows%$limit) { 
  $pages++; 
} 

for ($i=1;$i<=$pages;$i++) { 
    $newoffset=$limit*($i-1); 
    if ($offset!=$newoffset){ 
      echo "<a href=\"$PHP_SELF?offset=$newoffset\">["; 
     } 
    echo "$i"; 
    if ($offset!=$newoffset){ 
      echo "]</a>"; 
    } 
  
} 

if($pages!=1) 
{ 
  $last=($offset/$limit)+1; 
  if($pages!=$last) 
 { 
   $newoffset=$offset+$limit; 
   echo "&nbsp;&nbsp;<a href=$PHP_SELF?offset=$newoffset><img src=../www_board/images/www_30.gif width=9 height=9 border=0></a><p>"; 
 } 
} 
?>

[ShadowMind_Angels]
배움의 길은 멀고도 험하군요..............
진정한 배움의 길이란 ★━────

price의 이미지

편법으로 이렇게나마 했긴 했는데 영 찜찜하네요..

$limit=15;    //  페이지 안에 게시물 수 
if (!$offset) { 
   $offset=0; 
} 

$result=mysql_query("select * from $board where del!='y' order by next limit $offset,$limit"); 
while($row=mysql_fetch_array($result)) 
{ 
$row[next] = $row[next]-1;  <<----------이렇게 수정
$next = $numrows - $row[next]; <<--------- 이렇게 수정
              echo "<tr>"; 
                     echo "<td width=2 align=left background=../www_board/images/www_15.gif><img src=../www_board/images/www_15.gif width=2 height=25></td>"; 
                     echo "<td width=40 align=center>"; 
                echo "$next"; <<--------- 이렇게 수정 
                echo "</td>";

깔끔하게 단순위 게시물 카운트 정렬이 되었네요...
좀더 나은 방법도 있을것 같은데.. 더 연구를 해봐야겠군요.. ^^

좋은 명절 연휴 되시길 바랍니다.

감사합니다.

[ShadowMind_Angels]
배움의 길은 멀고도 험하군요..............
진정한 배움의 길이란 ★━────

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.