2013-05-19 3 views
-1

업데이트 쿼리를 한 번만 실행할 수 있습니다. 링크 또는 버튼을 클릭하면 프로필이 자동으로 변경되고 myaccount.php 페이지로 이동합니다. 모든 일이 정상적으로 진행되고 제대로 작동하지만 동일한 페이지 (myaccount.php)와 프로필이 매번 업데이트 될 때 주요 문제가 발생합니다.PHP에서 업데이트 쿼리를 한 번만 실행하십시오

if(($age== '') || ($location= '') || ($status= '')) 
    { 
     $newquery1 = "update $tabl_u something...................... where id='$id'"; 
    } 

:하지만 난 내가

<a href='myaccount.php.php?age =$age && status= $status' target='_blank' style='color:#E07707;font-weight:bold;'>Update Profile</a></div></div><br> 

로 링크를 설정하고 난으로 myaccount.php에 업데이트 쿼리를 설정 ... 그는 한 번만 링크 또는 버튼을 클릭하면 자신의 프로필 만 변경해야합니다 거기에 아무 버튼을 제출하지만, 업데이트 데이터에 대한 다른 이벤트가 URL이나 링크를 클릭하여 데이터를 업데이 트에 대한 몇 가지 ID를 전달, 내 질문에 내 측면에 의해 이루어집니다 희망과 만약 내가 놓친 또는 누락 된 경우 이해할 수 있도록 노력하겠습니다 나도 알아 ... 제 질문에 관해서는 아무 것도 묻지 말고 .. 도움이 필요합니다. 정말 도움이 필요합니다 .... 미리 감사드립니다!

+0

무엇을 업데이트하려고합니까? 사용자의 로그인 시간? –

+0

아니요 ...사용자 정보를 실제로 관리자 측면에서 설정하고 사용자가 클릭하여 프로필에 추가 할 수 있습니다. – Tracy

답변

1

업데이트를 수행 한 후에는 아무 것도 출력하지 마십시오. 대신, 예를 들어, 다른 곳에서 사용자를 보내

header("Location: myaccount.php"); 
exit(0); 

그 방법을, 데이터 가져 오기는 링크에서 손실되고에 사용자를 취할 것 "뒤로"버튼을 클릭하는 동안 다시로드는 업데이트를 반복하지 않을 것이다 페이지 (아마도 양식) 전에 업데이 트, 그래서 - 업데이 트가 반복되지 않습니다.

3

GET 요청에서 데이터를 변경하면 안됩니다. 폼의 처리가 멱등이면 로서 (즉 그것은 세계의 상태에는 지속적인 관찰 효과가 없다), 그 양식 방법 GET되어야

되는 HTML 4 HTTP 사양했다. 많은 데이터베이스 검색은 눈에 보이는 부작용이 없으며 쿼리 양식을 이상적으로 적용합니다.

양식 처리와 관련된 서비스에 부작용이있는 경우 (예 : 데이터베이스 수정 또는 서비스 구독) 메서드는 POST 여야합니다.

예를 들어, 사용자가 페이지의 모든 URL을 미리로드하는 "웹 가속기"를 가지고 있다면 어떻게됩니까?

또한 실제로 웹 사이트의 사용자가 요청한 것인지 확인하거나 매우 쉽게 CSRF 취약점이있는 문을 열어야합니다.

그렇다면 데이터베이스에서 사용자 상태를 업데이트 한 후에 수정하지 않는 페이지로 리디렉션해야합니다.

기본 페이지 -> 변경 링크를 클릭 -> 데이터베이스의 상태를 변경하고 그 페이지를 새로 고치면 기본 페이지를 다시

<?php 
if(($age== '') || ($location= '') || ($status= '')) { 
    mysqli_query(/* update whatever */); 
    header('Location: myaccount.php'); 
    exit; 
} 

로 리디렉션, 그는 그것이 아무것도 변경하지 않도록 기본 페이지에 . 브라우저에서 "뒤로"를 누르면 페이지 기반으로 돌아갑니다 (리디렉션을 발행하는 페이지는 브라우저 기록에 저장되지 않습니다).

0
session_start(); 
if(isset($_GET)) { 

    if(empty($_SESSION['update'])) { 
    //update data 
    $_SESSION['update'] = 'Finished'; 
    echo 'updating is finished'; 
    }else{ 
    echo 'Your details have beed updated already'; 
    } 
} 
관련 문제