web-dev-qa-db-ja.com

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>
128
Jiangong SUN

現在のページのJavaScriptから現在のページに変数値を渡すことはできませんPHP code ... PHP codeはサーバー側で実行され、何が起こっているのかはわかりません。クライアント側で。

GETフォームやPHPメソッドを送信するなど、他のメカニズムを使用してhtml-formからPOSTコードに変数を渡す必要があります。

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

クッキーに保存するだけです。

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

それはきれいな解決策ではありませんが、うまくいきます。乾杯。

21
Christian

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

私はこれをもっと見栄え良くして、すべての変数を見てループしないようにすることができると確信しています。

18
user1849393

これが実用的な例です。phpの同じページにあるJavaScriptの変数値を取得します。

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

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

私は自分自身でこれを理解しようとしていました、そして問題がそれが状況を見ることの一種の後ろ向きの方法であるということであるということに気づきました。 JavaScriptからphpにものを渡すのではなく、たいていの場合、逆にするのが最善の方法かもしれません。 PHP codeがサーバー上で実行され、htmlコード(そしておそらくJavaスクリプトも)を作成します。その後、ブラウザはページをロードして、HTMLとJavaスクリプトを実行します。

このような状況に対処するための賢明な方法は、PHPを使用してJavaScriptとhtmlを作成し、次にページ内のJavaScriptを使用してPHPを実行することです。できません。これはPHPとJavaScriptの両方の利点をかなり単純で直接的な方法で提供するようです。

ページからその場でPHPに渡すことの外観を与える1つのことは、PHPコードを呼び出すためにhtml画像タグを使用することです。このようなもの:

<img src="pic.php">

Pic.phpのPHPコードは実際にはあなたのウェブページがロードされる前でさえもhtmlコードを作成するでしょうが、そのhtmlコードは基本的にその場で呼び出されます。ここのphpコードはあなたのページに絵を作成するために使用することができます、しかしそれはあなたがそれの中でそれ以外に好きなコマンドを持つことができます。たぶんそれはあなたのサーバー上のいくつかのファイルの内容などを変更するでしょう。これの利点はphpコードがhtmlから実行されることができるということです、そして私はJavaScriptを仮定します、画像。 URLのパラメータを通してphpコードに変数を渡すオプションもあります。ページカウンタは、多くの場合この手法を使用します。

6
Terry Prothero

PHPはページがユーザーに送信される前にサーバー上で実行され、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>

送信をクリックするとページが送信され、送信されたデータが印刷されます。

6
Derek H

次のようにコードに示されているクッキーを使用して同じ/異なるページでも値を簡単に渡すことができます(私の場合は、Facebookとの統合で使用しています) -

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
Tushar Walzade

これが私のやり方です(ローカルタイムゾーンを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);
3
VisionQuest

あなたのコードには、いくつか問題があります。

  • 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
user3822447

隠しフォームの値を設定するあなたの関数が呼び出されていますか?この例にはありません。隠し値を変更しても問題ありません。beforeフォームをサーバーにポストバックします。

2
pestilence669

Jqueryのserialize()メソッドを使って、すべてが一気に行われるようにすることもできます。

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

//これにより、サーバー側でも隠し値を取得できます。

1

この明らかな解決策は以前には言及されていなかった。また、クッキーを使用してブラウザからサーバーにデータを渡すこともできます。

ブラウザのjavascriptを使ってPHPに渡したいデータをクッキーに設定するだけです。

それから、PHP側のこのクッキーを読んでください。

0
Tim

JavaScriptの変数値をPHPコードに直接渡すことはできません... PHPコードはサーバー側で実行され、クライアント側で何が起こっているかについて何も知りません。

したがって、AJAXを使用して、JavaScript値をphpコードに解析することをお勧めします。

または、コードのCOOKIESを使用してこれを行うこともできます。

ありがとう&乾杯。

0
Rohit Saini