다음 페이지로 PHP 전달 변수


196

꽤 간단 해 보이지만 좋은 방법을 찾을 수 없습니다.

첫 번째 페이지에서 변수를 만듭니다

$myVariable = "Some text";

그리고 그 페이지에 대한 폼의 액션은 "Page2.php"입니다. 따라서 Page2.php에서 해당 변수에 어떻게 액세스 할 수 있습니까? 세션으로 할 수 있다는 것을 알고 있지만 간단한 문자열에는 너무 많은 것으로 생각되며 간단한 문자열 (파일 이름) 만 전달하면됩니다.

어떻게하면 되나요?

감사!


변수를 전달하는 가장 쉽고 쉬운 방법은 여기서 설명하는 방법입니다. stackoverflow.com/questions/14465464/…
Jaro

답변:


450

HTML / HTTP는 상태 비 저장입니다. 즉, 이전 페이지에서 수행 한 내용은 현재 페이지와 완전히 연결되지 않은 것입니다. 세션, 쿠키 또는 GET / POST 변수와 같은 것을 사용하는 경우를 제외하고 . 세션과 쿠키는 사용하기가 매우 쉽고 세션은 쿠키보다 훨씬 안전합니다. 더 안전하지만 완전히 안전하지는 않습니다.

세션:

//On page 1
$_SESSION['varname'] = $var_value;

//On page 2
$var_value = $_SESSION['varname'];

배열 session_start();에 액세스 $_SESSION하기 전에 그리고 출력이 브라우저로 전송되기 전에 두 페이지 모두 에서 명령문 을 실행해야 합니다.

쿠키:

//One page 1
$_COOKIE['varname'] = $var_value;

//On page 2
$var_value = $_COOKIE['varname'];

세션과 쿠키의 큰 차이점은 세션을 사용하는 경우 변수 값이 서버에, 쿠키를 사용하는 경우 클라이언트에 저장된다는 것입니다. 세션간에 데이터를 유지하려는 경우를 제외하고 세션 대신 쿠키를 사용해야하는 이유는 생각할 수 없지만 DB에 저장하고 사용자 이름 또는 ID를 기반으로 검색하는 것이 좋습니다.

가져 오기 및 게시

다음 페이지의 링크에서 변수를 추가 할 수 있습니다.

<a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>

GET 변수가 생성됩니다.

다른 방법은 2 페이지에 제출하는 양식에 숨겨진 필드를 포함시키는 것입니다.

<form method="get" action="page2.php">
    <input type="hidden" name="varname" value="var_value">
    <input type="submit">
</form>

그런 다음 2 페이지에서

//Using GET
$var_value = $_GET['varname'];

//Using POST
$var_value = $_POST['varname'];

//Using GET, POST or COOKIE.
$var_value = $_REQUEST['varname'];

post우편을 통해 양식을 작성하려면 양식의 방법을로 변경하십시오 . GET이 해킹하기가 쉽지만 둘 다 똑같이 안전하지 않습니다.

세션 데이터를 제외하고 각각의 새로운 요청이 PHP에서 코딩을 시작했을 때 완전히 새로운 인스턴스가 발견되었습니다. 일단 익숙해지면 아주 간단합니다.


2
덕분에 도움이되었습니다. 문제는 첫 페이지에 많은 변수가 있었기 때문에 모든 변수가 포함 된 배열을 만들고 세션을 사용하여 다음 페이지로 보내는 것입니다.
Carlo

Schweet :) 도와 드리겠습니다.
Jrgns

4
Nitpick : PHP의 세션은 일반적으로 쿠키도 처리합니다. 세션 쿠키는 영구 쿠키가 아니며 대개 세션 ID 만 보유합니다. 그러나 여전히 쿠키입니다.
괜찮은 Dabbler

내 의견에 대해 자세히 설명합니다. 당신이 말했듯이 HTTP는 상태 비 저장이기 때문입니다. 따라서 PHP는 여전히 세션을 식별하는 방법이 필요합니다. 이는 세션 ID를 가진 클라이언트에 쿠키를 저장하여 수행됩니다. 쿠키가 클라이언트 측에서 비활성화되면 PHP는 때때로 $ _GET vars를 사용하여 세션 ID를 페이지 사이의 링크에 추가합니다. 그러나 이것은 일반적으로 안전하지 않은 것으로 간주되며 대부분의 웹 서버 (php.ini)에서 일반적으로 비활성화됩니다.
괜찮은 Dabbler

@fireeyedboy PHP 세션은 GET 및 POST 변수를 사용하여 전파 할 수 있습니다. 세션이 끝나면 세션 ID라는 한 개의 데이터 만 전송하여 한 페이지에서 다음 페이지로 변수를 쉽게 전달할 수 있습니다. 그런 다음 해당 세션 ID를 사용하여 이전에 저장된 데이터를 검색합니다.
Jrgns

30

위의 답변에 감사드립니다. 여기 내가 한 일이 있습니다. 따르는 사람들에게 도움이되기를 바랍니다. 한 페이지에서 다른 페이지로 등록 번호를 전달하려고하므로 regNameregValue :

첫 페이지를 만들고 set_reg.php 라고 부릅니다 .

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

<form method="get" action="get_reg.php">
    <input type="text" name="regName" value="">
    <input type="submit">
</form>

두 번째 페이지를 작성하고 get_reg.php로 호출하십시오 .

<?php

session_start();

$regValue = $_GET['regName'];

echo "Your registration is: ".$regValue.".";

?>

<p><a href="set_reg.php">Back to set_reg.php</a>

위의 답변만큼 포괄적이지는 않지만 제 목적을 위해 다양한 요소 간의 관계를 간단한 방식으로 보여줍니다.


13
귀하의 예제는 세션없이 작동하며 실제로 세션 메커니즘 (get_reg.php)을 통해 데이터를 가져 오지 않습니다. Jrgns가 설명한대로 get-method가있는 양식을 통해 regName을 보냅니다. 따라서 변수는 get_reg.php 페이지에서 $ _GET 배열을 통해 액세스 할 수 있습니다.
metatron

16

요청에서 데이터 전달

양식에 숨겨진 필드로 포함하거나 양식 작업 URL을 추가 할 수 있습니다.

 echo '<input type="hidden" name="myVariable" value="'.
     htmlentities($myVariable).'">';

또는

echo '<form method="POST" action="Page2.php?myVariable='.
    urlencode($myVariable).'">";

이것은 또한 데이터를 전달할 때 htmlentitiesurlencode 의 사용을 보여줍니다 .

세션에서 데이터 전달

데이터를 클라이언트 측으로 전달할 필요가 없으면 세션이 더 적합 할 수 있습니다. 각 페이지의 시작 부분에서 session_start () 를 호출 하면 $ _SESSION 배열로 데이터를 가져 와서 설정할 수 있습니다.

보안

값이 실제로는 파일 이름이므로 보안 결과를 알고 있어야합니다. 파일 이름이 클라이언트 측에서 도착한 경우 사용자가 값을 변경했다고 가정하십시오. 유효성을 확인하십시오! 사용자가 중요한 시스템 파일 또는 제어 대상 파일의 경로를 전달하면 어떻게됩니까? 존재하거나 존재하지 않는 파일에 대해 서버를 "프로브"하는 데 스크립트를 사용할 수 있습니까?

여기에서 시작하기 시작하면서 $ _GET, $ _POST 또는 $ _COOKIE에 도착하는 모든 데이터에 해당한다는 사실을 상기시킬 가치가 있습니다.


9

PHP에서 값을 전달하는 세 가지 방법이 있습니다.

  • 우편으로
  • 에 의해
  • 세션 변수를 만들어서

이 세 가지 방법은 다른 목적으로 사용됩니다. 예를 들어 다음 페이지에서 값을 받으려면 'post'($ _ POST) 방법을 다음과 같이 사용할 수 있습니다.

$a=$_POST['field-name'];

둘 이상의 페이지에서 변수 값이 필요한 경우 세션 변수를 다음과 같이 사용할 수 있습니다.

$a=$_SESSION['field-name];

SESSION 변수를 만들기 위해이 구문을 사용하기 전에 먼저 PHP 페이지의 맨 앞에이 태그를 추가해야합니다

session_start(); 

GET 방법은 일반적으로 사용자의 입력을받는 것과 동일한 페이지에 데이터를 인쇄하는 데 사용됩니다. 구문은 다음과 같습니다.

$a=$_GET['field-name'];

POST 메소드는 URL 메소드에 데이터를 표시 할 수있는 것보다 Get 메소드를 사용할 때 일반적으로 GET보다 더 안전합니다.


7

세션은 유일한 좋은 방법입니다. GET / POST를 사용할 수도 있지만 잠재적으로 안전하지 않을 수 있습니다.


6

이 코드를 사용해보십시오

숨겨진 필드를 사용하여 PHP varibale을 다른 페이지로 전달할 수 있습니다.

page1.php

<?php $myVariable = "Some text";?>
<form method="post" action="page2.php">
 <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
 <button type="submit">Submit</button>
</form>

PHP 변수를 숨겨진 필드 값으로 전달하면이 변수를 다른 페이지에 액세스 할 수 있습니다

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>

1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

2 쪽

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}

1

세션은 유일한 좋은 방법입니다. GET / POST를 사용할 수도 있지만 잠재적으로 안전하지 않을 수 있습니다.

세션에서 데이터 전달 클라이언트 측으로 데이터를 전달할 필요가 없으면 세션이 더 적합 할 수 있습니다. 각 페이지의 시작 부분에서 session_start ()를 호출하면 $ _SESSION 배열로 데이터를 가져 와서 설정할 수 있습니다.

보안 값은 실제로 파일 이름이므로 보안 결과를 알고 있어야합니다. 파일 이름이 클라이언트 측에서 도착한 경우 사용자가 값을 변경했다고 가정하십시오. 유효성을 확인하십시오! 사용자가 중요한 시스템 파일 또는 제어 대상 파일의 경로를 전달하면 어떻게됩니까? 존재하거나 존재하지 않는 파일에 대해 서버를 "프로브"하는 데 스크립트를 사용할 수 있습니까?

여기서 시작하는 것이 분명하기 때문에 이것은 $ _GET, $ _POST 또는 $ _COOKIE에 도착하는 모든 데이터에 해당한다는 사실을 상기 할 가치가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.