다음 페이지로 PHP 전달 변수 수 없습니다. 첫 번째 페이지에서 변수를 만듭니다 $myVariable =

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

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

$myVariable = "Some text";

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

어떻게하면 되나요?

감사!



답변

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에서 코딩을 시작했을 때 완전히 새로운 인스턴스가 발견되었습니다. 일단 익숙해지면 아주 간단합니다.


답변

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

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


답변

요청에서 데이터 전달

양식에 숨겨진 필드로 포함하거나 양식 작업 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에 도착하는 모든 데이터에 해당한다는 사실을 상기시킬 가치가 있습니다.


답변

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

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

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

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

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

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

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

session_start(); 

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

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

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


답변

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


답변

이 코드를 사용해보십시오

숨겨진 필드를 사용하여 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;
?>

답변

**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'];
}