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

폼의 숨겨진 입력을 사용하여 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>



답변

현재 페이지 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>


답변

쿠키에 저장하십시오.

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

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


답변

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

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


답변

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

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

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


답변

페이지가 사용자에게 전송되기 전에 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>

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


답변

나는 이것을 스스로 알아 내려고 노력한 다음 문제는 이것이 상황을 되돌아 보는 일종의 역전이라는 것을 깨달았습니다. 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 코드에 변수를 전달하는 옵션도 있습니다. 대부분의 경우 페이지 카운터는이 기술을 사용합니다.


답변

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

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