테스트 사이트 - 개발 중인 베타 버전입니다

새로고침시 변수값 초기화 채택완료

타버린나무 3년 전 조회 2,027

</p>

<p><?php

$po = 0;

if ( isset($_POST['vs_make']) ) {

        $vs_make = $_POST['vs_make'] ?? 0; 

        if( $vs_make == 1) {

            $po = 300;

            $vs_make = 0;

            $_POST['vs_make'] = 0;

        }

}

echo '
$po = '.$po;    </p>

<p>?></p>

<p><form method="post">

<button type="submit" name="vs_make" value="1">TEST</button>

</form>

 

위 예제를 실행해서 TEST를 클릭하면

$po = 300 이라고 정상 동작합니다.

 

그런데 새로고침을 하면..  여전히 $po = 300 이라고 나오네요.

제가 기초가 없다보니 이해가 안가서 그러는데

TEST 클릭하면 $po = 300; 후 $vs_make = 0; $_POST['vs_make'] = 0; 모두 0값으로 바꿨으니

새로고침 하면 $po = 0 이어야 하지 않나요?

 

TEST클릭후엔 새로고침 해도 계속 $po = 300 이라고 나오는데 이유가 뭔가요.

원하는 결과를 얻으려면 어떻게 해야하나요?

 

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
3년 전

페이지를 하나로 해서 혼동될 수 있습니다.

 

페이지를 2개로 했을 때를 얘기하면, https://m.blog.naver.com/scyan2011/221845086789

ex.

폼 페이지 : a.php (

)

처리 페이지 : b.php (

 

b.php 는 POST 로 전송된 값을 받아 처리하는 페이지입니다.

b.php 를 새로고침하면, POST 로 전송된 값은 동일합니다. 

 

-----------------

 

페이지 하나인 경우에는,

POST 전송을 하기전 상태와 POST 전송 이후 상태로 나누어집니다.

POST 전송 후 상태에서 새로고침을 하면..

POST 전송값이 계속 유지됩니다.

=> $_POST['va_make'] 에 저장된 값은 '1' 입니다.

=> $po 값 300 이 출력됩니다.

POST 전송을 하기 전 상태에서 새로고침하면.. $po 값 0이 출력됩니다.

 

새로고침을 하지 않고.. 브라우저에서 다시 접속하면.. (POST 전 상태이므로) $po 값 0 이 출력됩니다.

 

POST 전송 전 상태에서 새로고침을 한 경우에는.. (브라우저로 최초 해당 페이지 이동 -> 폼 서브밋 전에 새로고침을 한 경우에는..) $po 값 0 출력입니다.

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

타버린나무
3년 전
감사합니다. 아래 예문 주신거 보니까 뭔가 알것도 같습니다.
큰 도움 주셔서 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

그냥 새로고침을 하려면 키값 f5 누르자나요 

그걸 이용해서 $_POST 값을 제거하는 소스를 넣으면 될듯합니다

https://java119.tistory.com/35

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

<?php

echo '
$vsmakeA = '.$_POST['vs_make'];    

$_POST['vs_make'] = 'B';

echo '
$vsmakeB = '.$_POST['vs_make'];    

?>

<form method="post">

<button type="submit" name="vs_make" value="A">TEST</button>

</form>

마르스컴퍼니 말씀듣고 위 코드를 해봤더니 신기하네요

 

첫시작

$vsmakeA = $vsmakeB = B

 

TEST 클릭

$vsmakeA = A $vsmakeB = B

 

새로고침

$vsmakeA = A $vsmakeB = B

 

$_POST['vs_make'] 값은 B로 이미 바뀐 상태인데 새로고침하면 어째서 다시 A가 되는건가요?

새로고침시에 $_POST['vs_make'] 값을 바꿀수 없나요?

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

마르스컴퍼니
3년 전
POST 값 전송된 후 새로고침 했을 때..
[code]
<?php
echo '<br>$vsmakeA = '.$_POST['vs_make']; // $_POST['vs_make'] 값은 A (POST 값이 'A' 로 전송되었기 때문에..)
// <form> ~ </form> 안의 <input name="vs_make"> 값 'A'가 POST 전송됩니다.

//----------------------------

$_POST['vs_make'] = 'B';
echo '<br>$vsmakeB = '.$_POST['vs_make']; // 바로 위 코드로 인해 'B'로 변경
[/code]
마르스컴퍼니
3년 전
[code]
<?php
echo '<br>$vsmakeA = '.$_POST['vs_make'];
$_POST['vs_make'] = 'B';
echo '<br>$vsmakeB = '.$_POST['vs_make'];
?>
<form method="post">
<button type="submit" name="vs_make" value="<?php echo $_POST['vs_make'] ?>">TEST</button>
</form>
[/code]
이 경우는 항상 B

댓글을 작성하려면 로그인이 필요합니다.

새로 고침 을 해도 $_POST['vs_make'] 은 1 로 정 되어 있으니 그런거죠

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인