복붙노트

JavaScript 변수를 PHP로 전달하는 방법

PHP

JavaScript 변수를 PHP로 전달하는 방법

양식에 숨겨진 입력을 사용하여 JavaScript 변수를 PHP에 전달하려고합니다.

하지만 나는 $ _POST [ 'hidden1']의 가치를 $ salarieid로 가져올 수 없습니다. 뭔가 잘못 됐니?

다음은 코드입니다.

<script type="text/javascript">
// view which the user has chosen
function func_load3(name){
    var oForm = document.forms["myform"];
    var oSelectBox = oForm.select3;
    var iChoice = oSelectBox.selectedIndex;
    //alert("you have choosen: " + 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 display the query result. 
</table>

해결법

  1. ==============================

    1.

    현재 페이지 자바 스크립트의 변수 값을 현재 페이지의 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>
    
  2. ==============================

    2.

    자바 스크립트에서 PHP로 변수를 전달하는 방법은 여러 가지가 있습니다 (물론 현재 페이지가 아닙니다)

    너는 할 수 있었다 :

     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();
    

    나는 이것이 모든 변수와 겹침 선을 통해 더 매끈 해 보이도록 만들 수 있다고 확신하지만, 초보자를 더 쉽게 이해할 수 있도록 기본을 유지했습니다.

  3. ==============================

    3.

    그냥 쿠키에 저장하십시오 :

    $(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"];
    ?>
    

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

  4. ==============================

    4.

    페이지가 사용자에게 전송되기 전에 PHP가 서버에서 실행되고 사용자 컴퓨터에서 자바 스크립트가 실행되면 PHP 스크립트가 이미 실행됩니다.

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

    이전 질문에서 자세한 정보를 얻을 수 있습니다 : Ajax 자습서

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

    <?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>
    

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

  5. ==============================

    5.

    여기에 작업 예제가 있습니다 : 자바 스크립트 변수 값을 PHP의 같은 페이지에서 가져옵니다.

    <script>
    var p1 = "success";
    </script>
    
    <?php
    echo "<script>document.writeln(p1);</script>";
    ?>
    
  6. ==============================

    6.

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

    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'];
        }
    ?>
    
  7. ==============================

    7.

    나는 이것을 스스로 알아 내려고 노력하고 있었고 이것이 문제를 상황을 바라 보는 거꾸로 보는 방법이라는 것을 깨달았다. 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 코드에 변수를 전달할 수있는 옵션이 있습니다. 페이지 카운터는 많은 경우이 기술을 사용합니다.

  8. ==============================

    8.

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

  9. ==============================

    9.

    여기 내가 어떻게했는지 (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);
    
  10. ==============================

    10.

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

    폼의 숨겨진 변수에 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;
    ?>
    
  11. ==============================

    11.

    모든 것을 한 번에 처리 할 수 ​​있도록 jquery serialize () 메서드를 사용할 수도 있습니다.

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

    //이 방법을 사용하면 서버 측에서 숨겨진 값을 얻을 수도 있습니다.

  12. ==============================

    12.

    이 명백한 해결책은 이전에 언급되지 않았습니다. 쿠키를 사용하여 브라우저의 데이터를 다시 서버로 전달할 수도 있습니다.

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

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

  13. from https://stackoverflow.com/questions/1917576/how-to-pass-javascript-variables-to-php by cc-by-sa and MIT lisence