[PHP] 목록리스트와 페이징 2 - 검색
[PHP] 목록리스트와 페이징 2 - 검색
게시판에서 아이디, 이름, 주소로 검색이 가능하고
페이징기능, 검색된 리스트의 갯수 수정 등이 가능하다.
point
검색을 하면 get방식으로 mode=search를 넘겨준다. (form action)
mode=search일 때 $sql 문이 달라지게 if문을 설정한다.
사용되는 변수
- 레코드 총 개수:
$total_record = mysql_num_rows($result);// 35 - 한 페이지 내 리스트 개수:
$scale = 10 - 리스트 총 번호:
$total_page = floor($total_record/$scale);// 4 - 리스트 일련번호:
$number = 1 - 페이지번호:
$page = 1 - 레코드 인덱스 번호:
$start = ($page - 1) * $scale// 10 - 일련 시작번호:
$number = $total_record - $start// 25
검색관련
- method = post (GET)
- action = list2.php?mode=search (POST)
- $find = id / name / address (select) (POST)
- $search = input value (검색어) (POST)
페이지 번호 별 변수 값
- $page = 1;
- 페이지번호: $page = 1
- 레코드 인덱스 시작번호: $start = 0
- 일련시작번호: $number = 35
- $page = 2;
- 페이지번호: $page = 2
- 레코드 인덱스 시작번호: $start = 10
- 일련시작번호: $number = 25
- $page = 3;
- 페이지번호: $page = 3
- 레코드 인덱스 시작번호: $start = 20
- 일련시작번호: $number = 15
- $page = 4;
- 페이지번호: $page = 4
- 레코드 인덱스 시작번호: $start = 30
- 일련시작번호: $number = 5
membership.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
create table membership (
id varchar(10) not null,
name varchar(10) not null,
post_num char(8),
address varchar(80),
tel varchar(20),
age int,
primary key(id)
);
insert into membership values ('yjhwang', '황영주', '100-011', '서울시 중구 충무로1가', '234-8879', 35);
insert into membership values ('khshul', '설기형', '607-010', '부산시 동래구 명륜동', '764-3784', 33);
insert into membership values ('chpark', '박철호', '503-200', '광주시 남구 지석동', '298-9730', 34);
insert into membership values ('shlee', '이상훈', '503-201', '광주시 남구 도금동', '838-4347', 32);
insert into membership values ('jyjang', '장영숙', '606-065', '부산시 영도구 봉래동5가', '399-9809', 24);
insert into membership values ('yjbae', '배용진', '122-014', '서울시 은평구 응암4동', '857-5683', 30);
insert into membership values ('hbpark', '박혜빈', '427-760', '경기도 과천시 중앙동', '234-7677', 22);
insert into membership values ('mskim', '김문수', '429-020', '경기도 시흥시 신천동', '370-6003', 63);
insert into membership values ('bkcha', '차범길', '302-121', '대전시 서구 둔산1동', '432-9877', 49);
insert into membership values ('kskim', '김길수', '440-747', '경기도 수원시 장안구 파장동', '324-5875', 54);
insert into membership values ('srkim', '김수련', '704-701', '대구시 달서구 신당동', '987-3688', 23);
insert into membership values ('sunglee', '이성현', '441-081', '경기도 수원시 권선구 매산로1가', '243-6844', 36);
insert into membership values ('hnjang', '정한나','502-763', '광주시 서구 화정4동', '845-4547', 58);
insert into membership values ('mylee', '이명연', '502-791', '광주시 서구 쌍촌동', '837-9432', 33);
insert into membership values ('yskim', '김영숙', '429-010', '경기도 시흥시 대야동', '374-8438', 53);
insert into membership values ('jekim', '김정은', '503-202', '광주시 남구 원산동', '347-8873', 29);
insert into membership values ('yjko', '고영주', '122-020', '서울시 은평구 녹번동', '479-3874', 32);
insert into membership values ('cyahn', '안철영', '122-030', '서울시 은평구 대조동', '347-4687', 34);
insert into membership values ('jmkim', '김진모', '530-140', '전라남도 목포시 항동', '379-8349', 28);
insert into membership values ('ycshul', '설영찬', '606-070', '부산시 영도구 청학동', '983-8748', 41);
insert into membership values ('jjko', '고재진', '100-013', '서울시 중구 충무로3가', '836-4655', 28);
insert into membership values ('hwlee', '이현우', '606-071', '부산시 영도구 청학1동', '346-8892', 32);
insert into membership values ('cskang', '강찬숙', '668-890', '경상남도 남해군 설천면', '377-6879', 21);
insert into membership values ('ypji', '지영필', '122-040', '서울시 은평구 불광동', '366-3747', 52);
insert into membership values ('jbkim', '김진배', '427-600', '경기도 과천시 과천동', '382-4993', 47);
insert into membership values ('jepark', '박지은', '670-800', '경상남도 거창군 거창읍', '328-8743', 26);
insert into membership values ('jhlee', '이지현', '704-702', '대구시 달서구 월성동', '386-7988', 27);
insert into membership values ('bykang', '강부영', '302-120', '대전시 서구 둔산동', '798-3243', 62);
insert into membership values ('jymoon', '문진영', '302-122', '대전시 서구 둔산2동', '987-3248', 18);
insert into membership values ('jyjun', '전지연', '100-012' , '서울시 중구 충무로2가', '347-2236', 28);
insert into membership values ('jkko', '고진길', '122-013', '서울시 은평구 응암3동', '234-7466', 27);
insert into membership values ('myjung', '정명윤', '502-771', '광주시 서구 치평동', '374-8786', 47);
insert into membership values ('jsyou', '유지수', '502-772', '광주시 서구 치평동', '309-3897', 49);
insert into membership values ('dsshin', '신달성', '530-145', '전라남도 신안군 장산면', '399-8789', 53);
insert into membership values ('sjshin', '신수진', '606-796', '부산시 영도구 봉래동5가', '389-8930', 47);
list2.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{margin:0; padding:0}
body{padding:50px;}
#list_search1{margin:20px}
table{ border-collapse:collapse; width:700px;}
th{ background:#FC0; border:1px solid #ccc; padding:3px}
td{ border:1px solid #ccc; padding:3px}
</style>
<?
@extract($_POST);
@extract($_GET);
// $page = $_GET["page"];
/*
검색을 통한 리스트 출력
$mode = search (get) $_GET["mode"]
$find = address (post) $_POST["find"]
$search = 부산 (post) $_POST["search"]
*/
$connect = mysql_connect("localhost","song","1234"); // song 계정으로 접속
$db_con = mysql_select_db("song_db", $connect); // song_db 데이터베이스 선택
if ($mode=="search"){ //검색모드
if(!$search){ //검색값이 입력되지 않았을때. 경고창 띄우고 이전화면으로 돌아간다.
echo("
<script>
window.alert('검색할 단어를 입력해 주세요!');
history.go(-1);
</script>
");
exit;
}
//검색 form에서 $find(select), $search(input.value)가 넘어온다.
$sql = "select * from membership where $find like '%$search%'";
}else{ // 글 목록보기 모드 (검색이 아닌 일반 글 목록보기)
$sql = "select * from membership"; // sql 명령어 저장
}
$result = mysql_query($sql,$connect); // sql 명령어 실행
$total_record = mysql_num_rows($result); // 전체 글 수 저장
if (!$scale){
$scale = 10; // 한 화면에 표시되는 글 수, scale값이 없으면 10
}
$number = 1; //일련번호를 나타내는 변수 1로 초기화
// 전체 페이지 수($total_page) 계산
if ($total_record % $scale == 0){ //10의 배수
$total_page = floor($total_record/$scale); // 30개의총레코드/10개씩 출력 (3페이지)
}else{
$total_page = floor($total_record/$scale) + 1; // 35/10=3 3+1 (4페이지)
}
if (!$page){ // 페이지번호($page)가 0 일 때
$page = 1;
// 게시글이 10보다작다면 페이지번호를 나타내는 변수$page 가 0이다. 페이지 번호를 1로 초기화
}
// 표시할 페이지($page)에 따라 $start 계산
$start = ($page - 1) * $scale; //해당 페이지의 시작 페코드 번호를 나타내는 변수 $start 를 설정
$number = $total_record - $start; //글번호를 의미하는 변수 $number를 구한다.
// 전체 글수가 35개이고 한페이지에 10개씩 출력되면 첫번째 페이지에는 글번호 35~26이
// 두번째 페이지에는 25~16, 세번째 페이지에는 15~6, 네번째 페이지에는 5~1 이 표시된다.
?>
</head>
<body>
<form name="board_form" method="post" action="list2.php?mode=search">
<div id="list_search1">
▷ 총 <?= $total_record ?> 개의 게시물이 있습니다.
<select name="find">
<option value='id'>아이디</option>
<option value='name'>이름</option>
<option value='address'>주소</option>
</select>
<input type="text" name="search">
<input type="submit" value="검색">
</div>
</form>
<div>
<select name="scale" onchange="location.href='list2.php?scale='+this.value">
<option value=''>리스트보기 : <?=$scale?></option>
<option value='5'>5</option>
<option value='10'>10</option>
<option value='20'>20</option>
<option value='25'>25</option>
</select>
</div>
<table>
<thead>
<tr>
<th scope="col">일련번호</th>
<th scope="col">아이디</th>
<th scope="col">이름</th>
<th scope="col">우편번호</th>
<th scope="col">주소</th>
<th scope="col">전화번호</th>
<th scope="col">나이</th>
</tr>
</thead>
<tbody>
<?
for ($i=$start; $i<$start+$scale && $i < $total_record; $i++){
// $start=>0이면 for ($i=0; $i<10 && $i < 35; $i++)
// 현재 페이지에 해당하는 글 목록을 출력한다
mysql_data_seek($result, $i); // 가져올 레코드로 위치(포인터) 이동
$row = mysql_fetch_array($result); // 하나의 레코드 가져오기
$item_id = $row[id];
$item_name = $row[name];
$item_post = $row[post_num];
$item_address = $row[address];
$item_tel = $row[tel];
$item_age = $row[age];
?>
<tr>
<td><?= $number ?></td>
<td><?= $item_id ?></td>
<td><?= $item_name ?></td>
<td><?= $item_post ?></td>
<td><?= $item_address ?></td>
<td><?= $item_tel ?></td>
<td><?= $item_age ?></td>
</tr>
<?
$number--; // 글번호 값을 1씩 감소..
}
?>
</tbody>
<tfoot>
<tr>
<td colspan="7" style="text-align:center">
◀ 이전
<?
// 게시판 목록 하단에 페이지 링크 번호 출력
for ($i=1; $i<=$total_page; $i++){
if ($page == $i){ // 현재 페이지 번호 링크 안함
echo "<b> $i </b>";
}else{
echo "<a href='list2.php?page=$i&scale=$scale'> $i </a>";
//나머지페이지는 해당 페이지 번호로 링크를 연결
}
}
mysql_close(); // 데이터베이스 접속 종료
?>
다음 ▶
</td>
</tr>
</tfoot>
</table>
</body>
</html>
This post is licensed under CC BY 4.0 by the author.