2014-09-08 2 views
1

양식을 사용하지 않고 링크를 사용하여 한 페이지에서 다른 페이지로 (또는 몇 개의) 변수를 전달하는 방법을 알고 싶습니다.양식없이 숨겨진 변수를 전달하고 PHP에서 링크를 사용하여

그 세션이 최선의 방법입니다 알고 있지만 어떻게 다음과 같은 시나리오에서 그것을 구현 :

삭제 -> process.php 추가 - (위와 같이 동일한 페이지)> process.php을

어떤 링크를 클릭했는지 알려주는 숨겨진 변수를 전달하기를 원합니다. 어쨌든 $ _GET을 사용하지 않고 세션을 사용합니까?

감사합니다, 어떤 점에서

+0

링크 인 경우 협박 문자열 변수 사용을 고려해 보셨습니까? – Vector

+0

숨겨진 입력을 사용하고 아마도'POST '와 함께 전달합니까? – loveNoHate

+1

폼 (및 '$ _POST')을 사용하고 버튼의 링크를 변경하는 것이 좋습니다. – RST

답변

2

모든 HTTP 요청은 서로 독립적입니다. 당신이 액세스 할 데이터가 포함 URL을 통해 전달

  1. 변수 ($_GET)
  2. 변수는 양식을 통해 게시 ($_POST)
  3. 쿠키
  4. 세션 데이터

당신 이후 $_GET 요청을 사용하는 것에 반대하고 두 링크가 같은 페이지로 이동하면 클릭 한 링크를 확인하는 다른 방법이 필요합니다. 양식을 사용하고 숨겨진 입력 형식을 통해 데이터를 전달하는 것이 좋습니다.

예 :

<form action='process.php' method='post'> 
    <input type='hidden' name='action' value='add' /> 
    <button onClick='submit();'> 
     Add 
    </button> 
</form> 

<form action='process.php' method='post'> 
    <input type='hidden' name='action' value='delete' /> 
    <button onClick='submit();'> 
     Delete 
    </button> 
</form> 

<style type='text/css'> 
button { 
    background:none!important; 
    border:none; 
    padding:0!important; 
    border-bottom:1px solid #444; 
    cursor: pointer; 
} 
</style> 

당신의 process.php 스크립트에서, 당신은 그때는 "추가"또는 "삭제"를 동일한 있는지 확인 $_POST['action']에 대해 확인합니다. 내가 추가 한 스타일 태그는 링크처럼 버튼을 스타일링하는 방법에 대해 SO 사용자 adardesign (*)에서 찾은 것입니다.

편집 :이 작업을 수행하기 위해 세션을 사용할 수 있는지 여부에 대한 질문에 대답하기 위해 가능한 것이지만 그만한 가치는 없을 것이라고 말합니다.

아마이 경로를 선택하지 않을 것입니다.하지만 사용자가 할 수있는 일은 사용자가 해당 링크 중 하나를 클릭 할 때 트리거되는 AJAX 요청입니다. AJAX 요청은 "add"또는 "delete"와 동일한 세션을 설정하는 PHP 스크립트를 호출합니다. success 콜백에서 사용자를 process.php 페이지로 리디렉션하면 $_SESSION 변수의 값을 확인할 수 있습니다. 다시 말하지만, 이렇게하는 것이 좋지는 않지만 입니다.

+0

아이디어를 좋아해요. 감사. 그것은 IE, 크롬 및 파이어 폭스에서 작동합니까? 희망! – tafteh

+0

모든 브라우저에서 좋을 것입니다. 나는 지금 Mac에있어 IE를 테스트 할 수는 없지만 내 확신을 가질 수 있습니다. –

0

, 당신은 당신이 조작 원하는 항목을 표시하기 위해 다시 서버로 일부 데이터를 전달해야하지만 그 후에는 세션을 유지할 수 있습니다.

예를 들어, 기사 목록으로 시작하고 사용자가 기사를 선택하는 경우 사용자가 선택한 기사를 알리는 방법이 있어야합니다. 일반적으로 링크의 매개 변수 (예 : article.php?id=5)로 완료됩니다. 이 id 값이 서버에 제출되면 $ _SESSION에 추가하고이를 계속 추적 할 수 있습니다. 그런 다음 세션에 저장된 해당 ID를 사용하여 편집, 삭제 등을 결정할 수 있습니다. 사용자가 새 기사를 작성하려고 할 때 새 ID 매개 변수가있는 링크를 클릭하고 해당 새 ID를 세션에 할당합니다.

보안 및 사용자 권한에 대해 우려하는 경우 충분하지 않습니다. 사용자가 모든 단계에서 해당 콘텐츠로 작업을 수행 할 권한이 있는지 확인해야합니다. 인터페이스는 기사보기를 요청하고 백엔드는 콘텐츠가 제공되기 전에 사용자가 그렇게 할 수 있는지 확인합니다. 인터페이스가 기사 삭제 요청을하면 백엔드가 완료되기 전에 OK인지 확인합니다.

+0

나는 그 생각을 좋아한다. 그러나 나는 $ _GET을 사용하지 않기를 원한다. 어떤 해결책? – tafteh

-1

숨겨진 변수를 사용하면 $ _GET이 해결책이 아닙니다. 아직도 $ _GET을 사용하기를 원한다면 md5 해시를 사용하여 변수를 전달하는 것이 좋습니다.

<a href="process.php?Action=<?php echo md5('Delete');?>">Delete Action</a> 
<a href="process.php?Action=<?php echo md5('Add');?>">Add Action</a> 

md5를 사용하면 변수가 사용자에게 최소한 어떻게 암호화되었는지 확인할 수 있습니다.

조치 방법

$action = $_GET['Action']; 
if(md5('Delete')==$action){ 
/* Delete action */ 
}elseif(md5('Add')==$action){ 
/* Add action */ 
} 
+0

고마워, 나는 해싱 방법을 좋아해. $ _GET 메서드를 사용하지 않을 가능성이 있습니까? – tafteh

+0

$ _POST를 사용할 수 있지만이 경우 더 많은 단계를 수행해야합니다. 변수를 사용자로부터 멀리해야합니까? 더 나은 해결책을 찾을 수 있습니다 –

+0

예. 나는 사용자에게서 전달할 필요가있는 모든 변수를 제거하고 싶다. 주소 표시 줄에 아무 것도 나타나지 않는 것이 좋습니다. – tafteh

0

(코드를 물어 주시기 내가 아약스 요청에 대해 내 자신의 라이브러리를 사용하지만, 나는 그들이 쉽게 understable 생각)하지만,

<script type='text/javascript'> 
function navigate(event){ 
    event.preventDefault(); 
    var action=this.innerHTML; 
    var link=this.href; 
    jx.post("controller.php", {action:action}, {onComplete:function(response){ 
     location.href=link; 
    }}); 
} 
</script> 

<a href="process.php" onclick='navigate(event)' action="add">Add</a> 
<a href="process.php" onclick='navigate(event)' action="delete">Delete</a> 

는 PHP의 파일은 다음과 같습니다 :

<?php session_start(); 
$_SESSION["action"] = $_POST["action"]; 
?> 
당신은 아약스 요청을 처리하는 PHP 파일이 필요합니다

그런 다음 navigate 함수가 process.php로 리디렉션되면 이미 세션 변수에 링크가 저장됩니다.

어쨌든이 동작의 목적을 설명하면 더 나은 해결책을 찾을 수 있습니다.

관련 문제