JavaScript 변수를 PHP에 어떻게 전달합니까?


150

폼의 숨겨진 입력을 사용하여 JavaScript 변수를 PHP에 전달하고 싶습니다.

하지만 값 얻을 수 $_POST['hidden1']로를 $salarieid. 문제가 있습니까?

코드는 다음과 같습니다.

<script type="text/javascript">
    // View what the user has chosen
    function func_load3(name) {
        var oForm = document.forms["myform"];
        var oSelectBox = oForm.select3;
        var iChoice = oSelectBox.selectedIndex;
        //alert("You have chosen: " + oSelectBox.options[iChoice].text);
        //document.write(oSelectBox.options[iChoice].text);
        var sa = oSelectBox.options[iChoice].text;
        document.getElementById("hidden1").value = sa;
    }
</script>

<form name="myform" action="<?php echo $_SERVER['$PHP_SELF']; ?>" method="POST">
    <input type="hidden" name="hidden1" id="hidden1" />
</form>

<?php
   $salarieid = $_POST['hidden1'];
   $query = "select * from salarie where salarieid = ".$salarieid;
   echo $query;
   $result = mysql_query($query);
?>

<table>
   Code for displaying the query result.
</table>

2
js 변수 값을 쿠키에 저장하고 나중에 PHP 쿠키에서 해당 변수에 액세스 할 수 있습니다.
shasi kanth

2
@shasikanth- 그렇게 할 있지만 , 두 번째로 페이지를 볼 때까지 쿠키 가 설정되지 않습니다 . 그 당시에는 페이지보기 의 값이됩니다 . 항상 뒤에 있습니다. 쿠키는 정보를 서버 로 동적으로 다시 전달 하는 메커니즘이 아닙니다 . 페이지를 새로 고치려면 (예 : 양식 POST 또는 Ajax 호출) 다른 작업을 수행해야합니다. 쿠키 중 하나를 사용하는 경우 쿠키를 사용할 이유가 없습니다. 사용중인 메커니즘에 정보를 전달하십시오. 또한 쿠키는 페이지가 사라진 후에도 지속됩니다-이 질문의 의도가 아닙니다.
ToolmakerSteve

답변:


90

현재 페이지 JavaScript 코드에서 현재 페이지 PHP 코드로 변수 값을 전달할 수 없습니다 ... PHP 코드는 서버 측에서 실행되며 클라이언트 측에서 무슨 일이 일어나고 있는지 전혀 모릅니다.

GET 또는 POST 메소드를 사용하여 양식을 제출하는 것과 같은 다른 메커니즘을 사용하여 HTML 양식에서 PHP 코드로 변수를 전달해야합니다.

<DOCTYPE html>
<html>
  <head>
    <title>My Test Form</title>
  </head>

  <body>
    <form method="POST">
      <p>Please, choose the salary id to proceed result:</p>
      <p>
        <label for="salarieids">SalarieID:</label>
        <?php
          $query = "SELECT * FROM salarie";
          $result = mysql_query($query);
          if ($result) :
        ?>
        <select id="salarieids" name="salarieid">
          <?php
            while ($row = mysql_fetch_assoc($result)) {
              echo '<option value="', $row['salaried'], '">', $row['salaried'], '</option>'; //between <option></option> tags you can output something more human-friendly (like $row['name'], if table "salaried" have one)
            }
          ?>
        </select>
        <?php endif ?>
      </p>
      <p>
        <input type="submit" value="Sumbit my choice"/>
      </p>
    </form>

    <?php if isset($_POST['salaried']) : ?>
      <?php
        $query = "SELECT * FROM salarie WHERE salarieid = " . $_POST['salarieid'];
        $result = mysql_query($query);
        if ($result) :
      ?>
        <table>
          <?php
            while ($row = mysql_fetch_assoc($result)) {
              echo '<tr>';
              echo '<td>', $row['salaried'], '</td><td>', $row['bla-bla-bla'], '</td>' ...; // and others
              echo '</tr>';
            }
          ?>
        </table>
      <?php endif?>
    <?php endif ?>
  </body>
</html>

@ Sergey, POST 방식으로 여기에 양식을 제출했습니다. 왜 작동하지 않는지 모르겠습니다. 왜 그런지 아십니까? 그리고 그것을 해결하는 방법?
SUN Jiangong

@sergey, 그래서 아약스를 사용해야합니까? 사실, 나는 그것으로 familliar입니다.
SUN Jiangong

실제로, 나는 과거의 한 수준 선택 상자에서 귀하의 방법을 사용했습니다. 그러나 지금은 3 체인 선택 상자를 만들었으므로 귀하의 방법을 사용할 수 없습니다.
SUN Jiangong

이 시점에서 : 예, AJAX 기술을 사용해야합니다. 당신이 실현에 문제가 있다면, 내가 도울 수 있다고 생각합니다.
Sergey Kuznetsov

3
@MadaraUchiha OP는 이미 mysql_기능을 사용했습니다 . 완전한 재 작성으로이 질문에 대답하는 목표는 아닙니다.
Ja͢ck

26

쿠키에 저장하십시오.

$(document).ready(function () {
  createCookie("height", $(window).height(), "10");
});

function createCookie(name, value, days) {
  var expires;
  if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = "; expires=" + date.toGMTString();
  }
  else {
    expires = "";
  }
  document.cookie = escape(name) + "=" + escape(value) + expires + "; path=/";
}

그리고 PHP로 읽어보십시오 :

<?PHP
   $_COOKIE["height"];
?>

그것은 예쁜 해결책은 아니지만 작동합니다.


2
피날레! 작동하는 분리! 나는 지금 분리를 위해 몇 시간을 찾고 게임을 만들고 데이터베이스에 최고 점수를 보내고 싶습니다. 지금 그것을 고쳤습니다! 건배!
Cid-El

1
실제로 훌륭한 솔루션입니다! PHP에서 자바 스크립트로가는 것은 쉽습니다. 자바 스크립트에서 PHP로 쉽지 않습니다. 쿠키를 사용하는 것은 간단하고 우아합니다. 아니 BS .. !! 물론 클라이언트가 쿠키를 끄면 기본 설정으로 처리해야합니다.
JamesAD-0

$ _COOKIE [ "height"] 항목을 사용하여 이름과 값을 얻는 방법을 알려주시겠습니까? 감사. 나를 위해 작동하지 않습니다.
Zac

4
모든 공세에도 불구하고 이것은 좋은 해결책이 아닙니다. 이유 : 다음 에 브라우저에서 페이지를 요청할 때까지 서버에서 쿠키를 볼 수 없습니다 . 항상 "뒤에"있습니다. 브라우저에서 페이지를 처음 열면 쿠키가 전혀 없습니다. 이것이 허용됩니까? 다음에 브라우저에서 페이지를 열면 처음부터 쿠키가 있습니다. A에 대한 상수의 값 등이 예를 들어, 이는 허용 될 수 (처음 작동하지 불구!). 이제 현재 날짜 시간과 같은 동적 값을 고려하십시오 . PHP는 지금이 아니라 이전 날짜 시간을 보게 될 것입니다. 아약스를 사용하십시오.
ToolmakerSteve

20

JavaScript에서 PHP로 변수를 전달하는 방법에는 여러 가지가 있습니다 (물론 현재 페이지가 아님).

당신은 할 수 있습니다 :

  1. 여기에 명시된 양식으로 정보를 보내십시오 (페이지를 새로 고치게됩니다).
  2. Ajax로 전달하십시오 (여러 게시물이 여기에 있습니다) (페이지를 새로 고치지 않고)
  3. 다음과 같이 XMLHttpRequest 요청을 통해 (페이지를 새로 고치지 않고) HTTP 요청을 작성하십시오.

 if (window.XMLHttpRequest){
     xmlhttp = new XMLHttpRequest();
 }

else{
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 }

 var PageToSendTo = "nowitworks.php?";
 var MyVariable = "variableData";
 var VariablePlaceholder = "variableName=";
 var UrlToSend = PageToSendTo + VariablePlaceholder + MyVariable;

 xmlhttp.open("GET", UrlToSend, false);
 xmlhttp.send();

나는 이것이 더 멋지게 보이고 모든 변수와 그 밖의 것들을 반복 할 수 있다고 확신하지만 초보자를 쉽게 이해하도록 기본을 유지했습니다.


어떻게하면 새로운 형식을 제출 할 때마다 db 배열을 가져 와서 자바 스크립트에 전달합니까? 자바 스크립트의 변수도 변경됩니다. 어떻게? 도와 줘요. :(
Vincent

3
Ajax는 실제로 XMLHttpRequest이며, 후자는 기술 용어 일 뿐이다.
Alex C.

14

작업 예제는 다음과 같습니다. php의 동일한 페이지에서 javascript 변수 값을 가져옵니다.

<script>
var p1 = "success";
</script>

<?php
echo "<script>document.writeln(p1);</script>";
?>

1
나는이 개념을 시도했지만 실제로 효과가 있었지만 다음과 같이 시도하면 <? php var x = <script> document.writeln (p1); </ script> ";?>, echo x; 작동하지 않습니다. 당신은 다른 방법이 있나요?
Juna serbaserbi

3
<script>와 같이 시도 할 수 있습니다. var p1 = "success"; </ script> <? php $ x = "<script> document.writeln (p1); </ script>"; 에코 $ x; ?>
Arslan Tabassum

3
이 경우 PHP는 단순히 자바 스크립트를 페이지에 문자열로 에코합니다. 자바 스크립트가 PHP로 전달되지 않습니다.
Ben

그렇습니다. 우리가해야 할 일입니다. 때로는 같은 페이지에서 PHP를 JavaScript로 사용해야합니다. 페이지를 새로 고치지 않아도됩니다. 그러면 매력처럼 작동합니다 .. :)
Arslan Tabassum

1
@ArslanTabassum 아니오, 귀하는 의견을 오해합니다. php 는 p1의 가치를 보지 못합니다 . PHP가 아닌 javascriptecho "<script>document.writeln(p1);</script>"; 에서 javascript 변수 p1를 사용합니다 . A는 자바 스크립트의 브라우저가 HTML 페이지를 구축하는 동안 브라우저에서 실행되는 기능은,. document.writeln
ToolmakerSteve

6

페이지가 사용자에게 전송되기 전에 PHP가 서버에서 실행되고, JavaScript가 수신되면 사용자의 컴퓨터에서 JavaScript가 실행되므로 PHP 스크립트가 이미 실행되었습니다.

JavaScript 값을 PHP 스크립트에 전달하려면 XMLHttpRequest를 수행하여 데이터를 서버로 다시 보내야합니다.

자세한 정보를 위해 따를 수있는 이전 질문은 다음과 같습니다. Ajax Tutorial

이제 양식 값을 서버에 전달해야하는 경우 일반 양식 게시 만 수행 할 수 있지만 동일한 작업을 수행하지만 전체 페이지를 새로 고쳐야합니다.

<?php
if(isset($_POST))
{
  print_r($_POST);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <input type="text" name="data" value="1" />
  <input type="submit" value="Submit" />
</form>

제출을 클릭하면 페이지가 제출되고 제출 된 데이터가 인쇄됩니다.


1
@ Zurahn, 예, 아마도 XMLHttpRequest를 사용하려고 시도하므로 javascript를 사용하여 동일한 페이지에서 PHP 스크립트에 javascript 값을 전달할 수 없습니까? 나는 많은 것을 찾았다. 누군가는 숨겨진 입력으로 형태를 수행 할 수 있다고 말한다. 이 솔루션 furthur를 시도해야합니까?
SUN Jiangong

6

나는 이것을 스스로 알아 내려고 노력한 다음 문제는 이것이 상황을 되돌아 보는 일종의 역전이라는 것을 깨달았습니다. JavaScript에서 PHP로 전달하는 대신 대부분의 경우 다른 방법으로 이동하는 것이 가장 좋습니다. PHP 코드는 서버에서 실행되며 html 코드 (및 Java 스크립트도 가능)를 만듭니다. 그런 다음 브라우저는 페이지를로드하고 html 및 java 스크립트를 실행합니다.

이와 같은 상황에 접근하는 현명한 방법은 PHP를 사용하여 원하는 JavaScript 및 html을 만든 다음 페이지에서 JavaScript를 사용하여 PHP가 할 수없는 모든 작업을 수행하는 것 같습니다. 이것은 매우 간단하고 직접적인 방법으로 PHP와 JavaScript의 이점을 제공하는 것처럼 보입니다.

내가 한 일 중 하나는 페이지에서 PHP로 물건을 전달하는 것처럼 보이는 것입니다 .html 이미지 태그를 사용하여 PHP 코드를 호출하는 것입니다. 이 같은:

<img src="pic.php">

pic.php의 PHP 코드는 웹 페이지가로드되기 전에 실제로 HTML 코드를 생성하지만 HTML 코드는 기본적으로 즉시 호출됩니다. 여기의 PHP 코드는 페이지에 그림을 만드는 데 사용할 수 있지만 그 외에 원하는 명령을 가질 수 있습니다. 어쩌면 그것은 서버 등의 일부 파일의 내용을 변경 할 수 있습니다. 이것의 장점은 PHP 코드를 HTML에서 실행할 수 있고 JavaScript를 가정한다는 것입니다.하지만 단점은 페이지에 넣을 수있는 유일한 출력은 영상. URL의 매개 변수를 통해 PHP 코드에 변수를 전달하는 옵션도 있습니다. 대부분의 경우 페이지 카운터는이 기술을 사용합니다.


5

다음과 같이 코드에 표시된 쿠키를 사용하여 동일하거나 다른 페이지에서도 쉽게 값을 전달할 수 있습니다 (제 경우에는 페이스 북 통합과 함께 사용하고 있습니다)-

function statusChangeCallback(response) {
    console.log('statusChangeCallback');
    if (response.status === 'connected') {
        // Logged into your app and Facebook.
        FB.api('/me?fields=id,first_name,last_name,email', function (result) {
            document.cookie = "fbdata = " + result.id + "," + result.first_name + "," + result.last_name + "," + result.email;
            console.log(document.cookie);
        });
    }
}

그리고 나는 그것을 사용하여 (어떤 파일로든) 액세스했습니다.

<?php 
    if(isset($_COOKIE['fbdata'])) { 
        echo "welcome ".$_COOKIE['fbdata'];
    }
?>

5

다음은 내가 한 일입니다 (PHP에 현지 시간대를 삽입해야했습니다).

<?php
    ob_start();
?>

<script type="text/javascript">

    var d = new Date();
    document.write(d.getTimezoneOffset());
</script>

<?php
    $offset = ob_get_clean();
    print_r($offset);

2

숨겨진 양식 값을 설정하는 함수가 호출됩니까? 이 예에는 없습니다. 양식을 서버에 다시 게시 하기 전에 숨겨진 값을 수정하는 데 아무런 문제가 없습니다 .


@ pertilence, 당신 말이 맞아요, 함수를 호출하지 않았습니다. PHP로 호출하는 방법을 알고 있습니까?
SUN Jiangong

흠. 누군가가 양식 / onClick 핸들러에서 무언가를 선택할 때 호출하려는 것처럼 보입니다. PHP에서 호출하는 것은 의미가 없습니다. 누군가가 양식 값을 선택하고 함수가 실행되고 숨겨진 양식 값을 업데이트 한 다음 양식 게시에서 PHP로 전환합니다. 아니?
pestilence669

@ pestilence, 누군가 선택 상자에서 항목을 선택하도록하고 싶습니다. 제출 버튼을 클릭하면 검색 결과가 표에 표시됩니다. 따라서 백엔드에서 항목을 선택하면 해당 값이 PHP의 mysql 쿼리에 변수로 전달됩니다. 이것이 내가하고 싶은 일입니다. 그러나 자바 스크립트에서 해결책을 찾을 수없는 것 같습니다. 실마리가 있습니까?
SUN Jiangong

예, 양식의 게시 또는 가져 오기 메소드가 작동하는 경우 승인됩니다.
SUN Jiangong

2

코드에 몇 가지 문제가 있습니다.

  • JavaScript 함수 func_load3 ()을 정의하지만 호출하지는 않습니다.
  • 기능이 잘못된 위치에 정의되어 있습니다. 페이지에 정의되어 있으면 참조하는 HTML 객체가 아직로드되지 않은 것입니다. 대부분의 JavaScript 코드는 실행하기 전에 문서가 완전히로드되었는지 확인하거나 페이지에서 참조하는 요소를지나 코드를 이동할 수 있습니다.
  • 귀하의 양식은 제출할 수단이 없습니다. 제출 버튼이 필요합니다.
  • 양식이 제출되었는지 확인하지 않습니다.

숨겨진 변수에 JavaScript 변수를 양식으로 설정 한 다음 제출하고 PHP에서 값을 다시 읽을 수 있습니다. 다음은이를 보여주는 간단한 예입니다.

<?php
if (isset($_POST['hidden1'])) {
   echo "You submitted {$_POST['hidden1']}";
   die;
}

echo <<<HTML
   <form name="myform" action="{$_SERVER['PHP_SELF']}" method="post" id="myform">
      <input type="submit" name="submit" value="Test this mess!" />
      <input type="hidden" name="hidden1" id="hidden1" />
   </form>

   <script type="text/javascript">
      document.getElementById("hidden1").value = "This is an example";
   </script>
HTML;
?>

2

페이지가 처음 PHP 코드를로드 할 때 처음 실행되고 웹 페이지의 전체 레이아웃을 설정하십시오. 페이지 레이아웃 후 JavaScript로드를 설정합니다. 이제 JavaScript는 DOM과 직접 상호 작용하여 레이아웃을 조작 할 수 있지만 PHP는 페이지를 새로 고칠 필요가 없습니다. PHP를 통해 데이터를 얻을 수 있도록 페이지를 새로 고치고 페이지 URL의 매개 변수를 전달하는 방법 만 있습니다. 따라서 AJAX를 사용하여 페이지를 다시로드하지 않고도 Javascript를 PHP와 상호 작용합니다. AJAX는 API로도 사용할 수 있습니다. PHP에서 변수를 이미 선언 한 경우 한 가지 더. 페이지가로드되기 전에 Javascript 예제와 함께 사용할 수 있습니다.

<script>
var username = "<?php echo $myname;?>";
alert(username);
</script>

위의 코드는 정확하며 작동합니다. 그러나 아래 코드는 완전히 잘못되어 작동하지 않습니다.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • AJAX를 통해 JavaScript에서 PHP로 값 전달

    가장 안전한 방법입니다. 개발자 도구를 통해 HTML 컨텐츠를 편집 할 수 있고 사용자가 데이터를 조작 할 수 있기 때문입니다. 따라서 해당 변수에 대한 보안을 원한다면 AJAX를 사용하는 것이 좋습니다.

JavaScript 변수를 PHP로 전달하는 가장 안전하고 안전한 방법은 AJAX를 이용하는 것입니다

간단한 AJAX 예제

var mydata = 55;
var myname = "syed ali";
var userdata = {'id':mydata,'name':myname};
    $.ajax({
            type: "POST",
            url: "YOUR PHP URL HERE",
            data:userdata, 
            success: function(data){
                console.log(data);
            }
            });
  • 숨겨진 필드를 통해 자바 스크립트에서 PHP로 값을 전달합니다.

그렇지 않으면 양식 안에 숨겨진 HTML 입력을 만들 수 있습니다. 처럼

<input type="hidden" id="mydata">

그런 다음 jQuery 또는 javaScript를 통해 값을 숨겨진 필드에 전달하십시오. 처럼

<script>
var myvalue = 55;
$("#mydata").val(myvalue);
</script>

이제 양식을 제출하면 PHP로 가치를 얻을 수 있습니다.


1
감사합니다. 매우 도움이됩니다. jQuery 메소드를 사용하면 페이지가 실행될 때 생성되는 데이터를 전달할 수 없습니까? 입력 필드를 값으로 설정하고 PHP로 선택할 수 없습니까? 이것은 내가 본 가장 명확한 Ajax 예제 중 하나입니다. 나는 그것을 시도 기대하고 있습니다.
곱슬 곱슬

1

jquery serialize () 메소드를 사용하여 모든 것이 한 번에 이루어질 수 있습니다.

var data=$('#myForm').serialize();

//이 방법으로 서버 측에서도 숨겨진 가치를 얻을 수 있습니다.


0

이 솔루션은 이전에 언급되지 않았습니다. 쿠키를 사용하여 브라우저에서 서버로 데이터를 다시 전달할 수도 있습니다.

브라우저에서 javascript를 사용하여 PHP에 전달하려는 데이터로 쿠키를 설정하십시오.

그런 다음 PHP 측에서이 쿠키를 읽으십시오.


. . . 예를 들어 관련 링크를 제공 하시겠습니까?
ashleedawg

0

우리는 JavaScript 변수 값을 PHP 코드에 직접 전달할 수 없습니다. PHP 코드는 서버 측에서 실행되며 클라이언트 측에서 무슨 일이 일어나고 있는지 전혀 알지 못합니다.

따라서 AJAX를 사용하여 JavaScript 값을 PHP 코드로 구문 분석하는 것이 좋습니다.

또는 코드에서 쿠키의 도움으로이를 수행 할 수도 있습니다.

감사합니다.

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