[PHP 7] 북마크 프로그램 만들기 🔖

김와앙·2023년 10월 23일

PHP 7

목록 보기
12/20

원하는 주소를 저장하는 프로그램 : 북마크 만들기

🗂️ 구상

  • index.php = 첫 화면, 북마크 된 것들 리스트업
  • add.php = 원하는 주소 입력 후 저장
  • addProc.php = 주소 DB 저장 과정 처리
  • del.php = 삭제용
  • go.php = 방문 횟수 처리

index.php

:리스트 업 화면

 <a href="add.php">북마크 추가</a>

-add 로 넘어가게 하면 된다. 북마크 주소를 추가할 수 있도록!

add.php

: 입력 창!

-저장하기를 누르면 addProc 으로 넘어가며 입력한 text (주소)가
POST 방식, 폼 방식으로 넘어가게 된다.

addProc.php

print_r($_POST);

=>잘 넘어오는 지 확인

POST 로 넘어온 데이터를 출력할 수있다.
잘출력됨 => 잘넘어옴.

DB 만들기

: 데이터 들어가는 저장소 만들기 !!

Text 로 입력된 주소 -> 잘 정리해서 데이터 베이스 url 에 넣어줘야함.

엔터키를 기준으로 세개의 주소를 넣어줬는데, 저장하기를 누른뒤
addProc.php 에 넘어온 값을 확인해보면

\r\n 으로 구분이 되어지는 걸 볼 수있음.
따라서 이걸 기준으로 나누어 정리해본다.

정리할 때 => explode 함수 사용

  $list = explode('\r\n', $memo);

   print_r($list);

기준에 맞추어 문자열이 나누어져 배열로 잘 나뉘어졌다.

✏️explode() 함수 : 문자열을 특정 문자열로 나누어 배열로 만들어주는 함수

이제 정리를 했으니 저장을 해준다.

✏️ foreach 반복문

  • 다른 제어문과 다르게 '배열'에만 동작하는 함수이다.
  • 배열의 키와 value 값을 구분하여 사용가능하게 해준다.
  • 배열의 데이터를 가져올 때 주로 많이 사용하는 함수.
 foreach ($list as $url){
        echo "<li>";
        echo $url;
    } //데이터 가져오기

foreach문을 사용 -> 데이터 분리 -> 리스트 형식으로 정리.

데이터 DB에 삽입 & 연결

 $query = "insert into bookmark(url, regedate) values('$url', now())";

        mysqli_query($connect, $query);

데이터가 들어감 (DB 에)

index.php - 데이터 나타내기

: 저장한 북마크 url 불러와서 내역으로 보여주기

✏️ mysqli_fetch_array () 함수 : mysql 에서 데이터를 배열형태로 가져오게 하는 함수.

= mysqli_fetch_assoc() 함수도 거의 동일하게 사용 가능하다.

테이블 내에 정렬해야 되기 때문에 테이블 태그 안에다가 넣어줘야함

 while ($row = mysqli_fetch_assoc($result)) {
            ?>
            <tr>
            
             <td><?=$row['idx']?></td>
            
        
             <td><?=$row['url']?></td>
            
        
             <td><?=$row['regedate']?></td>
            </tr>
       <?php }?>
   
   

결과 :
저장한 북마크 리스트가 불러와짐

 <td>
            <a href="<?=$row['url']?>" target="_blank"> 
             <?=$row['url']?></a>
            
             </td>
            

링크를 누르면 실제 그 사이트로 접속할 수 있게 할 땐
a 태그로 url 데이터를 넣어주면 됨.

target = "_blank" : url 접속시 새창을 띄워줌.

del.php

: 저장한 북마크 삭제하기

<td><a href="del.php?idx=<?=$row['idx']?>" 
onclick="return confirm('정말 삭제하시겠습니까?')">삭제</a></td>

삭제칸 생성.
onclick = 눌렀을 때 삭제할 지 물어보고 삭제

<?php

    include "lib.php";

    $idx = $_GET['idx'];
    $idx = mysqli_real_escape_string($connect, $idx);

    $query = "delete from bookmark where idx='$idx'";

    $result = mysqli_query($connect, $query);   


    ?>


<script>
    location.href="index.php";
</script>

링크의 중복 및 빈 공백 거르기

링크가 중복적으로 들어가는 경우와
공백을 링크로 인식하는 걸 거르기

공백 거르기 : addProc.php

trim () 함수 : 문자열의 공백을 없애주는 함수

$url = trim($url);
        if(!$url) continue;

url 데이터를 받을때 공백을 없애주고,
만약에 url 자체가 없으면 아예 다음으로 넘어가지 않고 다시 반복문으로 돌아감

  • continue & break 제어문
    continue : 잔여 코드 건너 뛰고 반복문 처음으로 돌아가게 하는 함수
    break : 코드 블록 걍 탈주

중복 거르기 : addProc.php

: 데이터를 DB에 저장하기 전에 싹 불러와서 비교대조한다음
같으면 넣지 않고, 다르면 넣는 방식으로 진행.

  $query = "select * from bookmark";
        $result = mysqli_query($connect, $query); 
        $row = mysqli_fetch_array($result);

        if($row['idx']){
            continue;
        }

같은게 있으면 반복문 맨처음으로 돌아가도록 한다. (다음으로 넘어감)

북마크 주소에 대한 방문횟수 기능 추가하기

: url 을 방문할 때마다 방문횟수가 증가하도록.

DB에 방문횟수를 넣을 데이터 변수 하나를 추가로만들어준다.
(이번엔 'cnt' 라는 변수로 새로 추가해줌)

대충 구성을 해준다.

방문횟수 추가를 위해서는 url을 눌러서 그 페이지로 넘어가기 전에
작업을 해줘야한다.

기존에 바로 url 주소로 넘어갔던 것을
go.php 로 넘어가도록 설정해준다.

 <a href="go.php?idx=<?= $row['idx']?>" target="_blank"> 
             <?=$row['url']?></a>

**

+) GET POST **
폼 액션 태그로 넘어가면 주로 POST 방식,
a 태그를 통해 ?__ 이런식으로 주소로 넘어가는 경우 GET 방식이다.

go.php

: 방문횟수 처리

<?php 

    include "lib.php";

    $idx = $_GET['idx'];
    $idx = mysqli_real_escape_string($connect, $idx);

    $query = "select * from bookmark where idx='$idx'";
    $result = mysqli_query($connect, $query); 
    $row = mysqli_fetch_array($result);

    $query ="update bookmark set cnt=cnt+1 where idx='$idx'";
    $result = mysqli_query($connect, $query);   


    ?>

 

<script>
    location.href="<?=$row['url']?>";
</script>
  • 데이터베이스에 cnt 변수 추가시 북마크 추가가 기능하지 않음 오류

쿠키를 활용해서 중복 방문횟수 처리하기

profile
greedy college ssu.tudent 👩‍🎓

0개의 댓글