3. PHP 게시판 만들기, list 제작 1

2015. 3. 31. 00:21
저자 : Kurien

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

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


오늘은 본격적으로 게시판 제작에 들어가겠습니다.

설명하기 전에 현재까지 진행 된 코드를 올렸습니다.


20150330_project.zip


여기 있는 dbconfig.php는 더 이상 올리지 않을 생각이구요.

따라하고 계신분은 이 dbconfig.php 파일에서 DB 호스트, DB 아이디, DB 패스워드, DB 이름을 바꿔서 실행하시면 되겠습니다.


CSS의 경우 디자인을 못하기 때문에... ㅠㅠ 최소한으로만 할꺼구요.

디자인 부분은 개인적으로 만들어서 사용하시면 되겠습니다.


먼저 dbconfig.php부터 살펴보겠습니다.


<?php

$db = new mysqli('localhost', 'kurien', '********', 'kurien');


if($db->connect_error) {

die('데이터베이스 연결에 문제가 있습니다.\n관리자에게 문의 바랍니다.');

}


$db->set_charset('utf8');

?>


dbconfig.php는 짧게 만들어놨습니다.

먼저 $db에 mysql을 연결해줍니다.

저와 같이 new mysqli를 쓰던지, mysqli_connect()를 쓰던지 그 부분은 자유입니다.

개인적으로는 new mysqli()가 편하니 이걸로 진행하겠습니다.


각 항목은 위에서 말한 것처럼 DB 호스트, DB 아이디, DB 패스워드, DB 이름 순으로 나열되어있습니다.

큰 이상이 없다면 DB와 연동되었다고 생각하시면 되는데, 만약 DB가 연결되지 않는다면 오류를 출력해줍니다.


여기서 if($db->connect_error) { }는 DB 연동이 실패했을 때 예외를 처리해주는 부분입니다.

여기서는 die()함수를 통해서 메시지를 보여주고 PHP를 종료하게 됩니다.


마지막 줄의 $db->set_charset('utf8')은 해당 DB와의 연결을 어떤 인코딩으로 할지 정해줍니다.

요즘은 UTF-8을 많이 쓰므로 utf8을 적었습니다.


참고로 제가 게시판을 만들면서 제작한 모든 인코딩은 UTF-8입니다.

만약 한글이 깨진다면 인코딩 문제를 의심해주세요!


이제 dbconfig.php에 대한 설명이 끝났으니 board 폴더에 있는 index.php를 열어봅시다.


<?php

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

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>자유게시판 | Kurien's Library</title>

<link rel="stylesheet" href="./css/normalize.css" />

<link rel="stylesheet" href="./css/board.css" />

</head>

<body>

<article class="boardArticle">

<h3>자유게시판</h3>

<table>

<caption class="readHide">자유게시판</caption>

<thead>

<tr>

<th scope="col" class="no">번호</th>

<th scope="col" class="title">제목</th>

<th scope="col" class="author">작성자</th>

<th scope="col" class="date">작성일</th>

<th scope="col" class="hit">조회</th>

</tr>

</thead>

<tbody>

<?php

$sql = 'select * from board_free order by b_no desc';

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

while($row = $result->fetch_assoc())

{

$datetime = explode(' ', $row['b_date']);

$date = $datetime[0];

$time = $datetime[1];

if($date == Date('Y-m-d'))

$row['b_date'] = $time;

else

$row['b_date'] = $date;

?>

<tr>

<td class="no"><?php echo $row['b_no']?></td>

<td class="title"><?php echo $row['b_title']?></td>

<td class="author"><?php echo $row['b_id']?></td>

<td class="date"><?php echo $row['b_date']?></td>

<td class="hit"><?php echo $row['b_hit']?></td>

</tr>

<?php

}

?>

</tbody>

</table>

</article>

</body>

</html>


별다른 기능도 없이 길기만 한 코드입니다.

먼저 맨 위에서 require_once를 통해서 dbconfig.php를 include 시켜줍니다.


여기서 include가 아닌 require_once를 쓴 이유는 dbconfig.php가 연동되지 않는다면 이 게시판을 볼 필요조차 없기 때문이죠.

만약 include 함수를 사용하면 dbconfig.php를 include에 실패 하더라도 이 페이지를 보여줄 수 있는 만큼 보여주고,

require 함수를 사용하면 dbconfig.php를 include에 실패하면 오류를 보내고 그대로 종료합니다.


그리고 그냥 include, require과 include_once, require_once의 차이점은 include, require의 경우 같은 파일을 여러번 include 해도 실행되지만,

once가 뒤에 붙게 되면 딱 한번만 include 되고 그 뒤의 같은 파일은 무시됩니다.

이렇게 dbconfig.php를 include 시키고, 기본적인 html들을 적어줍니다.


기본적인 html이나 css부분은 넘어가고 바로 table 부분으로 넘어가겠습니다.

caption은 웹 접근성을 지켜볼까 해서 넣은건데, readHide라는 클래스를 줘서 나중에 보이지 않게 할 생각이구요.


thead 부분을 보면 게시판에서 필요한 항목 중 list 부분에 필요한 항목을 th로 출력해줬습니다.

번호, 제목, 작성자, 작성일, 조회 순으로 지정했고, 그 아래 있는 tbody 부분부터 PHP 코드가 많이 사용됩니다.


먼저 $sql에 DB에 보낼 쿼리문을 작성합니다.

select * from board_free order by b_no desc;라는 쿼리문을 DB에 보냅니다.


가장 쉬운 select 문인데다가 어려운 부분도 없습니다.

혹시 모르는 분을 위해서 설명드리자면 이전 포스팅에서 만들었던 board_free 테이블에서 *(모든 column)을 가져오는겁니다.

그리고 마지막에 있는 order by b_no desc는 내림차순을 뜻하는건데요.

만약 내림차순이 아니라면 primary key(기본 키)를 기준으로 자동으로 오름차순 정렬이 됩니다.



이 이미지를 보면 위에서부터 1, 2, 3이 나오는데 정상적인 게시판이라면 3, 2, 1 순으로 나타나게 됩니다.

오래된 글일수록 뒤로 가야하니깐요.


아래는 order by b_no desc을 적은 후의 이미지입니다.



번호를 보면 정상적으로 나오죠?

이해가 잘 안된다면 작성일을 보시면 이해가 더 쉽게 될 것 같네요.

여기서 시간(22:17:12)만 나온 부분은 오늘 날짜를 나타내는거니, 2015-03-30이라고 생각하시면 되겠습니다.

$sql을 만들었으니 $result = $db->query($sql)을 통해 query를 보내고 결과 값을 $result에 저장합니다.

만약 이 과정에서 문제가 생겼다면 $result에는 FALSE가 들어가고, 정상적으로 query가 전송되었다면 $result에 TRUE가 들어갑니다.


이제 $row = $result->fetch_assoc()을 쓰는데요.

이 부분을 반복문 while($row = $result->fetch_assoc()) { }로 나타내면 보냈던 쿼리의 행이 끝날 때까지 자동으로 반복을 실행합니다.

제 DB에는 "안녕하세요!", "안녕하세요! 2", "테스트"라는 제목을 가진 데이터 3행이 있으니 총 3번 반복해주죠.


while문 내에는 $datetime = explode(' ', $row['b_date']);가 제일 먼저 있는데요.

$row['b_date']는 위에서 $row = $result->fetch_assoc()를 통해 얻은 DB의 데이터가 $row라는 배열에 저장된 것입니다.

배열의 key(b_date)는 column의 이름을 나타내구요.


$row['b_date']를 explode 함수를 통해 ' ' 값을 기준으로 나눈 이유는 b_date의 값은 "0000-00-00 00:00:00"과 같은 형식으로 저장되는데,

공백 기준 왼쪽에 있는 일자(년월일)와 오른쪽에 있는 시간(시분초)를 따로 나눠주기 위해서였습니다.


두 값을 나누면 $datetime[0]과 $datetime[1]에 저장되고, 다시 그 값들은 $date와 $time 변수에 저장됩니다.

여기서 만약 $date의 값이 date('Y-m-d')(오늘의 날짜)와 같다면 $row['b_date']의 값을 $time으로 바꿔주고,

오늘과 다른 날짜라면 $row['b_date']의 값을 $date로 바꿔줍니다.


여기서 이렇게 나눠줬기 때문에 작성일이 오늘인 글은 시간이 나타나게 됩니다.


이제 목록에 내용을 뿌려줄 일만 남았네요.

여기서 반복되어야 할 부분은 <tr>~</tr> 까지입니다.


순서대로 b_no, b_title, b_id, b_date, b_hit를 출력하시면 됩니다.

데이터베이스에 입력을 안하셨다면 입력을 하신 후 진행해보세요!


여기까지 list 제작 1이였습니다.

너무 세세한 것까지 설명해드려서 너무 글이 길어졌는데, 오히려 그걸로 인해 복잡할 수도 있을 것 같네요.

지적 사항이 있거나 글이 너무 어렵다면 댓글 남겨주시구요.


현재 진행 상태는 http://kurien.dothome.co.kr에서 확인하실 수 있습니다.


  1. 이전 댓글 더보기
  2. ㅎㅎ 2016.07.14 22:34  댓글주소  수정/삭제  댓글쓰기

    본문에 <article id = "boardList"> 로 수정하셔야될것같아요 ㅋㅋ
    css내용하고 안맞아서 댓글답니다.

  3. 직딩1 2016.07.19 21:14  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 운영자님. 게시물들 잘 보고 있습니다.
    PHP 오늘 막 시작했는데 잘 가다가 여기서 막히네요... ㅠㅠ

    Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in ~ on line 26
    Fatal error: Call to a member function fetch_assoc() on a non-object in ~ on line 28

    line 26은 $result=$db->query($sql); 이고, line 28은 while($row=$result->fetch_assoc()) 입니다.

    몇 시간째 이것만 붙들고 있어요... 구글링도 해봤는데 영 안 나오네요. ㅠㅠ
    혹시 무슨 설정같은 게 잘못 됐을까요? 시간이 없어서 APM 설치했는데...
    답변 부탁드립니다!

    • Kurien 2016.07.21 21:53 신고  댓글주소  수정/삭제

      mysqli 모듈이 존재하는지 (phpinfo() 함수를 사용하면 확인할 수 있습니다.)를 먼저 확인해보시구요.

      존재한다면 dbconfig 부분을 다시확인해보세요.

      존재하지 않는다면 해당 모듈을 추가하시거나, mysql을 이용한 방법으로 사용하시면 됩니다.

  4. 직딩1 2016.07.22 13:39  댓글주소  수정/삭제  댓글쓰기

    답변 감사합니다.
    버전 업그레이드를 했더니 해결됐어요...
    APM을 쓰고 있었는데 버전이 너무 낮아서 그럴 수도 있다는 말을 듣고 XAMPP로 갈아탔습니다. ㅎㅎ

    추가로 CSS에 관한 것입니다만,
    운영자님께서 올리신 압축 파일 속 css 폴더와 관련 코드를 복붙했는데 이미지처럼 안 나오더라구요...
    폰트는 바뀌었지만 테이블 라인이 하나도 안 나오는데 어떻게 해야 될까요? ㅠㅠ
    이미지의 레이아웃이 너무 맘에 들어서요...
    답변 부탁드립니다.

  5. 안녕하세요 2016.10.03 02:29  댓글주소  수정/삭제  댓글쓰기

    list 만들기를 그대로 따라해봤는데요 제대로 리스트가 나오긴하는데..

    query($sql); while($row = $result->fetch_assoc()) { $datetime = explode(' ', $row['b_date']); $date = $datetime[0]; $time = $datetime[1]; if($date == Date('Y-m-d')) $row['b_date'] = $time; else $row['b_date'] = $date; ?>

    이 코드가 웹 화면에 나오네요..

    이유를 알고계신가요??

    • Kurien 2016.10.04 10:03 신고  댓글주소  수정/삭제

      맨 앞의 query($sql); 앞에 mysqli->가 아니라 mysqli?>라고 적혀있는지 확인해보시고, 그 문제가 아니라면 kurien92@gmail.com으로 전체 코드 보내주시면 확인 후 말씀 드리겠습니다.

  6. 게시판! 2016.10.17 04:06  댓글주소  수정/삭제  댓글쓰기

    저도 앞서 다른 사람들이 말한것처럼 Fatal error: Call to a member function fetch_assoc() on boolean 라고 에러가 뜨네요. if문 사용해서 어디서부터 에러가 낮는지 찾어보니깐 php에서 board_free 테이블로 연결이 안되는게 문제인것 같은데 이 문제를 해결할 방법이 있나요?

    • Kurien 2016.10.17 13:33 신고  댓글주소  수정/삭제

      phpinfo()를 확인하셨을 때 mysqli 모듈이 포함되어 있는지 확인하셔야합니다.

      mysqli 모듈이 없다면, 서버상에서 설치하시거나 호스팅이시라면 호스팅사에 문의하셔야합니다.

      모듈 없이 진행하시려면 해당 mysqli에 맞는 mysql 함수로 변경해주셔야하구요.

  7. 요요 2016.10.20 09:10  댓글주소  수정/삭제  댓글쓰기

    한번 올려보아요
    안녕하세요

    반갑습니다

  8. 요요 2016.10.27 17:57  댓글주소  수정/삭제  댓글쓰기

    한번 올려보아요
    안녕하세요

    반갑습니다

  9. Rothko 2016.11.07 23:35  댓글주소  수정/삭제  댓글쓰기

    오오 PHP 공부하면서 게시판 만들기좀 배울려고 구글링 하다가 들어왔습니다.!!
    설명 하나하나가 주옥같고, 이해도 잘 됩니다. 따라하해보기도 쉽고요!!
    감사합니다. 정말 , 덕분에 좋은 공부 할 수 있습니다.^^

  10. j 2016.11.07 23:39  댓글주소  수정/삭제  댓글쓰기

    안녕하세요

    위의 게시물을 따라 게시판을 만들고 있는 한 사람인데요

    오류가 났지만 해결을 하기 힘든 상황입니다.

    혹시 실례가 되지 않으신다면 이메일을 알려주실 수 있으신가요?

  11. 자색고구마 2016.11.18 11:26  댓글주소  수정/삭제  댓글쓰기

    와 감사합니다. 엄청난 글이군요.
    php 이제 맛 시작해볼려고하는데 이런 갓 글을 발견했네요.
    위 댓글에 어렵다고 하시는 분들 아주 기본적인 서버 세팅없이 db를 사용하시려고 한 것 같은데
    최소한 서버에 phpMyAdmin 설치는 하셨는지 의문이 가네요.

    아무튼 이제 시작인데 미리 감사감사 드립니다.
    지금 리스트 뷰 라이트 까지 했는데 아주 잘되네요 ^^
    짱짱맨

  12. 궁금 2016.11.21 16:42  댓글주소  수정/삭제  댓글쓰기

    안녕하세요? 다른 문제때문에 검색하다 여쭤볼게 있어서 질문 드려요..
    db 연결하는 코드는 dbconfig.php로 따로 만들어서 include 하셨는데
    그럼 db를 닫을때는 어떻게 하나요?
    보통 연결부터 기타 작업까지 한 문서에선
    $conn = mysql_connect($server, $user, $pass);
    으로 쓰고 닫을때는
    mysql_close($conn); 이런 식으로 하던데

    include 할때는 mysql_close(); 이런식으로도 되나요?
    왕초보라 이상한질문 죄송합니다 ^^;

    • Kurien 2016.11.24 10:40 신고  댓글주소  수정/삭제

      그냥 dbconfig.php가 인크루드 된곳 기준으로 아래의 원하는 위치 어디에서든 사용하셔도 됩니다.

      하지만 PHP의 경우에는 페이지 로드가 끝나면 자동으로 mysql_close를 해주므로 크게 신경쓰실 필요는 없습니다^^

  13. PHP좋아요 2017.10.10 12:11  댓글주소  수정/삭제  댓글쓰기

    상세히 설명해주셔서 처음 접하는 사람들에게도 쉽게 다가갈 수 있어서 좋았어요!
    다시 한 번 감사드립니다~!

  14. 안녕하세요 2019.07.14 05:40  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다....db에 잘 저장되고 list가 잘 나옵니다..근데 하나씩 누락이 됩니다...3개의 게시글이 있으면 2개만 나오고... 하나더 작성을 하면 누락되었던 글이 추가가 되고 새롭게 작성한 글이 누락됩니다....어딜 손봐야될까요?

    • Kurien 2019.07.16 22:44 신고  댓글주소  수정/삭제

      말씀하신 내용만으로는 알 수 있는 부분이 제한적입니다.

      생각되는 부분은 $row = $result->fetch_assoc(); 해당 코드를 한군데 더 적어두신건 아니신지 확인해보시기 바랍니다.

  15. 전경국 2021.01.31 21:16  댓글주소  수정/삭제  댓글쓰기

    Fatal error: Call to a member function query() on null in /host/home5/joongopc/html/project/index.php on line 32
    $result = $db->query($sql); 이부분이 맴버함수가 틀리다고 나오네요.. 뭐가 틀린지 모르겠어요

  16. 가스파 2021.12.16 23:14  댓글주소  수정/삭제  댓글쓰기

    캄프누의 팀은 어려움을 겪고 있지만 이전의 구단 회장은 그들이 이 3개의 트로피를 들어올릴 것이라는 자신감이 있다.

    이전 바르셀로나의 호장 조안 가스파르트는 비록 [ https://xooxma.com/ ] 이번시즌 끔찍한 시작을 했어도 구단이 여전히 이 3개의 트로피를 들어올릴 것이라고 믿는다.

    위르겐 클롭은 브라이튼 전을 앞두고 다양한 주제의 질문에 답했다.


    리버풀은 토요일 오후, 그레이엄 포터의 안필드 방문을 환영하며 프리미어리그 무패 행진을 기대하고 있다.





    이하 경기 전 인터뷰 내용:


    리버풀이 이번 시즌 프리미어 리그에서 우승하기 위해 최선을 다해야 할지


    네, 하지만 그건 모든 팀들에게 해당되는 일이에요. 우리 뿐만이 아니죠. [ https://xooxa.xyz ] 이건 그저 리그의 수준일 뿐이며 10월 말에는 아니지만 3월, 4월 혹은 5월에는 리그 순위표에서 굉장한 높은 수준의 성과와 굉장한 일관성이 있어야 한다는걸 의미해요.


    지금 이 순간 우리가 어떻게 될 수 있을지 모르기 때문에 절대로 확신 할 수 없는것이고 그렇기에 우리가 좋은 출발을 했다는 것이 정말 중요한 이유입니다. 지금까지 우리의 출발은 좋았지만 다른 팀들도 좋은 출발을 했어요. 순위표에는 아무 일도 일어나지 않았습니다. 물론 일부 구단들은 시즌 초반에 다소 부족하다고 느꼈지만, 모두 이것이 상당히 빠르게 변할 수 있다는 것을 알고 있으며 최대한 일관된 경기를 하려 노력하고 있습니다. 그러기 위해서는 우리는 준비를 해야해요. 예를 들어 내일은 까다로운 경기 중 하나를 치룹니다. 그레이엄 포터가 브라이튼에서 하는 일과 그들의 경기 방식때문이죠. 이건 그저 프리미어리그 입니다. 어떠한 경기도 편하게 할 수 있는 경기가 없습니다. 전혀요. 항상 최선을 다해야 합니다.




    로테이션을 가동하면서도 어떻게 선수들을 행복하게 만드는지


    솔직히 말해서 그게 가능하다고 생각 안하고 제가 해냈다고도 [ https://xooxb.xyz ] 생각하지 않아요! 선수단에 있는 모든 선수들에게 물어보세요. 우리가 해야 할 일은 경기에서 이기는 겁니다. 특히 리버풀에서 뛴다면 말이죠.


    축구를 하다 보면 감독의 결정을 받아드리는 것을 일찍 배우게 되며 우리 팀은 분명히 그렇게 하고 있습니다. 그게 그들이 항상 그 결정에 기뻐한다는건 아니지만 그들은 단지 그들을 받아드립니다. 선수들이 해야 할 일은 항상 결단력이 있고, 훈련을 잘 하며, 그것을 받아 드릴때 정말 영향력이 있는 것입니다. 그건 축구에서의 합의이며 세계 각 팀들이 이행하고 여기도 마찬가지 입니다.


    저는 선수들이 행복하게 하려는 것이 아니라, 물론 행복하길 바라지만, 우리가 승점을 원하는 상대, 우리의 점수를 원하는 상대와 경기를 할 때 선수들이 화가 났으면 합니다. 단지 그게 우리가 몇 주 동안, 그리고 몇 달 동안 하는일이고 그게 우리가 처한 상황입니다. 아직 아무일도 없지만 이제 매치데이 10일차 입니다. 봐봐요, 이후에 28 경기가 올 예정인데 당연히 아무 일도 없어야죠!


    지금까지는 괜찮은 출발이지만 시작부터 안좋은 것도 있었고 결과적으로 많이 좋지 않은것도 있었을수도 있었기에 우리는 전부 행복하지 않은 순간들을 겪었습니다. 그래서 우리는 계속 개선해야 할 것이 있고 그게 우리가 걱정하는것 뿐입니다. 우리가 우스꽝스러운 결과로 경기에서 이겼다 것, 혹은 ‘좋아, 어떻게 그런 일이 계속 일어날 수 있는거지?’ 라고 생각하는 겁니다. 그런것은 아닐것이고 그렇게 생각할 만큼 어리석지 않습니다.


    축구 경기에서 이기기 위해서는 무엇보다도 수비할 준비가 되어 있는지 [ https://xooxc.xyz ] 확인해야 하며, 그게 우리가 내일 다시 할것입니다. 나머지는 그걸 어떻게 세워가는지에 따라 달렸고 어떻게 할 지 지켜봐야죠.


    지난주 브라이튼과 맨시티 경기를 보셨을지 모르겠네요. 점수판은 꽤 확실한 것 같고 전반전에는 맨시티가 정말 잘했습니다. 하지만 전반전에 두 골은 역습골들이었고 점유율을 보자면 제가 확실하다면 52:48였어요. 그건 축구적인 모습이며 그저 경기를 하는게 아닌 브라이튼은 정말 위협적이에요. 그들은 창조적이려 노력하고 수비도 잘합니다. 저는 그들이 아직 믿을 수 없을 만큼 많이 득점 하지 못했다고 생각하며 지난 경기에서 9골을 넣고 4골만 내줬습니다. 실점 관점에서는 굉장히 이상한거죠. 아마 첫 골은 골키퍼의 파울이 될 수 있었고 그러면 경기가 어떻게 될지는 모르는거죠.


    후반전도 봤으며 그들은 대단했어요. 맨시티 상대로 그들처럼 공을 유지하고 패스를 한다는건 정말 어려운일이지만 그들은 해냈어요. 그러니 브라이튼이 무엇을 할 수 있는지 알고 있지만, 우리는 맨시티가 아닙니다. 그리고 우리는 분명히 약간 다르게 경기를 해요. 맞습니다, 그게 우리가 하고 싶은거에요. 우리는 그들에게 문제가 되고 싶어요. 지난 브라이튼과의 경기에서 졌으니 이건 또 다른 경고 신호입니다. 제가 필요로 하는건 아니만요. 허나, (저번 시즌과 다르게) 가장 큰 차이점은 안필드는 꽉 찰것이고 평소처럼 우리를 도와줄겁니다. 하지만 혼자가 아니라, 우리는 정말 잘 해야 하고 정확한 이해도를 가진 사람들이 필요합니다.


    이번 경기는 상대방을 지배하거나 그런 경기를 하는게 아니에요. 그들은 피하지 않는 순간을 마주할겁니다. 그게 브라이튼의 퀄리티에 대한 모든것을 알려줍니다. 그들의 순간을 브라이튼은 가질것이며 우리는 많이 뛰어야 하고 간격을 좁혀야 하며 정말 정확하게 수비해야 하며 공을 가지고 있을때도 마찬가지 입니다. 그러니 이 경기는 힘들겠지만 저는 기대중이며 그레이엄이 하고 있는것을 더 존경 할 수 없을 만큼 존경 하고 있습니다. 그가 부임하고 항상 어려운 경기를 치뤘으며 그가 탑클래스 감독이라고 할 수 밖에 없습니다. 그 외에는 할 말이 없네요.

  17. 밤이슬 2021.12.31 16:32  댓글주소  수정/삭제  댓글쓰기

    일산순수 일산오피 밤문화 하드코어 밤이슬 https://www.bam-is.com

    일산순수 일산오피 하드코어오피 일산마사지 밤문화

    일산유흥 순수할인 이벤트 위치 가격 정보 일산휴게텔

    각종 업체 가격 위치 확인 할인쿠폰

  18. 밤이슬 2022.01.01 14:47  댓글주소  수정/삭제  댓글쓰기

    강남킹스팬 강남오피 킹스맨오피 하드코어 밤이슬 https://www.bam-is.com

    강남킹스맨 킹스맨오피 하드코어오피 밤이슬

    전국 휴게텔 마사지 스파 위치 가격 이벤트

    웹툰 각종 링크제공 링크모아

    각종 업체 가격 위치 확인 할인쿠폰

  19. 밤이슬 2022.01.07 01:41  댓글주소  수정/삭제  댓글쓰기

    일산오피 강남오피 분당오피 휴게텔 가격위치 밤이슬

    https://www.bam-is.com

    파워볼사이트 파워볼배팅 https://powerballgaming.com/

    전국 휴게텔 안마방 출장안마 마사지 위치 정보 할인이벤트

    풀싸롱 . 강남유흥 선릉풀싸롱 정자오피 분당오피 서현오피

    분당휴게텔 . 서현휴게텔 선릉오피 강남오피 일산오피

    일산휴게텔 @ 정자휴게텔 안마방 분당안마 출장안마

  20. 밤이슬 2022.01.10 04:27  댓글주소  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  21. 밤이슬 2022.01.16 15:11  댓글주소  수정/삭제  댓글쓰기

    강남오피 일산오피 서울출장 분당오피 출장마사지 가격위치 밤이슬

    https://www.bam-is.com

    @ 파워볼사이트 파워볼배팅 https://powerballgaming.com @

    전국 @휴게텔 안마방 서울경기 출장안마 마사지 위치 정보 할인이벤트

    풀싸롱 . 강남유흥 선릉풀싸롱 정자오피 분당오피 서현오피

    분당휴게텔` . @서현휴게텔1 선릉오피 풀싸롱 강남오피 일산오피

    일산휴게텔 @ 정자휴게텔 안마방 @ 분당안마 출장안마 0