C-log

⚡PHP change_id 본문

Server/⚡ver0

⚡PHP change_id

4:Bee 2023. 10. 21. 02:09
728x90

php로 페이지를 나누어서 우리가 각 URL의 id값을 변경하는 것처럼 보이게 코드들을 작성 하였다. 결국에는 페이도 코드도 정적인 것이다. 이것을 우리가 조금 이라도 말랑한 동적인 코드로 변환 시켜 보려고 한다. 웹페이지에서 버튼을 누르면 id의 값이 변경되는 것이다. 그래서 js코드를 활용해서 코드를 작성해 볼 것이다. 이 코드는 js 스크립트를 따로 작성하지 않고 HTML코드 내부에서 script태그를 이용해서 작성해 볼 것이다. 아래 전체 코드를 살펴 보자.

js_id_another.php

<!DOCTYPE html>
<html>

<head>
  <title>Change PHP URL ID Example</title>
</head>

<body>
  <button onclick="changeURLId()">Change URL ID</button>

  <script>
    let currentURL = window.location.href;
    console.log(currentURL);

    function changeURLId() {
      let newId = prompt("Enter a new ID:"); // 사용자로부터 새 ID 입력 받음
      if (newId !== null && newId !== "") {
        var currentURL = window.location.href;
        //var newURL = currentURL.replace(/(\?|&)id=[^&]*/, "") + (currentURL.indexOf("?") >= 0 ? "&" : "?") + "id=" + newId;
        let newURL = currentURL.replace(/(\?|&)id=[^&]*/, "") + "?id=" + newId;
        window.location.href = newURL;
      }
    }
  </script>
</body>

</html>

코드가 그리 길어 보이지 않지만 우리가 여기서 알아야 할 개념이 있다. 그것은 정규표현식 이다. 정규 표현식은 문자열의 패턴을 검색하거나, 패턴을 치환하거나 패턴에 맞게 문자열을 추출하는 등의 작업을 수행할 수 있게한다. 이 개념은 다음 시간에 따로 내가 포스팅할 것이다. 우선 우리가 자세히 보아야할 코드는 아래와 같다.

<script>
    let currentURL = window.location.href;
    console.log(currentURL);

    function changeURLId() {
      let newId = prompt("Enter a new ID:"); // 사용자로부터 새 ID 입력 받음
      if (newId !== null && newId !== "") {
        var currentURL = window.location.href;
        //var newURL = currentURL.replace(/(\?|&)id=[^&]*/, "") + (currentURL.indexOf("?") >= 0 ? "&" : "?") + "id=" + newId;
        let newURL = currentURL.replace(/(\?)id=[^&]*/, "") + "?id=" + newId;
        window.location.href = newURL;
      }
    }
  </script>

window.location.href

window.location.href는 현재 URL을 표기하는 코드이다. 이 코드는 문자열로 이루어져있고 해당 문자열을 이용하면 우리가 원하는 URL로 변경할 수 있다. 이를 응용해서 changeURLId함수를 만들고 URL의 id값을 변경한다.

replace(a,b)

replace(a,b)함수를 통해서 a의 매개변수를 b의 함수로 변경해준다. 즉, 비어 있는 문자로 만들어 준다는 것이다. /(\?)id=[^&]*/라는 식은 위에서 말한 정규표현식이다. 간단하게 해석을 해보겠다.

/.../

이 기호는 정규식의 시작과 끝을 의미한다.

(\?)

여기서 \?는 ?가 문자열에 있는지 없는지 즉, 일치하는지 안하는 판단을 하고 그것을 시작으로 replace함수가 발동 될 때 적용이 된다.

[^&]*

^은 제외한다는 의미로 문자열의 ?부터 끝 문자 중 &을 제외하고 모든 식을 읽겠다는 뜻이다. *은 0회 이상 반복을 해도 무관하다는 의미를 뜻 한다. 즉, replace가 될 때 ?를 시작으로 &를 제외하고 무한하게 값을 공백 무자열로 만들 수 있다는 것이다.

indexOf()

indexOf함수는 해당 매개변수를 문자열의 위치를 찾아낸다. 이후 코드를 보면 >= 0 ? "&" : "?"인데 이는 indexOf의 매개변수가 존재 하면 (true) &를 붙이고 존재하지 않은면 (false) ?를 붙인다. 내가 이 코드를 포함한 행을 주석처리한 이유는 정규표현식에서 *를 통해 무한하게 replcae가 되어도 ?가 없는대도 불과하고 &문자열을 반환하고 원치 않는 URL코드를 생성하고 NotFound 404 페이지를 호출한다. 아직 정확한 원인은 파악되지 않았으나 이를 수정하기 위해서는 직접 "?id"를 붙이는 방법을 선택했다.

728x90

'Server > ⚡ver0' 카테고리의 다른 글

⚡PHP API : 날짜 그리고 나의 위치  (0) 2023.10.30
⚡PHP select_id : JS&PHP&MySQL  (0) 2023.10.23
⚡PHP select_id : DATABASE  (0) 2023.10.22
⚡PHP change_id : Ajax  (0) 2023.10.21
⚡PHP로 URL의 id값 가져오기 : GET/POST  (0) 2023.10.18
Comments