👾 php

php, json 사용해서 정해진 갯수로 리스트 불러오고, 파라미터로 각 상세페이지 만들기

(。θᗨθ。) 2023. 9. 4. 16:11

data.json 파일

[
  {
    "target": "first",
    "name": "1번 이름",
    "homepage": [
      {
        "link": "https://www.naver.com",
        "description": "1번 설명",
        "date": "1번 날짜"
      }
    ]
  },
  {
    "target": "second",
    "name": "2번 이름",
    "homepage": [
      {
        "link": "https://www.google.com",
        "description": "2번 설명",
        "date": "2번 날짜"
      }
    ]
  },
  {
    "target": "third",
    "name": "3번 이름",
    "homepage": [
      {
        "link": "https://www.naver.com",
        "description": "3번 설명",
        "date": "3번 날짜"
      }
    ]
  },
  {
    "target": "fourth",
    "name": "4번 이름",
    "homepage": [
      {
        "link": "https://www.daum.net",
        "description": "4번 설명",
        "date": "4번 날짜"
      }
    ]
  },
  {
    "target": "fiveth",
    "name": "5번 이름",
    "homepage": [
      {
        "link": "https://www.google.com",
        "description": "5번 설명",
        "date": "5번 날짜"
      }
    ]
  },
  {
    "target": "sixth",
    "name": "6번 이름",
    "homepage": [
      {
        "link": "https://www.kakao.com",
        "description": "6번 설명",
        "date": "6번 날짜"
      }
    ]
  },
  {
    "target": "seventh",
    "name": "7번 이름",
    "homepage": [
      {
        "link": "https://www.daum.net",
        "description": "7번 설명",
        "date": "7번 날짜"
      }
    ]
  },
  {
    "target": "eighth",
    "name": "8번 이름",
    "homepage": [
      {
        "link": "https://www.naver.com",
        "description": "8번 설명",
        "date": "8번 날짜"
      }
    ]
  },
  {
    "target": "nineth",
    "name": "9번 이름",
    "homepage": [
      {
        "link": "https://www.daum.net",
        "description": "9번 설명",
        "date": "9번 날짜"
      }
    ]
  },
  {
    "target": "tenth",
    "name": "10번 이름",
    "homepage": [
      {
        "link": "https://www.nate.com",
        "description": "10번 설명",
        "date": "10번 날짜"
      }
    ]
  },
  {
    "target": "eleventh",
    "name": "11번 이름",
    "homepage": [
      {
        "link": "https://www.naver.com",
        "description": "11번 설명",
        "date": "11번 날짜"
      }
    ]
  },
  {
    "target": "twelveth",
    "name": "12번 이름",
    "homepage": [
      {
        "link": "https://www.nate.com",
        "description": "12번 설명",
        "date": "12번 날짜"
      }
    ]
  },
  {
    "target": "thirteenth",
    "name": "13번 이름",
    "homepage": [
      {
        "link": "https://www.google.com",
        "description": "13번 설명",
        "date": "13번 날짜"
      }
    ]
  }
]

 

 

index.php 파일

<?
  $jsonUrl = 'data.json'; //data.json 파일 위치
  $getData = file_get_contents($jsonUrl); //json 내용 불러옴
  $datas = json_decode($getData, true); //php에서 json 읽을 수 있도록
?>

<style>
  table {
    border: 1px solid black;
  }
  td {
    border: 1px solid black;
  }
  .pagination {
    padding-top: 20px;
  }
  .pagination form {
    display: flex;
  }
  .pagination input {
    padding: 0 10px;
    font-weight: bold;
    display: block;
  }
</style>

<table>
  <thead>
    <tr>
      <th>고객사</th>
      <th>주소</th>
      <th>날짜</th>
    </tr>
  </thead>
  <tbody>
    <?
        if(array_key_exists('page', $_POST)){
          printpage($_POST['page']);
        } else {
          printpage(1);
        }
        
        function printpage(int $page){
          global $datas; //전역변수로 사용
          $page = ($page - 1) * 5; //페이저 밸류 받아서 계산 됨
          $count = count($datas); //데이터 갯수

          for ($i = $page; $i < $page + 5; $i++) { 
              if($i > $count - 1){ //데이터 갯수 넘어가면 tr출력 안되도록
              } else { ?>
                <tr>
                  <td><?=$datas[$i]['name']?></td>
                  <td><a href="detail.php?target=<?=$datas[$i]['target']?>">자세히 보기</a></td>
                  <td><?=$datas[$i]['homepage'][0]['date']?></td>
                </tr>  
              <? } ?>
           <? } 
        }
    ?>

  </tbody>
</table>

<div class="pagination">
  <?
    $count = count($datas) - 1;
    $pageNum = ($count - $count % 5) / 5 + 1 ;
  ?>
    <form method="post">
      <?
        for($i = 1; $i <= $pageNum; $i = $i+1) {
          echo "<input type='submit' name='page' value='$i'/>";
        }
      ?>
    </form>
</div><!-- .pagination -->

 

 

detail.php 파일

<?

$jsonUrl = 'data.json';
$getData = file_get_contents($jsonUrl);
$datas = json_decode($getData, true);

?>

<style>
  table {
    border: 1px solid black;
  }
  td {
    border: 1px solid black;
  }
</style>
<h1>Target: <?php echo $_GET['target']?></h1>
<table>
  <thead>
    <tr>
      <th>고객사</th>
      <th>링크</th>
      <th>설명</th>
      <th>날짜</th>
    </tr>
  </thead>
  <tbody>
    <?
    foreach ($datas as $data) { 
      if($data['target'] == $_GET['target']) { ?>
      <tr>
        <td><?=$data['name']?></td>
        <td><a href="<?=$data['homepage'][0]['link']?>" target="_blank">이동하기</a></td>
        <td><?=$data['homepage'][0]['description']?></td>
        <td><?=$data['homepage'][0]['date']?></td>
      </tr>    
    <? }
    } ?>
  </tbody>
</table>
<button onclick="history.back()">뒤로가기</button>

 

728x90