반응형

[Project 3] 게시판 검색 기능 추가하기[첨부파일]


htdocs.zip

 

Project 2  에서 했던 것에 이어 붙이면 된다. 아~주 쉽다!

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
<html>
<head>
    <meta charset="utf-8"/>
    <title>File Manager</title>
</head>
<body>
<?php
 
$host = 'localhost';
$user = 'root';
$pw = '111111';
$dbName = 'opentutorials';
$mysqli = new mysqli($host$user$pw$dbName);
 
 
 
 if(mysqli_connect_errno())
        {
            echo "DB connect error";
        }
 
//검색옵션 관련

        $search_option = $_POST[search_option];
        $keyword = $_POST[keyword];
        
        if(strlen($keyword> 0) {
            switch ($search_option) {
            case "all"
                $sql = "SELECT *FROM a 
                                          WHERE  (subject LIKE '%$keyword%') OR (memo LIKE '%$keyword%') 
                                     ORDER BY num DESC";
              break;
            case "title":
                $sql = "SELECT *FROM a 
                                          WHERE  subject LIKE '%$keyword%' 
                                     ORDER BY num DESC";
               break;
            case "name":
                $sql = "SELECT *FROM a 
                                          WHERE  id LIKE '%$keyword%' 
                                     ORDER BY num DESC";
               break;
           }
           $res = $mysqli->query($sql);
            $num_result = $res->num_rows;
           
        } else
            
        
        //DB로부터 값을 가져온다.
 
 
        
        $sql = "select * from a";
        $res = $mysqli->query($sql);
        $num_result = $res->num_rows;
    ?>

    
    
    <table border='1' align="center">
        <thead>
            <tr>
                <th width="50">NUM</th>
                <th width="250">FILE</th>
                <th width="200">TIME</th>
                <th width="50">id</th>
                <th width="70">subject</th>
                <th width="250">memo</th>
                <th width="70">DOWN</th>
                <th width="50">DEL</th>
                
 
            </tr>
        </thead>
        <tbody>
            <?php
                for($i=0$i<$num_result$i++)
                {
                    $row = $res->fetch_assoc();
                    echo "<tr>";
                    echo "<td align='center'>".$row['num']."</td>";
                    echo "<td align='left'>
                <a href='./download.php?num=".$row['num']."'>".$row['name']."</a></td>";
                    echo "<td align='center'>".$row['time']."</td>";
                    echo "<td align='center'>".$row['id']."</td>";
                    echo "<td align='center'>
                <a href='./view.php?num=".$row['num']."'>".$row['subject']."</a></td>";    
                    echo "<td align='center'>".$row['memo']."</td>";
                    echo "<td align='center'>".$row['down']."</td>";    
                    echo "<td align='center'>
                <a href='./delete.php?num=".$row['num']."'>DEL</a></td>";                    
                    echo "</tr>";
                }
              mysqli_close($mysqli);
 
              
            ?>
            <input type = "button" name = "table" value ="글쓰기" onclick = "location.href='table.php'";>
            
       
 <!-- 검색 기능 -->

        <form name="search_form" action="index.php" method="post">
        <table>
        <tr>
            <td align="center">
            <select name="search_option" size="1">
            <? 
                    $option_list = array('all'=>'제목+내용''title'=>'제목''name'=>'작성자');
                    
                    while(list($option$value= each($option_list)) {
 
                        echo "<option value=\"$option\">$value</option>";
 
                    }
            ?>
            </select>
            <input type="text" name="keyword" value="<? echo $keyword ?>"><input type="submit" name="search_btn" value="검색">
            </td>
        </tr>
        </table>
        </form>
        
    <!-- 검색 기능 end -->


         
            
        </tbody>
    </table>
 
</body>
</html>
cs
 
 
아래 부터 보면, 
html의 <select> tag는 select tag와 option tag로 구성됩니다.
만약
<select>

  <option value="a">a</option>
  <option value="b">b</option>
  <option value="c">c</option>
  <option value="d">d</option>
</select>

이렇게 되어있다면, 

결과로 

 

이렇게 나타납니다.

 

그런데 이부분을보면

 

<select name="search_option" size="1">
            <? 
                    $option_list = array('all'=>'제목+내용''title'=>'제목''name'=>'작성자');
                    
                    while(list($option$value= each($option_list)) {
 
                        echo "<option value=\"$option\">$value</option>";
 
                    }
            ?>
            </select>

 

option_list 배열로 주었습니다.
[all] => 제목+ 내용
[title] => 제목
[name] = 작성자
 
이렇게 배열로 들어갑니다.
 
 
그리고 그 배열을 다시 
list($option$value= each($option_list)
option_list배열을 list함수(배열 조작 함수)로 $option, $value(키와 배열)로 나누는 것 입니다.
option에는 all, title, name
value에는 제목+ 내용 , 제목, 작성자
 
echo "<option value=\"$option\">$value</option>";
이것은 value변수에 저장된 배열을 옵션으로 내보냅니다.
 
그리고 while(반복)문을 써서 반복시켜줍니다.
 
풀어 쓰면 이런 모습입니다.

<select>

  <option value="all">제목+ 내용</option>

  <option value="title">제목</option>

  <option value="name">작성자</option>

</select>

 
 
그렇기 때문에 
결과는 다음과 같습니다.
 

 

 
 
 
 
 
 
 
그리고 윗부분을 보겠습니다. 이부분은 하단부에서 select로 받아온 것을 처리 해주는 부분입니다.

//검색옵션 관련

        $search_option = $_POST[search_option];
        $keyword = $_POST[keyword];
        
        if(strlen($keyword> 0) {
            switch ($search_option) {
            case "all"
                $sql = "SELECT *FROM a 
                                          WHERE  (subject LIKE '%$keyword%') OR (memo LIKE '%$keyword%') 
                                     ORDER BY num DESC";
              break;
            case "title":
                $sql = "SELECT *FROM a 
                                          WHERE  subject LIKE '%$keyword%' 
                                     ORDER BY num DESC";
               break;
            case "name":
                $sql = "SELECT *FROM a 
                                          WHERE  id LIKE '%$keyword%' 
                                     ORDER BY num DESC";
               break;
           }
           $res = $mysqli->query($sql);
            $num_result = $res->num_rows;
           
        } else
            
        
        //DB로부터 값을 가져온다.
 
 
        
        $sql = "select * from a";
        $res = $mysqli->query($sql);
        $num_result = $res->num_rows;
    ?>

 

 

 

 

하단부분을 띄어서 보면 하단부에서 값을 받아오고,

<select name="search_option" size="1">

<input type="text" name="keyword" value="<? echo $keyword ?>"><input type="submit" name="search_btn" value="검색">

 

이렇게 받아온값들을 상단부에서 처리합니다.

 

 
$search_option = $_POST[search_option];
        $keyword = $_POST[keyword];
 

 

 if(strlen($keyword> 0) {

만약 글자수가 0보다 크다면(공백이아니라면)

switch ($search_option) {
            case "all"
                $sql = "SELECT *FROM a 
                                          WHERE  (subject LIKE '%$keyword%') OR (memo LIKE '%$keyword%') 
                                     ORDER BY num DESC";
              break;
            case "title":
                $sql = "SELECT *FROM a 
                                          WHERE  subject LIKE '%$keyword%' 
                                     ORDER BY num DESC";
               break;
            case "name":
                $sql = "SELECT *FROM a 
                                          WHERE  id LIKE '%$keyword%' 
                                     ORDER BY num DESC";
               break;

이것을 실행시키고

 

LIKE '%$keyword%' 이것은, keword가 포함되어있는지에 대한 조건입니다.

 

select * from table a where name like '김영수%'
김영수로 시작하는 모든 값을 검색
select * from table a where name like '%김영수'
김영수로 끝나는 모든 값을 검색
select * from table a where name like '%김영수%'
김영수가 들어있는 모든 값을 검색

 

ORDER BY num DESC

SELECT문으로 검색된 데이터를 오름차순(ASC)이나 내림차순(DESC)으로 정렬 시킬 때 사용합니다.

Default값은 Ascending(오름차순)으로써 ASC는 생략해도 되며, 문자는 알파벳 순서로 출력된다.

오름차순 : 작은 값부터 큰 값 쪽으로의 순서 ex)1, 2, 3, 4, n, n+1...

내림차순 : 큰 값부터 작은 값 쪽으로의 순서 ex)5, 4, 3, 2, 1

 

 

 

 

 

 

그렇지않다면,

$sql = "select * from a";
        $res = $mysqli->query($sql);
        $num_result = $res->num_rows;

이것을 실행시킵니다.

 

 

 

 

결과입니다.

 

 

 

 

 

 
htdocs.zip
0.17MB
반응형

+ Recent posts